web-dev-qa-db-ja.com

githubはプロジェクトの言語をどのように把握しますか?

私は最近、JavaScriptとC++の両方でgithubプロジェクトに取り組んでいましたが、githubがプロジェクトにC++のタグを付けていることに気付きました。単一の言語を選択する必要がある場合、C++コードはJavaScriptライブラリとしてコンパイルされるため、これはおそらく正しい指定です。

79
Justin Ethier

nuclearsandwich (GitHubサポートチームまたは「supportocat」)による2013年4月の更新:

希望する言語が構文の強調表示を受け取っていない場合は、Linguistライブラリに貢献して追加できます。


(元の回答、2012年10月)

この GitHubサポートのスレッド で説明しています:

各拡張子のファイルサイズを合計するだけです。最大のものが「勝ち」ます。

ファイルを開いてコンテンツを解析することは避けたいのですが、どちらもプロセスを遅くしますが...それがこのような競合を解決する唯一の方法かもしれません。

これは100%正確ではないため、追加する必要がありました。

私も、推測が間違っている場合には、単純な手動オーバーライドスイッチに投票します。


注: Mark Rushakoffhis answer (vovoted)で言及しているように、それ以降 linguistプロジェクト (6月からオープンソース化された2011)。
まだ問題があります: GitHub Linguist Issues
を参照してください 詳細はこちら

言語が検出されると、 AlbinoPygments ラッパーに渡され、実際の構文強調表示が行われます。

そして、 。gitattributesファイルに言語ディレクティブを追加できます

78
VonC

現在、Githubの 言語プロジェクト は、 このGithubブログの投稿 (この質問が最初に尋ねられてから数か月後に出された)で説明されているように、言語統計を決定するために使用されます。

13
Mark Rushakoff

最初に、 Linguist overrides を使用して、リポジトリ内のファイルに対して検出された言語をオーバーライドできることを知っている

さて、一言で言えば、

  1. 各リポジトリは、language statisticsの最初の言語でタグ付けされます。
  2. 言語統計は、検出されたプログラミング言語またはマークアップ言語ごとに、ファイルの合計サイズをカウントします。 Vendored、ドキュメント、および生成されたファイルはカウントされません。
  3. 各ファイルの言語は、オープンソースプロジェクトLinguistによって検出されます。

Linguistはどのように言語を検出しますか?

言語学者は 戦略に従う を順番に使用し、完全に一致する言語を返すとすぐに言語を返します(単一言語が返される戦略)。

  1. EmacsおよびVimモードライン を探します。
  2. 既知のファイル名。一部のファイル名は特定の言語に関連付けられています( Makefile と考えてください)。
  3. シバンを探してください。 #!/bin/bash Shebang はShellに分類されます。
  4. 既知のファイル拡張子。言語には、一連の拡張機能が関連付けられています。ただし、この戦略には多くの矛盾があります。矛盾する結果(C++、C、Objective-Cの.h)は、後続の戦略によって改良されます。
  5. ヒューリスティックルール のセット。通常、ファイルのコンテンツでは正規表現に依存して、言語を特定しようとします(例: ^[^#]+:- for Prolog )。
  6. サンプルファイル でトレーニングされた単純なベイズ分類器。最後の戦略、最低精度。ベイジアン分類器は、常に言語のサブセットを入力として受け取ります。すべての言語に分類するためのものではありません。分類子で見つかった最適な一致が返されます。

非ベンダーおよびドキュメントファイルとは何ですか?

言語学者は、一部のファイルをvendoredと見なします。つまり、言語統計に含まれていません。これらにはjQueryなどのサードパーティライブラリが含まれ、 vendor.yml 構成ファイル。 Linguist overrides を使用して、リポジトリ内のファイルをベンダーまたはアンベンダーすることもできます。

同様に、ドキュメントファイルは documentation.yml および Linguist overrides を使用して変更できます。

生成されたファイルはどのように検出されますか?

Linguistは、パスとファイルのコンテンツの両方を使用して、生成されたファイルを検出するために 単純な規則 に依存しています。生成されたファイルは言語統計にカウントされず、github.comの差分には表示されません。

プログラミング言語とマークアップ言語はどうですか?

言語学者では、各言語にタイプが与えられます。これらのタイプは、メイン構成ファイル languages.yml 。統計では、プログラミング言語とマークアップ言語のみがカウントされます。

3
pchaigno

linguist をいじくり回した後、これに気付きました。

Shebang のファイルの場合、言語を決定するときにシバンが考慮されますが、他に対して均等に重み付けされているようです tokens Shebangはファイルの言語を明確に定義する必要があるため、これは大きなエラーのようです。

これにより issues が強調表示されます。

0
Steven Penny