Githubのようにプログラミング言語とその構成を判定する

Githubでは下記のようにレポジトリに含まれる言語の割合を可視化している。これを見れば、そのレポジトリでメインで実装されているものが確認できる。
どのようにやっているのか気になったので、調べた。

ツール

下記のlinguistを使うそう。Githubが開発している。

https://github.com/github/linguist/

これを使えば言語の判定と使用割合などが計算できる.

概要

レポジトリを読むとなかなかにやっていることが面白かったので、メモ.

まずGithubの中で

新しくレポジトリにコードをコミットしたときや、更新したときに、優先度低めのタスクとしてコードの解析のジョブが登録される。
他タスクで忙しくない時に実行されるため、反映には時間がかかる.

実際にlinguistの処理は…

linguistはバイナリデータ、ドキュメント、自動生成ファイル、その他設定したファイルを無視して、処理をしていく。

1. 処理は段階的に行いVimやEmacs関連か

2. よく疲れるファイル名か

4. 拡張子は何か

5.ヒューリスティックに決める

6. どうしても決まらないならナイーブベイズで決定

この流れで決めるそう。

割合の計算は、

ファイルのサイズで割合を決めるみたい.

ファイルの数ではないらしい.

参考:

https://softwareengineering.stackexchange.com/questions/156029/how-does-github-calculate-language-percentage-in-a-repo

About the author