Files
config-astronvim/after/queries/yaml/injections.scm
T

213 lines
7.3 KiB
Scheme

; extends
;
; ~/.config/nvim/after/queries/yaml/injections.scm
;
; Neovim >= 0.10 (@injection.filename). La ligne "; extends" doit rester la
; PREMIÈRE ligne : sans elle ce fichier n'est pas fusionné avec les
; injections de nvim-treesitter (il est ignoré, ou les remplace).
;
; Un (block_scalar) contient son en-tête (`|`, `|-`, `>+`...). #offset!
; saute cet en-tête, d'où 2 variantes par règle : en-tête de 1 caractère
; (`|`, `>`) ou de 2 (`|-`, `|+`, `>-`, `|2`...). Les en-têtes plus longs
; (`|2-`) ou suivis d'un commentaire ne sont volontairement pas injectés
; (le contenu reste une simple chaîne plutôt qu'un arbre en erreur).
; ---------------------------------------------------------------------------
; 1. Clés « nom de fichier » à valeur multi-ligne
; ConfigMap / Secret stringData / values Helm / templates ExternalSecret...
;
; config.json: | -> json nginx.conf: | -> nginx
; app.toml: |- -> toml "values.yaml": | -> yaml
; entrypoint.sh: | -> bash (*) .dockerconfigjson: | -> json
;
; Le langage est déduit par vim.filetype.match() sur le nom de la clé :
; toute extension connue de Neovim marche si le parser est installé.
; (*) ft `sh` -> parser `bash` : mapping fourni par nvim-treesitter,
; sinon : vim.treesitter.language.register('bash', 'sh')
; ---------------------------------------------------------------------------
(block_mapping_pair
key: (flow_node) @injection.filename
value: (block_node
(block_scalar) @injection.content)
(#lua-match? @injection.filename "^[\"']?[%w_.-]*%.%w+[\"']?$")
(#lua-match? @injection.content "^[|>]%s*\n")
(#gsub! @injection.filename "^[\"']?(.-)[\"']?$" "%1")
(#gsub! @injection.filename "^%.dockerconfigjson$" "dockerconfig.json")
(#offset! @injection.content 0 1 0 0))
(block_mapping_pair
key: (flow_node) @injection.filename
value: (block_node
(block_scalar) @injection.content)
(#lua-match? @injection.filename "^[\"']?[%w_.-]*%.%w+[\"']?$")
(#lua-match? @injection.content "^[|>][-+1-9]%s*\n")
(#gsub! @injection.filename "^[\"']?(.-)[\"']?$" "%1")
(#gsub! @injection.filename "^%.dockerconfigjson$" "dockerconfig.json")
(#offset! @injection.content 0 2 0 0))
; ---------------------------------------------------------------------------
; 2. Patches Kustomize -> yaml (JSON6902 en JSON inclus : JSON ⊂ YAML)
;
; - Flux Kustomization .spec.patches[].patch
; - Flux HelmRelease .spec.postRenderers[].kustomize.patches[].patch
; - kustomization.yaml .patches[].patch / .patchesJson6902[].patch
;
; spec:
; patches:
; - patch: |-
; apiVersion: apps/v1
; ...
; target:
; kind: Deployment
; ---------------------------------------------------------------------------
(block_mapping_pair
key: (flow_node) @_patches
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (block_node
(block_scalar) @injection.content)))))))
(#any-of? @_patches "patches" "patchesJson6902")
(#eq? @_patch "patch")
(#lua-match? @injection.content "^[|>]%s*\n")
(#set! injection.language "yaml")
(#offset! @injection.content 0 1 0 0))
(block_mapping_pair
key: (flow_node) @_patches
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (block_node
(block_scalar) @injection.content)))))))
(#any-of? @_patches "patches" "patchesJson6902")
(#eq? @_patch "patch")
(#lua-match? @injection.content "^[|>][-+1-9]%s*\n")
(#set! injection.language "yaml")
(#offset! @injection.content 0 2 0 0))
; Variante en ligne : patch: '[{"op": "remove", "path": "/spec/replicas"}]'
(block_mapping_pair
key: (flow_node) @_patches
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (flow_node
[
(single_quote_scalar)
(double_quote_scalar)
] @injection.content)))))))
(#any-of? @_patches "patches" "patchesJson6902")
(#eq? @_patch "patch")
(#set! injection.language "yaml")
(#offset! @injection.content 0 1 0 -1))
; ---------------------------------------------------------------------------
; 3. Patch JSON6902 générique op/path/value, quand path == "/spec/patches"
; (n'importe quelle valeur pour op : add, replace, remove...) :
;
; - op: replace
; path: "/spec/patches"
; value:
; - target:
; kind: HelmRelease
; patch: |-
; apiVersion: helm.toolkit.fluxcd.io/v2
; ...
; ---------------------------------------------------------------------------
(block_mapping
(block_mapping_pair
key: (flow_node) @_op)
(block_mapping_pair
key: (flow_node) @_path
value: (flow_node) @_path_value)
(block_mapping_pair
key: (flow_node) @_value
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (block_node
(block_scalar) @injection.content))))))))
(#eq? @_op "op")
(#eq? @_path "path")
(#eq? @_value "value")
(#eq? @_patch "patch")
(#lua-match? @_path_value "^[\"']?/spec/patches[\"']?$")
(#lua-match? @injection.content "^[|>]%s*\n")
(#set! injection.language "yaml")
(#offset! @injection.content 0 1 0 0))
(block_mapping
(block_mapping_pair
key: (flow_node) @_op)
(block_mapping_pair
key: (flow_node) @_path
value: (flow_node) @_path_value)
(block_mapping_pair
key: (flow_node) @_value
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (block_node
(block_scalar) @injection.content))))))))
(#eq? @_op "op")
(#eq? @_path "path")
(#eq? @_value "value")
(#eq? @_patch "patch")
(#lua-match? @_path_value "^[\"']?/spec/patches[\"']?$")
(#lua-match? @injection.content "^[|>][-+1-9]%s*\n")
(#set! injection.language "yaml")
(#offset! @injection.content 0 2 0 0))
; Variante en ligne : patch: '[{"op": "remove", "path": "/spec/replicas"}]'
(block_mapping
(block_mapping_pair
key: (flow_node) @_op)
(block_mapping_pair
key: (flow_node) @_path
value: (flow_node) @_path_value)
(block_mapping_pair
key: (flow_node) @_value
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_patch
value: (flow_node
[
(single_quote_scalar)
(double_quote_scalar)
] @injection.content))))))))
(#eq? @_op "op")
(#eq? @_path "path")
(#eq? @_value "value")
(#eq? @_patch "patch")
(#lua-match? @_path_value "^[\"']?/spec/patches[\"']?$")
(#set! injection.language "yaml")
(#offset! @injection.content 0 1 0 -1))