タブまたはスペース? 40万のGitHubリポジトリ、10億のファイル、14 TBのコードの分析





好奇心developers盛な開発者にとって、タブとスペースを使用してコードをフォーマットする問題は依然として関連しています。 それらは同じ意味で使用できますか?たとえば、タブに2スペース、または4スペース? しかし、単一の標準はないため、開発者間で誤解が生じる場合があります。 さらに、さまざまなIDEとそのコンパイラは、独自の方法でタブを処理します。



通常、この問題の解決策は、プロジェクト内のフォーマット規則またはプログラミング言語全体に関する合意になります。



Googleの開発者チームがGithubリポジトリのプロジェクトを調査しました。 彼らは14のプログラミング言語で書かれたコードを分析しました。 この調査の目的は、タブとスペースの比率を特定することでした。つまり、各言語のテキストをフォーマットする最も一般的な方法です。



実装



分析のために、既存のテーブル[bigquery-public-data:github_repos.sample_files]を使用しました。このテーブルには、Githubリポジトリの名前が書き込まれています。



約2か月前に、すべてのオープンソースGithubコード BigQueryテーブルの形式で利用可能なったことを思い出してください。



ただし、すべてのリポジトリが分析用に選択されたわけではなく、2016年1月から5月の期間に受け取った星の数が最も多い上位40万のリポジトリのみが選択されました。







最も一般的な14のプログラミング言語のコードを含むファイルがこの表から選択されました。 このため、対応するファイルの拡張子は、SQLクエリのパラメーターとして指定されました-.java、.h、.js、.c、.php、.html、.cs、.json、.py、.cpp、.xml、.rb、 .cc、.go。



SELECT a.id id, size, content, binary, copies, sample_repo_name , sample_path
FROM (
  SELECT id, FIRST(path) sample_path, FIRST(repo_name) sample_repo_name 
  FROM [bigquery-public-data:github_repos.sample_files] 
  WHERE REGEXP_EXTRACT(path, r'\.([^\.]*)$') IN ('java','h','js','c','php','html','cs','json','py','cpp','xml','rb','cc','go')
  GROUP BY id
) a
JOIN [bigquery-public-data:github_repos.contents] b
ON a.id = b.id
      
      





864.6s elapsed, 1.60 TB processed


. , (join) 190 70 . 1,6 . .



[contents] . . .







.



SELECT ext, tabs, spaces, countext, LOG((spaces+1)/(tabs+1)) lratio
FROM (
  SELECT REGEXP_EXTRACT(sample_path, r'\.([^\.]*)$') ext, 
         SUM(best='tab') tabs, SUM(best='space') spaces, 
         COUNT(*) countext
  FROM (
    SELECT sample_path, sample_repo_name, IF(SUM(line=' ')>SUM(line='\t'), 'space', 'tab') WITHIN RECORD best,
           COUNT(line) WITHIN RECORD c
    FROM (
      SELECT LEFT(SPLIT(content, '\n'), 1) line, sample_path, sample_repo_name 
      FROM [fh-bigquery:github_extracts.contents_top_repos_top_langs]
      HAVING REGEXP_MATCH(line, r'[ \t]')
    )
    HAVING c>10 # at least 10 lines that start with space or tab
  )
  GROUP BY ext
)
ORDER BY countext DESC
LIMIT 100
      
      





16.0s elapsed, 133 GB processed


133 16 . BigQuery.





, — Java.



- , . IDE, . IDE, .



« ». . , .






All Articles