RADWIMPS icon indicating copy to clipboard operation
RADWIMPS copied to clipboard

言語一覧の追加

Open raiga0310 opened this issue 5 years ago • 8 comments

raiga0310 avatar Jul 08 '20 07:07 raiga0310

拡張子と言語のペアのデータベースが存在すれば、このリポジトリから"RADWIMPS.(.*)"のファイルを取得してCIとかから言語一覧を生成できそう?

mirror-kt avatar Jul 08 '20 08:07 mirror-kt

審査待ちの言語も載せてほしいです

laminne avatar Jul 08 '20 08:07 laminne

審査待ちについては追記予定です 自動追記についてはあとでやるとして、とりあえず今あるやつ全部ぶち込みます

raiga0310 avatar Jul 08 '20 08:07 raiga0310

拡張子と言語のペアのデータベースが存在すれば、このリポジトリから"RADWIMPS.(.*)"のファイルを取得してCIとかから言語一覧を生成できそう?

できそうではあるけども……。

raiga0310 avatar Jul 08 '20 08:07 raiga0310

GitHub がリポジトリ毎に言語統計を生成するために使用している、linguist という Ruby 製のツールが言語一覧の生成に使えそうです。 https://github.com/github/linguist gem でコマンドラインツールが提供されています。

実際に僕の環境で動かしてみると、現状の master ブランチではこんな結果になりました。(--json オプションを指定して、結果を JSON 文字列で出力させています)

$ github-linguist --json > result.json

result.json :

{"AppleScript":["RADWIMPS.applescript"],"Shell":["RADWIMPS.bash","RADWIMPS.dash"],"C":["RADWIMPS.c"],"Clojure":["RADWIMPS.clj"],"C++":["RADWIMPS.cpp","RADWIMPS.h"],"Crystal":["RADWIMPS.cr"],"C#":["RADWIMPS.cs"],"D":["RADWIMPS.d"],"Dart":["RADWIMPS.dart"],"Emacs Lisp":["RADWIMPS.el"],"Elixir":["RADWIMPS.exs"],"F#":["RADWIMPS.fs"],"Forth":["RADWIMPS.fth"],"Go":["RADWIMPS.go"],"Groovy":["RADWIMPS.groovy"],"Hack":["RADWIMPS.hack"],"Haskell":["RADWIMPS.hs"],"HTML":["RADWIMPS.html"],"Haxe":["RADWIMPS.hx"],"Java":["RADWIMPS.java"],"Julia":["RADWIMPS.jl"],"JavaScript":["RADWIMPS.js"],"Kotlin":["RADWIMPS.kt"],"Common Lisp":["RADWIMPS.lsp"],"Lua":["RADWIMPS.lua"],"Objective-C":["RADWIMPS.m"],"OCaml":["RADWIMPS.ml"],"Nim":["RADWIMPS.nim"],"PHP":["RADWIMPS.php"],"Perl":["RADWIMPS.pl"],"PowerShell":["RADWIMPS.ps1"],"Python":["RADWIMPS.py"],"Ruby":["RADWIMPS.rb"],"Reason":["RADWIMPS.re"],"Racket":["RADWIMPS.rkt"],"Rust":["RADWIMPS.rs"],"Scala":["RADWIMPS.scala"],"Scheme":["RADWIMPS.scm"],"Swift":["RADWIMPS.swift"],"TeX":["RADWIMPS.tex"],"TypeScript":["RADWIMPS.ts"],"V":["RADWIMPS.v"],"Vim script":["RADWIMPS.vim"]}

こんな風に、キーが言語名の文字列で、対応する値がソースファイル名の配列になっているオブジェクトが返ります。 あとはこれを受け取って言語一覧の Markdown を吐き出すスクリプトを何かしらの言語で書けばいいと思います。

デフォルトの言語判定方法に誤りがある場合は、.gitattributes ファイルを配置して上書きすることもできます。 https://github.com/github/linguist#using-gitattributes

0918nobita avatar Jul 09 '20 05:07 0918nobita

もうひとつ考えられる方法としては、そもそもソースファイルを言語ごとに異なるサブディレクトリにわけて配置して、それぞれのディレクトリ名が言語名と対応するようにする(今後言語を追加する際にもそのルールに従わせる)、という方法があると思います。

