mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Tempo: Support special characters in identifiers (#79565)
This commit is contained in:
parent
9fd3c9df55
commit
af8d8f29f3
@ -252,7 +252,7 @@
|
|||||||
"@grafana/flamegraph": "workspace:*",
|
"@grafana/flamegraph": "workspace:*",
|
||||||
"@grafana/google-sdk": "0.1.1",
|
"@grafana/google-sdk": "0.1.1",
|
||||||
"@grafana/lezer-logql": "0.2.2",
|
"@grafana/lezer-logql": "0.2.2",
|
||||||
"@grafana/lezer-traceql": "0.0.11",
|
"@grafana/lezer-traceql": "0.0.12",
|
||||||
"@grafana/monaco-logql": "^0.0.7",
|
"@grafana/monaco-logql": "^0.0.7",
|
||||||
"@grafana/runtime": "workspace:*",
|
"@grafana/runtime": "workspace:*",
|
||||||
"@grafana/scenes": "1.27.0",
|
"@grafana/scenes": "1.27.0",
|
||||||
|
@ -2,10 +2,10 @@ import { computeErrorMessage, getErrorNodes } from './errorHighlighting';
|
|||||||
|
|
||||||
describe('Check for syntax errors in query', () => {
|
describe('Check for syntax errors in query', () => {
|
||||||
it.each([
|
it.each([
|
||||||
['{span.http.status_code = }', 'Invalid value after comparison or aritmetic operator.'],
|
['{span.http.status_code = }', 'Invalid value after comparison or arithmetic operator.'],
|
||||||
['{span.http.status_code 200}', 'Invalid operator after field expression.'],
|
['{span.http.status_code 200}', 'Invalid comparison operator after field expression.'],
|
||||||
['{span.http.status_code ""}', 'Invalid operator after field expression.'],
|
['{span.http.status_code ""}', 'Invalid operator after field expression.'],
|
||||||
['{span.http.status_code @ 200}', 'Invalid operator after field expression.'],
|
['{span.http.status_code @ 200}', 'Invalid comparison operator after field expression.'],
|
||||||
['{span.http.status_code span.http.status_code}', 'Invalid operator after field expression.'],
|
['{span.http.status_code span.http.status_code}', 'Invalid operator after field expression.'],
|
||||||
[
|
[
|
||||||
'{span.http.status_code = 200} {span.http.status_code = 200}',
|
'{span.http.status_code = 200} {span.http.status_code = 200}',
|
||||||
@ -24,12 +24,12 @@ describe('Check for syntax errors in query', () => {
|
|||||||
'{span.http.status_code = 200} && {span.http.status_code = 200} | avg() > 3',
|
'{span.http.status_code = 200} && {span.http.status_code = 200} | avg() > 3',
|
||||||
'Invalid expression for aggregator operator.',
|
'Invalid expression for aggregator operator.',
|
||||||
],
|
],
|
||||||
['{ 1 + 1 = 2 + }', 'Invalid value after comparison or aritmetic operator.'],
|
['{ 1 + 1 = 2 + }', 'Invalid value after comparison or arithmetic operator.'],
|
||||||
['{ .a && }', 'Invalid value after logical operator.'],
|
['{ .a && }', 'Invalid value after logical operator.'],
|
||||||
['{ .a || }', 'Invalid value after logical operator.'],
|
['{ .a || }', 'Invalid value after logical operator.'],
|
||||||
['{ .a + }', 'Invalid value after comparison or aritmetic operator.'],
|
['{ .a + }', 'Invalid value after comparison or arithmetic operator.'],
|
||||||
['{ 200 = 200 200 }', 'Invalid operator after field expression.'],
|
['{ 200 = 200 200 }', 'Invalid comparison operator after field expression.'],
|
||||||
['{.foo 300}', 'Invalid operator after field expression.'],
|
['{.foo 300}', 'Invalid comparison operator after field expression.'],
|
||||||
['{.foo 300 && .bar = 200}', 'Invalid operator after field expression.'],
|
['{.foo 300 && .bar = 200}', 'Invalid operator after field expression.'],
|
||||||
['{.foo 300 && .bar 200}', 'Invalid operator after field expression.'],
|
['{.foo 300 && .bar 200}', 'Invalid operator after field expression.'],
|
||||||
['{.foo=1} {.bar=2}', 'Invalid spanset combining operator after spanset expression.'],
|
['{.foo=1} {.bar=2}', 'Invalid spanset combining operator after spanset expression.'],
|
||||||
@ -48,8 +48,8 @@ describe('Check for syntax errors in query', () => {
|
|||||||
['{.}', 'Invalid expression for spanset.'],
|
['{.}', 'Invalid expression for spanset.'],
|
||||||
['{ resource. }', 'Invalid expression for spanset.'],
|
['{ resource. }', 'Invalid expression for spanset.'],
|
||||||
['{ span. }', 'Invalid expression for spanset.'],
|
['{ span. }', 'Invalid expression for spanset.'],
|
||||||
['{.foo=}', 'Invalid value after comparison or aritmetic operator.'],
|
['{.foo=}', 'Invalid value after comparison or arithmetic operator.'],
|
||||||
['{.foo="}', 'Invalid value after comparison or aritmetic operator.'],
|
['{.foo="}', 'Invalid value after comparison or arithmetic operator.'],
|
||||||
['{.foo=300} |', 'Invalid aggregation operator after pipepile operator.'],
|
['{.foo=300} |', 'Invalid aggregation operator after pipepile operator.'],
|
||||||
['{.foo=300} && {.bar=200} |', 'Invalid aggregation operator after pipepile operator.'],
|
['{.foo=300} && {.bar=200} |', 'Invalid aggregation operator after pipepile operator.'],
|
||||||
['{.foo=300} && {.bar=300} && {.foo=300} |', 'Invalid aggregation operator after pipepile operator.'],
|
['{.foo=300} && {.bar=300} && {.foo=300} |', 'Invalid aggregation operator after pipepile operator.'],
|
||||||
|
@ -32,7 +32,7 @@ export const computeErrorMessage = (errorNode: SyntaxNode) => {
|
|||||||
case Or:
|
case Or:
|
||||||
return 'Invalid value after logical operator.';
|
return 'Invalid value after logical operator.';
|
||||||
case FieldOp:
|
case FieldOp:
|
||||||
return 'Invalid value after comparison or aritmetic operator.';
|
return 'Invalid value after comparison or arithmetic operator.';
|
||||||
default:
|
default:
|
||||||
return 'Invalid operator after field expression.';
|
return 'Invalid operator after field expression.';
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ const keywords = intrinsics.concat(scopes);
|
|||||||
|
|
||||||
const statusValues = ['ok', 'unset', 'error', 'false', 'true'];
|
const statusValues = ['ok', 'unset', 'error', 'false', 'true'];
|
||||||
|
|
||||||
export const language: languages.IMonarchLanguage = {
|
const language: languages.IMonarchLanguage = {
|
||||||
ignoreCase: false,
|
ignoreCase: false,
|
||||||
defaultToken: '',
|
defaultToken: '',
|
||||||
tokenPostfix: '.traceql',
|
tokenPostfix: '.traceql',
|
||||||
@ -88,13 +88,9 @@ export const language: languages.IMonarchLanguage = {
|
|||||||
|
|
||||||
// functions and predefined values
|
// functions and predefined values
|
||||||
[
|
[
|
||||||
// If not inside quotes, namely outside of open and closed `"`,
|
// Inside (double) quotes, all characters are allowed, with the exception of `\` and `"` that must be escaped (`\\` and `\"`).
|
||||||
// allow only word characters (those matching `\w`) and full stop (`.`).
|
// Outside quotes, some more characters are prohibited, such as `!` and `=`.
|
||||||
//
|
/(?:\w|^[^{}()=~!<>&|," ]|"(?:\\"|\\\\|[^\\"])*")+/,
|
||||||
// If inside quotes, e.g. `"here"`, allow for any character, except for `"` and `\` which must be
|
|
||||||
// escaped with a backslash (`\"` and `\\` respectively).
|
|
||||||
// Quotes can be used to support special tag names, such as those with spaces (e.g., `my tag`).
|
|
||||||
/(?:\w|[.]|"(?:\\"|\\\\|[^\\"])*")+/,
|
|
||||||
{
|
{
|
||||||
cases: {
|
cases: {
|
||||||
'@functions': 'predefined',
|
'@functions': 'predefined',
|
||||||
@ -147,6 +143,7 @@ export const language: languages.IMonarchLanguage = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// For "TraceQL" tab (Monarch editor for TraceQL)
|
||||||
export const languageDefinition = {
|
export const languageDefinition = {
|
||||||
id: 'traceql',
|
id: 'traceql',
|
||||||
extensions: ['.traceql'],
|
extensions: ['.traceql'],
|
||||||
@ -158,6 +155,7 @@ export const languageDefinition = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// For "Search" tab (query builder)
|
||||||
export const traceqlGrammar: Grammar = {
|
export const traceqlGrammar: Grammar = {
|
||||||
comment: {
|
comment: {
|
||||||
pattern: /\/\/.*/,
|
pattern: /\/\/.*/,
|
||||||
|
10
yarn.lock
10
yarn.lock
@ -3213,12 +3213,12 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@grafana/lezer-traceql@npm:0.0.11":
|
"@grafana/lezer-traceql@npm:0.0.12":
|
||||||
version: 0.0.11
|
version: 0.0.12
|
||||||
resolution: "@grafana/lezer-traceql@npm:0.0.11"
|
resolution: "@grafana/lezer-traceql@npm:0.0.12"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@lezer/lr": ^1.3.0
|
"@lezer/lr": ^1.3.0
|
||||||
checksum: cb312cf8f0cf70af6eb307aa0b6478cd8bde9233f281d6f4bb385f3c846a1e9fe0caf8addef5cbc0ccadb57b968fbd10e26ad5df6f898fb2b174536dca924926
|
checksum: 615c215a7c2a72b38138a322feed3de8ff85a5828bdd6933adcf54a41e078365d3bd7db2f046cb17ad21b77a59b100b24a8946369c7dc41c15cac1826dde845b
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -17317,7 +17317,7 @@ __metadata:
|
|||||||
"@grafana/flamegraph": "workspace:*"
|
"@grafana/flamegraph": "workspace:*"
|
||||||
"@grafana/google-sdk": "npm:0.1.1"
|
"@grafana/google-sdk": "npm:0.1.1"
|
||||||
"@grafana/lezer-logql": "npm:0.2.2"
|
"@grafana/lezer-logql": "npm:0.2.2"
|
||||||
"@grafana/lezer-traceql": "npm:0.0.11"
|
"@grafana/lezer-traceql": "npm:0.0.12"
|
||||||
"@grafana/monaco-logql": "npm:^0.0.7"
|
"@grafana/monaco-logql": "npm:^0.0.7"
|
||||||
"@grafana/runtime": "workspace:*"
|
"@grafana/runtime": "workspace:*"
|
||||||
"@grafana/scenes": "npm:1.27.0"
|
"@grafana/scenes": "npm:1.27.0"
|
||||||
|
Loading…
Reference in New Issue
Block a user