diff --git a/public/app/plugins/datasource/tempo/package.json b/public/app/plugins/datasource/tempo/package.json index b9248534a4f..409886cb0d2 100644 --- a/public/app/plugins/datasource/tempo/package.json +++ b/public/app/plugins/datasource/tempo/package.json @@ -7,7 +7,7 @@ "@emotion/css": "11.13.5", "@grafana/data": "workspace:*", "@grafana/e2e-selectors": "workspace:*", - "@grafana/lezer-traceql": "0.0.21", + "@grafana/lezer-traceql": "0.0.22", "@grafana/monaco-logql": "^0.0.8", "@grafana/o11y-ds-frontend": "workspace:*", "@grafana/plugin-ui": "0.10.5", diff --git a/public/app/plugins/datasource/tempo/traceql/autocomplete.ts b/public/app/plugins/datasource/tempo/traceql/autocomplete.ts index 1c4e13fd611..906d96416d6 100644 --- a/public/app/plugins/datasource/tempo/traceql/autocomplete.ts +++ b/public/app/plugins/datasource/tempo/traceql/autocomplete.ts @@ -128,6 +128,7 @@ export class CompletionProvider implements monacoTypes.languages.CompletionItemP detail: 'Negated regular expression', }, ]; + // https://grafana.com/docs/tempo/latest/traceql/#structural static readonly structuralOps: MinimalCompletionItem[] = [ { label: '>>', @@ -164,6 +165,78 @@ export class CompletionProvider implements monacoTypes.languages.CompletionItemP documentation: 'Sibling operator. Checks that spans matching {condA} and {condB} are siblings of the same parent span.', }, + // Union structural operators + { + label: '&>>', + insertText: '&>>', + detail: 'Union Descendant', + documentation: + 'The descendant operator (>>) looks for spans matching {condB} that are descendants of a span matching {condA}', + }, + { + label: '&>', + insertText: '&>', + detail: 'Union Child', + documentation: + 'The child operator (>) looks for spans matching {condB} that are direct child spans of a parent matching {condA}', + }, + { + label: '&<<', + insertText: '&<<', + detail: 'Union Ancestor', + documentation: + 'The ancestor operator (<<) looks for spans matching {condB} that are ancestor of a span matching {condA}', + }, + { + label: '&<', + insertText: '&<', + detail: 'Union Parent', + documentation: + 'The parent operator (<) looks for spans matching {condB} that are direct parent spans of a child matching {condA}', + }, + { + label: '&~', + insertText: '&~', + detail: 'Union Sibling', + documentation: + 'The sibling operator (~) looks at spans matching {condB} that have at least one sibling matching {condA}', + }, + // Negated structural operators + { + label: '!>>', + insertText: '!>>', + detail: 'Not Descendant', + documentation: + 'The not-descendant operator (!>>) looks for spans matching {condB} that are not descendant spans of a parent matching {condA}', + }, + { + label: '!>', + insertText: '!>', + detail: 'Not Child', + documentation: + 'The not-child operator (!>) looks for spans matching {condB} that are not direct child spans of a parent matching {condA}', + }, + { + label: '!<<', + insertText: '!<<', + detail: 'Not Ancestor', + documentation: + 'The not-ancestor operator (!<<) looks for spans matching {condB} that are not ancestor spans of a child matching {condA}', + }, + { + label: '!<', + insertText: '!<', + detail: 'Not Parent', + documentation: + 'The not-parent operator (!<) looks for spans matching {condB} that are not direct parent spans of a child matching {condA}', + }, + { + label: '!~', + insertText: '!~', + detail: 'Not Sibling', + documentation: + 'The not-sibling operator (!~) looks for spans matching {condB} that do not have at least one sibling matching {condA}', + }, ]; static readonly spansetOps: MinimalCompletionItem[] = [ diff --git a/yarn.lock b/yarn.lock index bab3b3d8e73..c2d92d559fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2823,7 +2823,7 @@ __metadata: "@emotion/css": "npm:11.13.5" "@grafana/data": "workspace:*" "@grafana/e2e-selectors": "workspace:*" - "@grafana/lezer-traceql": "npm:0.0.21" + "@grafana/lezer-traceql": "npm:0.0.22" "@grafana/monaco-logql": "npm:^0.0.8" "@grafana/o11y-ds-frontend": "workspace:*" "@grafana/plugin-configs": "npm:12.1.0-pre" @@ -3178,12 +3178,12 @@ __metadata: languageName: node linkType: hard -"@grafana/lezer-traceql@npm:0.0.21": - version: 0.0.21 - resolution: "@grafana/lezer-traceql@npm:0.0.21" +"@grafana/lezer-traceql@npm:0.0.22": + version: 0.0.22 + resolution: "@grafana/lezer-traceql@npm:0.0.22" peerDependencies: "@lezer/lr": ^1.4.2 - checksum: 10/de27346b3f7e45cc10fae18e7172c7686a10d6979b057a33e72f3d4aeca498b7c5ba80202f1e59207f417b69c3f1703bef313dbde155b7a6ee211726d665f085 + checksum: 10/e7f640e902d0738c72950a7584b5ceed68114582eb9c33546bf3fbc938baf7a460b93cd9b90e65a0d8f16a3870ecc282c6ecc12a6c321232247abc05111662df languageName: node linkType: hard