これなら linguist が対応できてないような言語でもスクリプトで柔軟に対処でき、なおかつ (Node.jsでの package.json, TypeScript での tsconfig.json, Rust での Cargo.toml のように) 別途設定ファイル等が必要な言語のプログラムでも管理しやすくなります。

ディレクトリツリーがそのまま言語一覧のような見た目になるので、この方法を採用するなら言語一覧自体生成する必要もないかもしれません。

0918nobita avatar Jul 09 '20 06:07 0918nobita

#123 にてディレクトリ構成を検討します

mirror-kt avatar Jul 10 '20 08:07 mirror-kt

$ github-linguist --json | jq .
indented json
{
  "Ada": [
    "RADWIMPS.adb"
  ],
  "AppleScript": [
    "RADWIMPS.applescript"
  ],
  "Shell": [
    "RADWIMPS.bash",
    "RADWIMPS.dash"
  ],
  "C": [
    "RADWIMPS.c"
  ],
  "Clojure": [
    "RADWIMPS.clj"
  ],
  "CoffeeScript": [
    "RADWIMPS.coffee"
  ],
  "C++": [
    "RADWIMPS.cpp",
    "RADWIMPS.h",
    "RADWIMPS.ino"
  ],
  "Crystal": [
    "RADWIMPS.cr"
  ],
  "C#": [
    "RADWIMPS.cs"
  ],
  "D": [
    "RADWIMPS.d"
  ],
  "Dart": [
    "RADWIMPS.dart"
  ],
  "Pascal": [
    "RADWIMPS.dpr"
  ],
  "Emacs Lisp": [
    "RADWIMPS.el"
  ],
  "Erlang": [
    "RADWIMPS.erl"
  ],
  "Elixir": [
    "RADWIMPS.exs"
  ],
  "F#": [
    "RADWIMPS.fs"
  ],
  "Forth": [
    "RADWIMPS.fth"
  ],
  "Go": [
    "RADWIMPS.go"
  ],
  "Groovy": [
    "RADWIMPS.groovy"
  ],
  "Hack": [
    "RADWIMPS.hack"
  ],
  "Haskell": [
    "RADWIMPS.hs"
  ],
  "HTML": [
    "RADWIMPS.html"
  ],
  "Haxe": [
    "RADWIMPS.hx"
  ],
  "Io": [
    "RADWIMPS.io"
  ],
  "Java": [
    "RADWIMPS.java"
  ],
  "Julia": [
    "RADWIMPS.jl"
  ],
  "JavaScript": [
    "RADWIMPS.js"
  ],
  "Kotlin": [
    "RADWIMPS.kt"
  ],
  "Common Lisp": [
    "RADWIMPS.lsp"
  ],
  "Lua": [
    "RADWIMPS.lua"
  ],
  "Objective-C": [
    "RADWIMPS.m"
  ],
  "OCaml": [
    "RADWIMPS.ml"
  ],
  "Nim": [
    "RADWIMPS.nim"
  ],
  "OpenEdge ABL": [
    "RADWIMPS.p"
  ],
  "Processing": [
    "RADWIMPS.pde"
  ],
  "PHP": [
    "RADWIMPS.php"
  ],
  "Perl": [
    "RADWIMPS.pl"
  ],
  "PowerShell": [
    "RADWIMPS.ps1"
  ],
  "Python": [
    "RADWIMPS.py"
  ],
  "Ruby": [
    "RADWIMPS.rb"
  ],
  "Reason": [
    "RADWIMPS.re"
  ],
  "Racket": [
    "RADWIMPS.rkt"
  ],
  "Rust": [
    "RADWIMPS.rs"
  ],
  "Scala": [
    "RADWIMPS.scala"
  ],
  "Scheme": [
    "RADWIMPS.scm"
  ],
  "Swift": [
    "RADWIMPS.swift"
  ],
  "TeX": [
    "RADWIMPS.tex"
  ],
  "TypeScript": [
    "RADWIMPS.ts"
  ],
  "V": [
    "RADWIMPS.v"
  ],
  "Visual Basic .NET": [
    "RADWIMPS.vb"
  ],
  "Vim script": [
    "RADWIMPS.vim"
  ],
  "Vue": [
    "RADWIMPS.vue"
  ]
}

eggplants avatar Jul 11 '20 05:07 eggplants