GitHubは、コード検索とコードナビゲーション機能を改善したことを発表した。新しいコード検索は、まだ実験的な利用可能ではあるが、コードシンボルを検索して正規表現を使用できるようになった。コードナビゲーションはプルリクエスト内から利用できるようになり、Pythonリポジトリのより正確な情報を提供するように機能拡張された。
コード検索の場合、私たちのビジョンは、すべての開発者がコードをすばやく直感的に検索、発見、ナビゲート、理解できるようにすることです。[...]そして、結果ページが表示されると、豊富なブラウジング体験がコードの読み取りと理解のために最適化されます。その結果、IDEの外部のコードであっても、なじみのないロジックをすばやく理解できるようになります。
新しいコード検索機能は、https://cs.github.comでテクノロジープレビューとして利用できる。現在、すべてのGitHubリポジトリが新しい検索インデックスに含まれているわけではない。それでも、500万を超えるパブリックリポジトリをカバーしている。その対象には、非常に人気のあるリポジトリと、テクノロジープレビュー内のユーザのすべての公開リポジトリが含まれる。テクノロジープレビューのユーザは、自分のプライベートリポジトリを追加で検索できる。
GitHubの新しい検索インデックスは、ツリーシッターを使用してコードを解析するように構築されている。構文に対応した方法でシンボルを抽出するためだ。サポートされている言語には、C#、Python、Go、Java、JavaScript、TypeScript、PHP、Protocol Buffers、Ruby、Rustなどがある。ただし、現時点では、含まれているリポジトリのデフォルトブランチのみを検索できる。ただし、バイナリファイルと生成されたファイル、およびサイズが350KiBを超えるファイルは除外される。
シンボルを検索したり、正規表現をサポートしたりできるようにするために、GitHubでは特定の演算子を使用した新しい構文が導入された。たとえば、次のように特定のシンボルを検索できる。
language:go symbol:Maint::deleteRows
シンボル検索では、正規表現の使用もサポートされている。次の例では、String型に実装されているすべての変換を検索する。
language:rust symbol:/^String::to_.*/
language
とsymbol
に加えて、新しい検索では、path
、extension
、repo
、org
など、他の多くの修飾子がサポートされている。さらに、修飾子はOR
演算子とAND
演算子を使って組み合わせることができる。
GitHubは、すべてのパブリックリポジトリを含めるためにインデックスを拡大すると同時に、サポートされる言語の数を増やすと述べている。同様に、より適切な結果を返すために、スコアリングとランキングヒューリスティックを使って検索機能を強化する。
コードナビゲーションと言えば、以前はGitHubのUIを介してファイルを表示するときに利用できた機能だが、プルリクエストでも機能するように拡張されている。これにより、たとえば、特定の変更によって影響を受ける可能性のある機能を簡単に確認できる。
コードナビゲーションは、現状では、特定の参照に関連する定義を見つけるための純粋なテキスト検索に基づいている。これは進化し始めている。特に、Pythonリポジトリの場合、GitHubはスタックグラフを使いはじめている。コードナビゲーションが、各リファレンスが参照する特定の定義を識別する方法を改善するためだ。これにより、非常に一般的なシンボルに移動しようとしたときに発生する可能性のあるノイズレベルの減少が予想できる。
今後数か月以内に、GitHubはスタックグラフの他の言語に対してもサポートする予定だ。