素材の味

丁寧に暮らしています

独自yamlに対してvalidation & auto completionを行う

tl;dr

  • configに対するJSON Schemaを作成すれば yaml-language-server がやってくれる
  • protoがある場合は protoc-gen-jsonschemaJSON Schemaを生成できる

社内ツールとかでconfigがあって、それに対するvalidationとかauto completionがあれば便利だなという時があると思う

わざわざLSPを自作するのは流石に大変だと思うけど、configがyamlの場合は yaml-lanugage-serverJSON Schema をサポートしているので、configに対するschemaを作成して、読む込むだけでvalidation,auto completionが実現できる

github.com

https://media.giphy.com/media/XxvLRnep3Cu9B14A3K/giphy.gif

protoからJSON Schemaの生成

ツールの中でgRPCを使っていてprotoファイルが存在している場合は、protocのpluginを使ってprotoファイルからJSON Schemaを生成することができるので楽

github.com

syntax = "proto3";
package example;

message MyToolConfig {
    string hello = 1;
    int32 world = 2;
}

こういう config.proto を使って protoc --jsonschema_out=. config.proto を実行すると、

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "properties": {
        "hello": {
            "type": "string"
        },
        "world": {
            "type": "integer"
        }
    },
    "additionalProperties": true,
    "type": "object"
}

こういう MyToolCofnig.jsonschema が生成される
あとはさっきの yaml-language-server の設定で、この JSON を読み込めば良い