Completions de IDE
English | 中文 | 日本語 | 한국어 | Français | Deutsch | Español | Português | Svenska | Suomi | Nederlands
JSON Schemas gerados podem ser usados por arquivos de configuracao TOML, YAML,
JSON e JSON5. Eles sao gerados a partir do mesmo tipo Rust usado pelo
confique:
#![allow(unused)]
fn main() {
use confique::Config;
use schemars::JsonSchema;
#[derive(Debug, Config, JsonSchema)]
struct AppConfig {
#[config(nested)]
#[schemars(extend("x-tree-split" = true))]
server: ServerConfig,
}
}
Gere-os com:
#![allow(unused)]
fn main() {
use rust_config_tree::write_config_schemas;
write_config_schemas::<AppConfig>("schemas/myapp.schema.json")?;
Ok::<(), Box<dyn std::error::Error + Send + Sync>>(())
}
Isso grava o esquema raiz e esquemas de secao, como
schemas/server.schema.json. Esquemas gerados omitem restricoes required para
que o completamento funcione em arquivos de configuracao parciais sem
diagnosticos de campos ausentes. O esquema raiz omite propriedades de secoes
aninhadas, entao o completamento de secoes filhas fica disponivel apenas em
arquivos que vinculam o esquema de secao correspondente.
Campos marcados com x-env-only sao omitidos dos esquemas gerados, entao IDEs nao sugerem secrets ou outros valores que devem vir somente de variaveis de ambiente.
Esquemas de IDE servem para completamento e verificacoes basicas do editor,
como tipo, enum e propriedades desconhecidas suportadas pelo esquema gerado.
Eles nao decidem se um valor concreto de campo e valido para a aplicacao. A
validacao de valores deve ser implementada no codigo com
#[config(validate = Self::validate)] e executada por load_config ou
config-validate. Campos obrigatorios e a validacao final da configuracao
mesclada tambem usam esses caminhos de execucao.
TOML
Arquivos TOML devem vincular o esquema com uma diretiva #:schema no topo do
arquivo:
#:schema ./schemas/myapp.schema.json
[server]
bind = "0.0.0.0"
port = 3000
Nao use um campo raiz $schema = "..." em TOML. Ele vira dado real de
configuracao e pode afetar a desserializacao em tempo de execucao.
write_config_templates_with_schema adiciona a diretiva #:schema
automaticamente para modelos TOML.
YAML
Arquivos YAML devem usar a modeline do YAML Language Server:
# yaml-language-server: $schema=./schemas/myapp.schema.json
server:
bind: 0.0.0.0
port: 3000
write_config_templates_with_schema adiciona essa modeline automaticamente para
modelos YAML. Modelos YAML divididos vinculam seu esquema de secao; por exemplo,
log.yaml vincula ./schemas/log.schema.json.
JSON
Arquivos JSON e JSON5 podem vincular um schema com um campo raiz $schema.
write_config_templates_with_schema o adiciona automaticamente aos modelos
JSON e JSON5 gerados:
{
"$schema": "./schemas/myapp.schema.json"
}
As configuracoes do editor continuam uteis quando o projeto nao quer vinculo dentro do arquivo:
{
"json.schemas": [
{
"fileMatch": [
"/config.json",
"/config.*.json",
"/deploy/*.json"
],
"url": "./schemas/myapp.schema.json"
}
]
}
YAML tambem pode ser vinculado por configuracoes do VS Code:
{
"yaml.schemas": {
"./schemas/myapp.schema.json": [
"config.yaml",
"config.*.yaml",
"deploy/*.yaml"
]
}
}
O layout final e:
schemas/myapp.schema.json:
Somente campos do arquivo raiz
schemas/server.schema.json:
Schema da secao server
config.toml:
#:schema ./schemas/myapp.schema.json
config.yaml:
# yaml-language-server: $schema=./schemas/myapp.schema.json
server.yaml:
# yaml-language-server: $schema=./schemas/server.schema.json
config.json:
"$schema": "./schemas/myapp.schema.json"
Referencias: