goで補完付きの設定ファイルを作りたい
設定ファイル中で設定可能なオプションなどが分からないときの試行錯誤がめんどくさい。補完が効くような設定ファイルを考えてみたい。
幾つか考えることがある
- 補完可能な設定ファイルのフォーマットを見つける
- 補完可能にするために必要な情報を整理する
- いい感じに補完可能にするための記述を考える
補完可能な設定ファイルのフォーマットを見つける
例えば設定ファイルとして使えるフォーマットとして以下があげられる
- .json
- (.jsonc)
- .yaml
- .toml
- (.env)
すごくマイナーではあるけれど以下のようなものは?
- cue
- jsonnet
基本的にlanguage serverが対応していれば補完可能?
toml
Even Better TOML - Visual Studio Marketplace
jsonschemaを持っている。これがlocalで参照できれば良い。
- https://github.com/tamasfe/taplo/blob/3d80fe26a4795073f665304c8e3b5b7c37a76856/site/site/public/schemas/pyproject.toml.json
- https://taplo.tamasfe.dev/configuration/using-schemas.html
- https://taplo.tamasfe.dev/configuration/directives.html#the-schema-directive
#:schema ./foo-schema.json
foo = "bar"
draft 4が使われているみたい
All features from the Draft 4 specification are supported, the schemas may contain external and even recursive references as well.
examplesはdraft-7
これが使われている。draft-4にこだわらなくて良さそう。
yaml
YAML - Visual Studio Marketplace
コメントで設定するらしい
# yaml-language-server: $schema=<urlToTheSchema>
一応draft 7までいける?
YAML Language support uses JSON Schemas to understand the shape of a YAML file, including its value sets, defaults and descriptions. The schema support is shipped with JSON Schema Draft 7.
追記
ajvが使われているし、draft-2020-12にも対応していそう。
json
jsonはコメントがなさそう。設定できないのでは?
jsonc
denoのextensionってどうやってるんだろ?
schemasを持っている。
package.jsonのjsonValidationのあたりになんか書いてる
vs-codeのextensionの設定にあるのか。
補完可能にするために必要な情報を整理する
- config.go
- jsonschema
- 設定ファイルのskeleton (schemaのコメントがついた空のファイル?)
いい感じに補完可能にするための記述を考える
gosで定義してgo generateで生成すれば良い?
- goのファイルを生成
- jsonschemaを生成
- confのskeletonを生成? (consoleに出力で良いのでは?)
goでのvalidation
これが一番手厚くサポートしている
生成されるgoのコード
とりあえず、シンプルなものを考えてみるその後どうしようか?
- structを出力
- slices,mapの対応
- tagsの出力 (json,toml,yaml)
- omitempty対応
- pointer対応
- embeddedの対応
あと、
- 個別に出力できる必要がある?
出力方法
- marker comment越しに変換
- stdoutに出力
- 複数のファイルに分割して出力