diff options
| -rw-r--r-- | lockfile.json | 3 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 9 | ||||
| -rw-r--r-- | queries/promql/highlights.scm | 54 | ||||
| -rw-r--r-- | queries/promql/injections.scm | 1 | ||||
| -rw-r--r-- | queries/yaml/injections.scm | 26 | ||||
| -rw-r--r-- | tests/query/injections/yaml/promql-on-prometheus-rules.yaml | 12 |
6 files changed, 105 insertions, 0 deletions
diff --git a/lockfile.json b/lockfile.json index ae7d55f00..cef6a9359 100644 --- a/lockfile.json +++ b/lockfile.json @@ -395,6 +395,9 @@ "prisma": { "revision": "eca2596a355b1a9952b4f80f8f9caed300a272b5" }, + "promql": { + "revision": "655afc4fe6813f38bde087d6493d8fd4920d6d4a" + }, "proto": { "revision": "42d82fa18f8afe59b5fc0b16c207ee4f84cb185f" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index d6b3bdb7f..3f1bc98d8 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1187,6 +1187,15 @@ list.prisma = { maintainers = { "@elianiva" }, } +list.promql = { + install_info = { + url = "https://github.com/MichaHoffmann/tree-sitter-promql", + files = { "src/parser.c" }, + experimental = true, + }, + maintainers = { "@MichaHoffmann" }, +} + list.proto = { install_info = { url = "https://github.com/mitchellh/tree-sitter-proto", diff --git a/queries/promql/highlights.scm b/queries/promql/highlights.scm new file mode 100644 index 000000000..7c0d1241e --- /dev/null +++ b/queries/promql/highlights.scm @@ -0,0 +1,54 @@ +; highlights.scm + +[ + "*" + "/" + "%" + "+" + "-" + ">" + ">=" + "<" + "<=" + "=" + "=~" + "!=" + "!~" +] @operator + +[ + "and" + "unless" + "or" + "bool" +] @keyword.operator + +[ + "{" + "}" + "[" + "]" + "(" + ")" +] @punctuation.bracket + +(float_literal) @float +(string_literal) @string + +(metric_name) @type +(range_selection) @text.strong @type +(subquery_range_selection) @text.strong @type + +(label_name) @field +(label_value) @text.underline @string.regex + +(function_name) @function.call + +[ + "by" + "without" +] @function + +(comment) @comment @spell +(ERROR) @error + diff --git a/queries/promql/injections.scm b/queries/promql/injections.scm new file mode 100644 index 000000000..ffdf4f8e6 --- /dev/null +++ b/queries/promql/injections.scm @@ -0,0 +1 @@ +((label_value) @regex (#offset! @regex 0 1 0 -1)) diff --git a/queries/yaml/injections.scm b/queries/yaml/injections.scm index 40727bbd2..a81ca4d06 100644 --- a/queries/yaml/injections.scm +++ b/queries/yaml/injections.scm @@ -25,3 +25,29 @@ (block_sequence_item (block_node (block_scalar) @bash (#offset! @bash 0 1 0 0)))))) + +;; Prometheus Alertmanager ("expr") +(block_mapping_pair + key: (flow_node) @_expr (#eq? @_expr "expr") + value: (flow_node + (plain_scalar) @promql)) + +(block_mapping_pair + key: (flow_node) @_expr (#eq? @_expr "expr") + value: (block_node + (block_scalar) @promql (#offset! @promql 0 2 0 0))) + +(block_mapping_pair + key: (flow_node) @_expr (#eq? @_expr "expr") + value: (block_node + (block_sequence + (block_sequence_item + (flow_node) @promql)))) + +(block_mapping_pair + key: (flow_node) @_expr (#eq @_expr "expr") + value: (block_node + (block_sequence + (block_sequence_item + (block_node + (block_scalar) @promql (#offset! @promql 0 2 0 0)))))) diff --git a/tests/query/injections/yaml/promql-on-prometheus-rules.yaml b/tests/query/injections/yaml/promql-on-prometheus-rules.yaml new file mode 100644 index 000000000..9d3e872ce --- /dev/null +++ b/tests/query/injections/yaml/promql-on-prometheus-rules.yaml @@ -0,0 +1,12 @@ +groups: +- name: Hardware alerts + rules: + - alert: Node down + expr: up{job="node_exporter"} == 0 + # ^ promql + for: 3m + labels: + severity: warning + annotations: + title: Node {{ $labels.instance }} is down + description: Failed to scrape {{ $labels.job }} on {{ $labels.instance }} for more than 3 minutes. Node seems down. |
