diff options
| author | Daniil Leontev <d@leontiev.xyz> | 2025-02-20 12:17:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-20 12:17:32 +0100 |
| commit | d2ff4006418750aa8b91f280e66bdb623c891c95 (patch) | |
| tree | f0d35114dc734f35e6fa47fd7d231a76f55100cf /queries/promql | |
| parent | bot(lockfile): update pascal, v (diff) | |
| download | nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar.gz nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar.bz2 nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar.lz nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar.xz nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.tar.zst nvim-treesitter-d2ff4006418750aa8b91f280e66bdb623c891c95.zip | |
feat(promql): do not use regex for string labels (#7669)
In Prometheus, label values are treated as strings when used with the
`=` and `!=` operators, and as regular expressions when used with the
`=~` and `!~` operators.
Injecting and then highlighting all label values as regex leads to a
situation where entirely valid **string** label values containing regex
special characters are mistakenly parsed and highlighted as regex. This
results in syntax errors, causing labels to be highlighted incorrectly.
For example, in `foo{bar=~"[a-z]{1,3}"}`, `{` and `}` are regex special
characters, so regex highlighting is expected. However, in
`foo{path="/foo/{id}"}`, `{` and `}` are just part of the string and
have no special meaning, so the whole value should be highlighted as a
string.
Diffstat (limited to 'queries/promql')
| -rw-r--r-- | queries/promql/highlights.scm | 14 | ||||
| -rw-r--r-- | queries/promql/injections.scm | 7 |
2 files changed, 19 insertions, 2 deletions
diff --git a/queries/promql/highlights.scm b/queries/promql/highlights.scm index 0f58f1578..a99fcdd05 100644 --- a/queries/promql/highlights.scm +++ b/queries/promql/highlights.scm @@ -36,7 +36,19 @@ (label_name) @variable.member -(label_value) @string.regexp +((label_name) + [ + "=~" + "!~" + ] + (label_value) @string.regexp) + +((label_name) + [ + "=" + "!=" + ] + (label_value) @string) (function_name) @function.call diff --git a/queries/promql/injections.scm b/queries/promql/injections.scm index 4e7c1b261..791aba3d8 100644 --- a/queries/promql/injections.scm +++ b/queries/promql/injections.scm @@ -1,6 +1,11 @@ ((comment) @injection.content (#set! injection.language "comment")) -((label_value) @injection.content +((label_name) + [ + "=~" + "!~" + ] + (label_value) @injection.content (#set! injection.language "regex") (#offset! @injection.content 0 1 0 -1)) |
