vscodeの設定ファイル .vsocde/*.json をGitHubでJSONCとしてハイライトさせる

.gitattributes に次の1行を足すと、vscodeの設定ファイルがGitHubでJSONC (JSON with Comments) としてsyntax highlightされるようになります。

.vscode/*.json linguist-language=jsonc

GitHubのsyntax highlightは github/linguist で制御されています。これに同梱されている overrides.md というドキュメントに、repoごとのカスタマイズ方法が載っています。

https://github.com/github/linguist/blob/master/docs/overrides.md

syntax highlightだけでなく、GitHub repoの統計(どの言語がN%、みたいなやつ)からの除外、自動生成されたかどうかのフラグ(統計から除外されるのと、PRでdiffがデフォルトで展開されなくなる)、などを制御できます。

syntax highlightのデフォルトおよび利用可能な値は languages.yml に定義されているので、そこを参考にして設定できます。

https://github.com/github/linguist/blob/master/lib/linguist/languages.yml

ハイライトの実例はこんな感じ: https://github.com/msgpack/msgpack-javascript/blob/main/.vscode/launch.json


そもそもGitHubがデフォルトで .vscode/*.json をJSONCとしてもいいんじゃないか?とおもってpull-req github/linguist#6221も提案してみたのですが、これは採用予定なしと。理由は次の通り:

  • basenameだけでなくpathnameをみるというのは破壊的変更で影響範囲が大きすぎる。もし本当にやるなら慎重な検討が必要だが、いまのところ恩恵を受けるのは .gitattributes を指定していないvscode userだけ
  • GitHub 11年の歴史でsyntax highlightの際にpathname全体をみるという要求はvscodeの設定ファイルだけ
  • そもそもvscode*.json ファイルにJSONと非互換なフォーマット(JSONC)を書けるというのは慣習に違反していて無作法では?もしこの件について何かしたいならvscode.vsocde/*.jsonc をサポートするべきではないか

正論すぎますね。個人的には、JSONがコメントと末尾コンマを許容するようになるとこの件のみならずJSON/JSONCにまつわる様々な問題が解決してみんな幸せになれるので、Microsoftvscode teamがそういう提案をしてくれるといいなと思います(いや提案するのは誰でもいいですが)。逆に、そういう未来を想定するならばvscode.vscode/*.jsonc をサポートする必要はないのかなとも思います。現状だといずれにせよ .gitattibutes でカスタマイズできますしね。