ファイルとシンボルを探し、ソース参照を確認する
Go to File、Search All Files、言語サーバーの使い分けと、結果が見つからないときの確認方法。
場所がおおよそ分かるなら Go to File、書かれている内容が分かるなら Search All Files、シンボルを追いたいなら言語サーバーによるナビゲーションを使います。一つの広い検索を何度も絞るより、三つを使い分ける方が速いことが多いです。
検索方法を選ぶ
| 分かっていること | 使う機能 | 例 |
|---|---|---|
| ファイル名・パスの一部 | Command-P(Go to File…) | SettingsStore、src/config |
| メッセージ・設定・コードの断片 | サイドバーの Search All Files | 正確なエラーメッセージや設定キー |
| 開いているファイルのシンボル | Go to Definition、Find References | 関数の実装や呼び出し元 |
Go to File はファイル名とパスを検索し、本文は検索しません。プログラムが出力したエラーは Search All Files で探します。data や result のような一般的な単語より、特徴的な文字列を使ってください。
ファイルや結果が見つからなければ、まずルート、その次に隠しファイルと Git 除外ファイルの表示を確認します。既定値は Settings → General → Files にあり、サイドバー、Go to File、Search All Files に適用されます。各ワークスペースではサイドバーのステータスバーから上書きできます。
エラーメッセージから発生した分岐を追う
メッセージは出発点になりますが、出力行が別の場所の失敗を包んでいるだけの場合もあります。
- 固定部分を検索する。 サイドバーの虫眼鏡から Search All Files を開きます。実行時に入る時刻、リクエスト ID、パスは除きます。まず Regex と Whole word は無効にし、大文字小文字が不明なら Aa メニューで Ignore を選びます。
- 範囲を確認する。 Filters で以前のフォルダーやファイルの条件を消してから広く検索します。候補のモジュールが分かったら、フォルダーや
*.rsなどのパターンで絞ります。Best matches は結果が一部であることを示します。見つからないことから結論を出す前に検索を絞ってください。 - 一致箇所の周辺を読む。 そこへ到達する条件を探します。この場所でエラーを作ったのか、catch やログ層で別のエラーに情報を加えたのか。後者なら失敗した操作を追います。
- 入力をさかのぼる。 関数の呼び出し元と、この分岐を選ぶ値を追います。言語サーバーが対応していれば Find References を使い、なければ関数名や設定名を検索して各使用箇所を読みます。
- 説明を確かめる。 想定した入力と分岐を、対象を絞った既存テストや同じ版の実行ログと比べます。何が確認でき、何が未確認かを記録します。メッセージを見つけただけでは原因は確定しません。
Search All Files は現在のワークスペースを検索し、開いたファイルの未保存テキストも含みます。Git の全リビジョンを検索する機能ではありません。古いビルドのエラーなら、現在のソースで説明する前に該当する版を比較してください。
言語サーバー
Go to Definition、Find References、実装検索、呼び出し階層は言語サーバーが提供します。
| 言語 | サーバー |
|---|---|
| Swift | SourceKit-LSP |
| Rust | rust-analyzer |
| C, C++, Objective-C, Objective-C++ | clangd |
| Python | Pyright |
| JavaScript, JSX, TypeScript, TSX | TypeScript Language Server |
| Go | gopls |
rust-analyzer は Settings → Code Navigation からインストールできます。SourceKit-LSP と clangd は選択中の Xcode ツールチェーンに付属します。Pyright、TypeScript Language Server、gopls は自分でインストールし、PATH 上に置く必要があります。対応機能はサーバーごとに異なり、プロジェクト側の追加設定が必要な場合もあります。
存在するシンボルが見つからなければ、ルートを開いたか、サーバーが入っているか、依存関係とビルド設定が揃っているかを確認します。構文強調は言語サーバーなしでも機能します。
サーバーがなくても、テキスト検索でかなり調べられます。宣言と使用箇所を検索し、型や import から同名のシンボルを区別してください。
読んでいた場所を残して動作を追う
他の定義へ移動しても、出発点のファイルをタブに残します。重要な呼び出しごとに入力と次の経路を決める要素を記録します。設定、型、レジストリのキー、現在の状態などです。
Find References は言語サーバーが報告した使用箇所であり、実行履歴ではありません。サーバーの対応範囲、プロジェクト設定、件数制限で結果が欠けることもあります。レジストリにローカル版とリモート版があるなら、選択する値を探します。非同期コードでは、結果が戻るまでに何が変わり得るかも確認します。
設定値の読解メモは、例えば次のようになります。
CLI input → config resolver → validation → request builder
Selected source: environment override
Failure: invalid value stops before request construction
Unverified: which parent process sets that environment variable
確認した各段階にファイルと行番号を付けます。設定を追うチュートリアルでは、実行可能なテスト付きで最後までたどれます。
AI のソース参照を確認する
回答のソース参照を押すと Quick Look で引用行を表示します。抜粋だけでは理解しにくければ Open File で全体をタブに開きます。
回答を採用する前に周辺条件と呼び出し元を読んでください。例えばキャッシュ項目の削除は、その項目が同じリクエストのものだと確認できる場合にだけ安全かもしれません。参照は場所を示し、周囲のコードが主張の成否を示します。
文書と過去の版
Markdown は閲覧モードで開き、ソース編集に切り替えられます。README やテストを実装の横に置き、一致しない点を記録すると便利です。
Git 履歴のファイルと現在のファイルは並べて開けます。参照を追う前や編集前に、タブの版を確認してください。過去のコミットの説明は作業ツリーと一致しない場合があります。版の選び方はコミットとブランチの比較をご覧ください。