feat(languages): add gitlab-ci language specialized from yaml (#14396)

This commit is contained in:
Kristoffer Plagborg Bak Sørensen
2025-09-10 15:41:04 +02:00
committed by GitHub
parent 71038266e8
commit 97293c9f36
9 changed files with 176 additions and 5 deletions

View File

@@ -0,0 +1,89 @@
(boolean_scalar) @constant.builtin.boolean
(null_scalar) @constant.builtin
(double_quote_scalar) @string
(single_quote_scalar) @string
(block_scalar) @string
(string_scalar) @string
(escape_sequence) @constant.character.escape
(integer_scalar) @constant.numeric.integer
(float_scalar) @constant.numeric.float
(comment) @comment
(anchor_name) @type
(alias_name) @type
(tag) @type
(yaml_directive) @keyword
(block_mapping_pair
key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member))
(block_mapping_pair
key: (flow_node (plain_scalar (string_scalar) @variable.other.member)))
(flow_mapping
(_ key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member)))
(flow_mapping
(_ key: (flow_node (plain_scalar (string_scalar) @variable.other.member))))
[
","
"-"
":"
">"
"?"
"|"
] @punctuation.delimiter
[
"["
"]"
"{"
"}"
] @punctuation.bracket
["*" "&" "---" "..."] @punctuation.special
; Highlight the toplevel keys differently as keywords
(block_mapping_pair
key: (flow_node (plain_scalar (string_scalar) @keyword (#any-of? @keyword "variables" "stages" "default" "include" "workflow"))) )
; Highlight the builtin stages differently
; <https://docs.gitlab.com/ci/yaml/#stages>
(block_mapping_pair
key: (flow_node
(plain_scalar
(string_scalar) @variable.other.member (#eq? @variable.other.member "stage")))
value: (flow_node
(plain_scalar
(string_scalar) @constant.builtin (#any-of? @constant.builtin ".pre" "build" "test" "deploy" ".post"))))
; e.g.
; ```
; stages:
; - build
; - test
; ```
(block_mapping_pair
key: (flow_node
(plain_scalar
(string_scalar) @keyword (#eq? @keyword "stages")))
value: (block_node
(block_sequence
(block_sequence_item
(flow_node
(plain_scalar
(string_scalar) @constant.builtin (#any-of? @constant.builtin ".pre" "build" "test" "deploy" ".post")))))))
; Highlight defined variable names as @variable
; Matches on:
; ```
; variables:
; <variable>: ...
; ```
(block_mapping_pair
key: (flow_node
(plain_scalar
(string_scalar) @keyword (#eq? @keyword "variables")))
value: (block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @variable)+)))

View File

@@ -0,0 +1 @@
; inherits: yaml

View File

@@ -0,0 +1,51 @@
((comment) @injection.content
(#set! injection.language "comment"))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "script" "before_script" "after_script" "pre_get_sources_script" "command" "entrypoint")
value: (flow_node
(plain_scalar
(string_scalar) @injection.content)
(#set! injection.language "bash")))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "script" "before_script" "after_script" "pre_get_sources_script" "command" "entrypoint")
value: (block_node
(block_scalar) @injection.content
(#set! injection.language "bash")))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "script" "before_script" "after_script" "pre_get_sources_script" "command" "entrypoint")
value: (block_node
(block_sequence
(block_sequence_item
(flow_node
(plain_scalar
(string_scalar) @injection.content))
(#set! injection.language "bash")))))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "script" "before_script" "after_script" "pre_get_sources_script" "command" "entrypoint")
value: (block_node
(block_sequence
(block_sequence_item
(block_node
(block_scalar) @injection.content
(#set! injection.language "bash"))))))
; e.g.
; ```
; job1:
; services:
; entrypoint: ["/usr/local/bin/docker-entrypoint.sh", "-c", 'max_connections=100']
; ```
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "command" "entrypoint")
value: (flow_node
(flow_sequence
(flow_node
[
(double_quote_scalar)
(single_quote_scalar)
] @injection.content)))
(#set! injection.language "bash"))

View File

@@ -0,0 +1 @@
; inherits: yaml

View File

@@ -0,0 +1,17 @@
; select jobs
(block_mapping
(block_mapping_pair
value: (block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @_key (#eq? @_key "stage"))))) @definition.struct)
; select defined variables under `variables:`
(block_mapping
(block_mapping_pair
key: (flow_node) @_key (#eq? @_key "variables")
value: (block_node
(block_mapping
(block_mapping_pair
key: (flow_node) @name
value: (_) @definition.constant)))))

View File

@@ -0,0 +1 @@
; inherits: yaml

View File

@@ -21,23 +21,22 @@
; Modified for Helix from https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/yaml/injections.scm
;; GitHub actions: run
;; Gitlab CI: scripts, before_script, after_script
;; Buildkite: command, commands
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "run" "script" "before_script" "after_script" "command" "commands")
key: (flow_node) @_run (#any-of? @_run "run" "command" "commands")
value: (flow_node
(plain_scalar
(string_scalar) @injection.content)
(#set! injection.language "bash")))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "run" "script" "before_script" "after_script" "command" "commands")
key: (flow_node) @_run (#any-of? @_run "run" "command" "commands")
value: (block_node
(block_scalar) @injection.content
(#set! injection.language "bash")))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "run" "script" "before_script" "after_script" "command" "commands")
key: (flow_node) @_run (#any-of? @_run "run" "command" "commands")
value: (block_node
(block_sequence
(block_sequence_item
@@ -47,7 +46,7 @@
(#set! injection.language "bash")))))
(block_mapping_pair
key: (flow_node) @_run (#any-of? @_run "run" "script" "before_script" "after_script" "command" "commands")
key: (flow_node) @_run (#any-of? @_run "run" "command" "commands")
value: (block_node
(block_sequence
(block_sequence_item