@gooddata/sdk-maql-language-server 11.65.0-alpha.8 → 11.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/completions/complete.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,cAAc,EAEd,cAAc,EAIjB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,sBAAsB,CAAC;AAiB9B,wBAAsB,OAAO,CACzB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAC1D,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAqB,EAC7B,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,cAAc,CAAC,CA8CzB"}
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/completions/complete.ts"],"names":[],"mappings":"AASA,OAAO,EACH,cAAc,EAEd,cAAc,EAIjB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAClB,MAAM,sBAAsB,CAAC;AAoB9B,wBAAsB,OAAO,CACzB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAC1D,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAqB,EAC7B,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,cAAc,CAAC,CA8CzB"}
@@ -1,8 +1,8 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import { CodeCompletionCore } from "antlr4-c3";
2
+ import { CodeCompletionCore, } from "antlr4-c3";
3
+ import { Vocabulary } from "antlr4ng";
3
4
  import { CompletionItem, CompletionItemKind, CompletionList, MarkupKind, Range, TextEdit, } from "vscode-languageserver";
4
- import MaqlPkg from "@gooddata/maql-antlr4ts";
5
- const { MaqlLexer, MaqlParser, escapeString } = MaqlPkg;
5
+ import { MaqlLexer, MaqlParser, escapeString } from "@gooddata/maql-antlr4ts";
6
6
  import { findLabelContext } from "../labelElements.js";
7
7
  import { toMaqlObjectType } from "../maqlObjectTypes.js";
8
8
  import { parameterDefaultLabel, parameterTypeLabel } from "../metadata/parameters.js";
@@ -13,6 +13,8 @@ import { descriptions, ignoredTokens, } from "./descriptions.js";
13
13
  import { findContext, isFinal } from "./findContext.js";
14
14
  import { adjustSortText } from "./sort.js";
15
15
  const [tokenCompletions, ruleCompletions] = getTokenAndRuleCompletions(descriptions);
16
+ // antlr4ng exposes the vocabulary only on parser instances, so build one from the static name tables
17
+ const vocabulary = new Vocabulary(MaqlParser.literalNames, MaqlParser.symbolicNames);
16
18
  export async function resolve(item, docs) {
17
19
  const data = item.data;
18
20
  const doc = data?.resolveTag ? await docs(data.resolveTag) : undefined;
@@ -95,11 +97,11 @@ function completeFromCandidateTokens(tokens, range, allowedTypes) {
95
97
  return CompletionList.create(items, false);
96
98
  }
97
99
  function getTokenName(tokenId) {
98
- const literalName = MaqlParser.VOCABULARY.getLiteralName(tokenId);
99
- if (literalName !== undefined) {
100
+ const literalName = vocabulary.getLiteralName(tokenId);
101
+ if (literalName !== null) {
100
102
  return literalName.slice(1, literalName.length - 1).toUpperCase();
101
103
  }
102
- return MaqlParser.VOCABULARY.getDisplayName(tokenId);
104
+ return vocabulary.getDisplayName(tokenId) ?? String(tokenId);
103
105
  }
104
106
  /**
105
107
  * Rule completions are necessary when the tokens to be completed are ambiguous
@@ -239,18 +241,16 @@ function createMetadataCompletionItem(metadataObject, range) {
239
241
  */
240
242
  function tokenToString(token, offset) {
241
243
  if (token.type === MaqlParser.UnterminatedString) {
242
- return token.text
243
- ?.slice(1, Math.min(token.text.length, offset - token.startIndex))
244
- .replace(/\\"/g, '"');
244
+ return token.text?.slice(1, Math.min(token.text.length, offset - token.start)).replace(/\\"/g, '"');
245
245
  }
246
246
  else if (token.type === MaqlParser.String) {
247
247
  return token.text
248
- ?.slice(1, Math.min(token.text.length - 1, offset - token.startIndex))
248
+ ?.slice(1, Math.min(token.text.length - 1, offset - token.start))
249
249
  .replace(/\\"/g, '"');
250
250
  // oxlint-disable-next-line eslint/no-negated-condition
251
251
  }
252
252
  else if (!isFinal(token)) {
253
- return token.text?.slice(0, Math.min(token.text.length, offset - token.startIndex));
253
+ return token.text?.slice(0, Math.min(token.text.length, offset - token.start));
254
254
  }
255
255
  else {
256
256
  return undefined; // final tokens must not be used - their text value is not useful
@@ -1 +1 @@
1
- {"version":3,"file":"descriptions.d.ts","sourceRoot":"","sources":["../../src/completions/descriptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAwC,MAAM,uBAAuB,CAAC;AAMlG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD;;GAEG;AACH,eAAO,MAAM,IAAI;IACb,SAAS;IACT,KAAK;IACL,MAAM;IACN,SAAS;IACT,IAAI;IACJ,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,OAAO;CACV,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,aAmDxB,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,qBAAqB,EAqO/C,CAAC"}
1
+ {"version":3,"file":"descriptions.d.ts","sourceRoot":"","sources":["../../src/completions/descriptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAwC,MAAM,uBAAuB,CAAC;AAKlG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD;;GAEG;AACH,eAAO,MAAM,IAAI;IACb,SAAS;IACT,KAAK;IACL,MAAM;IACN,SAAS;IACT,IAAI;IACJ,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,OAAO;CACV,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,aAmDxB,CAAC;AAEH,eAAO,MAAM,YAAY,EAAE,qBAAqB,EAqO/C,CAAC"}
@@ -1,7 +1,6 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
2
  import { CompletionItemKind, InsertTextFormat } from "vscode-languageserver";
3
- import MaqlPkg from "@gooddata/maql-antlr4ts";
4
- const { MaqlParser } = MaqlPkg;
3
+ import { MaqlParser } from "@gooddata/maql-antlr4ts";
5
4
  import { errorTokens } from "../diagnostics.js";
6
5
  import { getTokenIdFromName } from "../parseMaql.js";
7
6
  import { MaqlType } from "../types/hierarchy.js";
@@ -1,4 +1,4 @@
1
- import { type Token } from "antlr4ts";
1
+ import { type Token } from "antlr4ng";
2
2
  import { type AstNode, type IPosition } from "@gooddata/maql-antlr4ts";
3
3
  import { type MaqlMetric } from "../parseMaql.js";
4
4
  import { MaqlType } from "../types/hierarchy.js";
@@ -1 +1 @@
1
- {"version":3,"file":"findContext.d.ts","sourceRoot":"","sources":["../../src/completions/findContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAoB,MAAM,UAAU,CAAC;AAExD,OAAgB,EACZ,KAAK,OAAO,EAEZ,KAAK,SAAS,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AAOrE,MAAM,WAAW,aAAa;IAC1B,qFAAqF;IACrF,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,0EAA0E;IAC1E,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,kDAAkD;IAClD,MAAM,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC;QAAC,cAAc,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,KAAK,CAAA;KAAE,CAAC;CAChF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAiBvG;AAkKD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE7C"}
1
+ {"version":3,"file":"findContext.d.ts","sourceRoot":"","sources":["../../src/completions/findContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAoB,MAAM,UAAU,CAAC;AAExD,OAAO,EAEH,KAAK,OAAO,EAEZ,KAAK,SAAS,EAIjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AAOrE,MAAM,WAAW,aAAa;IAC1B,qFAAqF;IACrF,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,0EAA0E;IAC1E,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,kDAAkD;IAClD,MAAM,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC;QAAC,cAAc,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,KAAK,CAAA;KAAE,CAAC;CAChF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAiBvG;AAkKD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE7C"}
@@ -1,6 +1,5 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
- import MaqlPkg from "@gooddata/maql-antlr4ts";
3
- const { AbstractAstVisitor, MaqlParser, positionInRange } = MaqlPkg;
2
+ import { AbstractAstVisitor, MaqlParser, positionInRange, } from "@gooddata/maql-antlr4ts";
4
3
  import { MaqlType, abstractValueTypes } from "../types/hierarchy.js";
5
4
  import { findFunctionDefinitions, } from "../types/signatures.js";
6
5
  export function findContext(metric, caretPosition, offset) {
@@ -125,10 +124,10 @@ function findCaretToken(tokenStream, offset) {
125
124
  // first find the caret token
126
125
  for (let tokenIndex = 0; tokenIndex < tokenStream.size; tokenIndex++) {
127
126
  const nextToken = tokenStream.get(tokenIndex);
128
- if (nextToken.startIndex < offset || (nextToken.startIndex === offset && isFinal(caretToken))) {
127
+ if (nextToken.start < offset || (nextToken.start === offset && isFinal(caretToken))) {
129
128
  caretToken = nextToken;
130
129
  }
131
- if (nextToken.startIndex >= offset)
130
+ if (nextToken.start >= offset)
132
131
  break;
133
132
  }
134
133
  for (let tokenIndex = caretToken.tokenIndex; tokenIndex < tokenStream.size; tokenIndex++) {
@@ -1 +1 @@
1
- {"version":3,"file":"functionDescriptions.d.ts","sourceRoot":"","sources":["../../src/completions/functionDescriptions.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AA4E/D,eAAO,MAAM,oBAAoB,EAAE,qBAAqB,EAuBvD,CAAC"}
1
+ {"version":3,"file":"functionDescriptions.d.ts","sourceRoot":"","sources":["../../src/completions/functionDescriptions.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AA4E/D,eAAO,MAAM,oBAAoB,EAAE,qBAAqB,EAuBvD,CAAC"}
@@ -1,7 +1,6 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
2
  import { CompletionItemKind, InsertTextFormat } from "vscode-languageserver";
3
- import MaqlPkg from "@gooddata/maql-antlr4ts";
4
- const { MaqlParser, functionDefinitions } = MaqlPkg;
3
+ import { MaqlParser, functionDefinitions, } from "@gooddata/maql-antlr4ts";
5
4
  import { getTokenIdFromName } from "../parseMaql.js";
6
5
  import { transformFunctionDefinition } from "../types/signatures.js";
7
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAA6B,MAAM,uBAAuB,CAAC;AAY9E,OAAO,EAAE,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAI/D,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAGlB,MAAM,qBAAqB,CAAC;AAO7B,UAAU,iBAAiB;IACvB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEpC,IAAI,EAAE,UAAU,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,gCAgDjC,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,MAAM,EAA8C,CAAC;AAE/E,wBAAsB,QAAQ,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBvB"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAA6B,MAAM,uBAAuB,CAAC;AAc9E,OAAO,EAAE,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAI/D,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAGlB,MAAM,qBAAqB,CAAC;AAO7B,UAAU,iBAAiB;IACvB,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEpC,IAAI,EAAE,UAAU,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,gCAgDjC,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,MAAM,EAA8C,CAAC;AAE/E,wBAAsB,QAAQ,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBvB"}
@@ -1,9 +1,8 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import { DefaultErrorStrategy, FailedPredicateException, InputMismatchException, NoViableAltException, } from "antlr4ts";
2
+ import { DefaultErrorStrategy, FailedPredicateException, InputMismatchException, NoViableAltException, } from "antlr4ng";
3
3
  import { groupBy } from "lodash-es";
4
4
  import { Diagnostic, DiagnosticSeverity, Range } from "vscode-languageserver";
5
- import MaqlPkg from "@gooddata/maql-antlr4ts";
6
- const { AbstractAstVisitor, MaqlLexer, SyntaxErrorListener } = MaqlPkg;
5
+ import { AbstractAstVisitor, MaqlLexer, SyntaxErrorListener, } from "@gooddata/maql-antlr4ts";
7
6
  import { isUnexpectedResponseError } from "@gooddata/sdk-backend-spi";
8
7
  import { areObjRefsEqual, serializeObjRef } from "@gooddata/sdk-model";
9
8
  import { ErrorCodes, diagnosticsSource } from "./constants.js";
@@ -1 +1 @@
1
- {"version":3,"file":"findObjects.d.ts","sourceRoot":"","sources":["../src/findObjects.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,EAAE,CAIlE"}
1
+ {"version":3,"file":"findObjects.d.ts","sourceRoot":"","sources":["../src/findObjects.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,EAAE,CAIlE"}
@@ -1,7 +1,6 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import { ParseTreeWalker } from "antlr4ts/tree/index.js";
3
- import MaqlPkg from "@gooddata/maql-antlr4ts";
4
- const { AttributeTypeContext, MaqlParser, NumericTypeContext } = MaqlPkg;
2
+ import { ParseTreeWalker } from "antlr4ng";
3
+ import { AttributeTypeContext, MaqlParser, MaqlParserListener, NumericTypeContext, } from "@gooddata/maql-antlr4ts";
5
4
  import { isTigerType, tigerIdTypeToObjectType } from "@gooddata/sdk-backend-tiger";
6
5
  import { normalizeMaqlObjectType } from "./maqlObjectTypes.js";
7
6
  import { MaqlMetric } from "./parseMaql.js";
@@ -12,61 +11,63 @@ export function findAllObjects(metric) {
12
11
  return finder.objects;
13
12
  }
14
13
  // TODO rewrite using AbstractAstVisitor
15
- class ObjectFinder {
14
+ class ObjectFinder extends MaqlParserListener {
16
15
  objects;
17
- visitTerminal; // to satisfy TS2559 - weak type detection
18
16
  constructor(objects = []) {
17
+ super();
19
18
  this.objects = objects;
20
19
  }
21
20
  pushObject(ctx, type) {
22
- const lbrace = ctx.tryGetToken(MaqlParser.LBRACE, 0);
23
- const sep = ctx.tryGetToken(MaqlParser.SEP, 0);
24
- const id = ctx.tryGetToken(MaqlParser.ID, 0);
25
- const rbrace = ctx.tryGetToken(MaqlParser.RBRACE, 0);
21
+ const lbrace = ctx.getToken(MaqlParser.LBRACE, 0);
22
+ const sep = ctx.getToken(MaqlParser.SEP, 0);
23
+ const id = ctx.getToken(MaqlParser.ID, 0);
24
+ const rbrace = ctx.getToken(MaqlParser.RBRACE, 0);
25
+ const start = ctx.start;
26
26
  // check that the object is complete
27
- if (lbrace === undefined ||
27
+ if (lbrace === null ||
28
28
  lbrace.symbol.tokenIndex === -1 ||
29
- sep === undefined ||
29
+ sep === null ||
30
30
  sep.symbol.tokenIndex === -1 ||
31
- id === undefined ||
31
+ id === null ||
32
32
  id.symbol.tokenIndex === -1 ||
33
- rbrace === undefined ||
33
+ rbrace === null ||
34
34
  rbrace.symbol.tokenIndex === -1 ||
35
- type === undefined) {
35
+ type === undefined ||
36
+ start === null) {
36
37
  return;
37
38
  }
38
- const range = antlrContextRange(ctx.start, ctx.stop);
39
+ const range = antlrContextRange(start, ctx.stop);
39
40
  // `actualType` keeps the MAQL spelling so diagnostics quote what the author wrote.
40
41
  //NOTE: The lexer accepts any casing, so fold it before the type is looked up.
41
42
  const tigerType = normalizeMaqlObjectType(type.toLowerCase());
42
43
  this.objects.push({
43
44
  tigerType: isTigerType(tigerType) ? tigerType : undefined,
44
45
  actualType: type,
45
- id: ctx.ID().text,
46
+ id: id.getText(),
46
47
  ref: {
47
48
  type: tigerIdTypeToObjectType[tigerType],
48
- identifier: ctx.ID().text,
49
+ identifier: id.getText(),
49
50
  },
50
51
  range: range,
51
52
  offsets: {
52
- start: MaqlMetric.rawOffset(ctx.start.startIndex),
53
- end: MaqlMetric.rawOffset((ctx.stop?.stopIndex ?? ctx.start.stopIndex) + 1),
53
+ start: MaqlMetric.rawOffset(start.start),
54
+ end: MaqlMetric.rawOffset((ctx.stop?.stop ?? start.stop) + 1),
54
55
  },
55
56
  });
56
57
  }
57
- exitAttribute(ctx) {
58
- this.pushObject(ctx, ctx.tryGetRuleContext(0, AttributeTypeContext)?.text);
59
- }
60
- exitNumeric(ctx) {
61
- this.pushObject(ctx, ctx.tryGetRuleContext(0, NumericTypeContext)?.text);
62
- }
63
- exitFact(ctx) {
64
- this.pushObject(ctx, ctx.tryGetToken(MaqlParser.FACT, 0)?.text);
65
- }
66
- exitPrompt(ctx) {
67
- this.pushObject(ctx, ctx.tryGetToken(MaqlParser.PROMPT, 0)?.text);
68
- }
69
- exitParameter(ctx) {
70
- this.pushObject(ctx, ctx.tryGetToken(MaqlParser.PARAMETER, 0)?.text);
71
- }
58
+ exitAttribute = (ctx) => {
59
+ this.pushObject(ctx, ctx.getRuleContext(0, AttributeTypeContext)?.getText());
60
+ };
61
+ exitNumeric = (ctx) => {
62
+ this.pushObject(ctx, ctx.getRuleContext(0, NumericTypeContext)?.getText());
63
+ };
64
+ exitFact = (ctx) => {
65
+ this.pushObject(ctx, ctx.getToken(MaqlParser.FACT, 0)?.getText());
66
+ };
67
+ exitPrompt = (ctx) => {
68
+ this.pushObject(ctx, ctx.getToken(MaqlParser.PROMPT, 0)?.getText());
69
+ };
70
+ exitParameter = (ctx) => {
71
+ this.pushObject(ctx, ctx.getToken(MaqlParser.PARAMETER, 0)?.getText());
72
+ };
72
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,iBAAiB,EAAiB,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQpG,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAI5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAI/F"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,iBAAiB,EAAiB,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA6CpG,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAI5E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,GAAG,QAAQ,EAAE,CAI/F"}
package/esm/format.js CHANGED
@@ -1,7 +1,6 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
- import { AbstractParseTreeVisitor, } from "antlr4ts/tree/index.js";
3
2
  import { TextEdit } from "vscode-languageserver";
4
- import Maql from "@gooddata/maql-antlr4ts";
3
+ import { ExpressionListContext, MaqlExpressionContext, MaqlParser, MaqlParserVisitor, } from "@gooddata/maql-antlr4ts";
5
4
  import { TokenTypes, tokenTypeMap } from "./highlight/semanticsHighlight.js";
6
5
  import { MaqlMetric } from "./parseMaql.js";
7
6
  import { antlrContextRange, tokenRange } from "./tokenRanges.js";
@@ -35,11 +34,12 @@ export function formatRange(query, range, options) {
35
34
  * using the same token, the first rule triggered has precedence.
36
35
  * Most important are the whitespace (WS) tokens, which are strings of whitespace characters - spaces, new lines, tabs etc.
37
36
  */
38
- class MaqlFormatter extends AbstractParseTreeVisitor {
37
+ class MaqlFormatter extends MaqlParserVisitor {
39
38
  options;
40
39
  indentationLevel = 0;
41
40
  formattedTokens;
42
41
  stream;
42
+ range;
43
43
  get indentSpaces() {
44
44
  return " ".repeat(this.indentationLevel * this.options.tabSize);
45
45
  }
@@ -48,10 +48,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
48
48
  this.options = options;
49
49
  this.formattedTokens = new Set();
50
50
  this.stream = metric.tokenStream;
51
- if (range) {
52
- // if a range is specified do not enter contexts where the intersection with the context range is empty
53
- this.visit = (tree) => this.visitInRange(tree, range);
54
- }
51
+ this.range = range;
55
52
  }
56
53
  defaultResult() {
57
54
  return [];
@@ -59,14 +56,22 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
59
56
  aggregateResult(aggregate, nextResult) {
60
57
  return aggregate.concat(nextResult);
61
58
  }
59
+ visit(tree) {
60
+ // if a range is specified do not enter contexts where the intersection with the context range is empty
61
+ if (this.range) {
62
+ return this.visitInRange(tree, this.range);
63
+ }
64
+ return super.visit(tree) ?? this.defaultResult();
65
+ }
62
66
  visitInRange(tree, range) {
63
- const treeRange = antlrContextRange(this.stream.get(tree.sourceInterval.a), this.stream.get(tree.sourceInterval.b)).toRange();
67
+ const interval = tree.getSourceInterval();
68
+ const treeRange = antlrContextRange(this.stream.get(interval.start), this.stream.get(interval.stop)).toRange();
64
69
  if (!this.intersects(treeRange, range)) {
65
70
  return this.defaultResult();
66
71
  }
67
- return super.visit(tree).filter((edit) => this.intersects(edit.range, range));
72
+ return (super.visit(tree) ?? []).filter((edit) => this.intersects(edit.range, range));
68
73
  }
69
- visitChildren(node, firstChild = 0, lastChild = node.childCount - 1) {
74
+ visitChildren(node, firstChild = 0, lastChild = node.getChildCount() - 1) {
70
75
  let result = this.defaultResult();
71
76
  for (let i = firstChild; i <= lastChild; i++) {
72
77
  if (!this.shouldVisitNextChild(node, result)) {
@@ -129,8 +134,8 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
129
134
  edits.push(...this.visitChildren(ctx));
130
135
  return edits;
131
136
  }
132
- visitFunctionCall = this.visitFunctionCallCommon;
133
- visitFunctionCallRun(ctx) {
137
+ visitFunctionCall = (ctx) => this.visitFunctionCallCommon(ctx);
138
+ visitFunctionCallRun = (ctx) => {
134
139
  const edits = [];
135
140
  edits.push(...this.visitFunctionCallCommon(ctx));
136
141
  const withinCtx = ctx.within();
@@ -142,8 +147,8 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
142
147
  edits.push(...this.visitFunctionCallClause(rollWindowCtx));
143
148
  }
144
149
  return edits;
145
- }
146
- visitFunctionCallRank(ctx) {
150
+ };
151
+ visitFunctionCallRank = (ctx) => {
147
152
  const edits = [];
148
153
  edits.push(...this.visitFunctionCallCommon(ctx));
149
154
  const rankDirCtx = ctx.rankDir();
@@ -155,8 +160,8 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
155
160
  edits.push(...this.visitFunctionCallClause(withinCtx));
156
161
  }
157
162
  return edits;
158
- }
159
- visitFunctionCallLastFirstValue(ctx) {
163
+ };
164
+ visitFunctionCallLastFirstValue = (ctx) => {
160
165
  const edits = [];
161
166
  edits.push(...this.visitFunctionCallCommon(ctx));
162
167
  const orderByCtx = ctx.orderby();
@@ -168,20 +173,26 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
168
173
  edits.push(...this.visitFunctionCallClause(withinCtx));
169
174
  }
170
175
  return edits;
171
- }
176
+ };
172
177
  /**
173
178
  * Ensure new line before function modifying clauses e.g. WITHIN
174
179
  */
175
180
  visitFunctionCallClause(ctx) {
176
181
  const edits = [];
177
- edits.push(...this.ensureNewline(this.getHiddenToLeft(ctx.start), tokenRange(ctx.start).start));
182
+ const start = ctx.start;
183
+ if (start) {
184
+ edits.push(...this.ensureNewline(this.getHiddenToLeft(start), tokenRange(start).start));
185
+ }
178
186
  edits.push(...this.visit(ctx));
179
187
  return edits;
180
188
  }
181
189
  visitFunctionCallCommon(ctx) {
182
190
  const edits = [];
183
- edits.push(...this.visit(ctx.getChild(0)));
184
- const lparen = ctx.tryGetToken(Maql.MaqlParser.LPAREN, 0)?.symbol;
191
+ const name = ctx.getChild(0);
192
+ if (name) {
193
+ edits.push(...this.visit(name));
194
+ }
195
+ const lparen = ctx.getToken(MaqlParser.LPAREN, 0)?.symbol;
185
196
  if (lparen) {
186
197
  edits.push(...this.removeWhitespace(this.getHiddenToLeft(lparen)));
187
198
  }
@@ -189,12 +200,11 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
189
200
  edits.push(...this.ensureWhitespace(this.getHiddenToRight(lparen), "", undefined, tokenRange(lparen).end));
190
201
  }
191
202
  this.indent();
192
- const argsCtx = ctx.tryGetRuleContext(0, Maql.ExpressionListContext) ??
193
- ctx.tryGetRuleContext(0, Maql.MaqlExpressionContext);
203
+ const argsCtx = ctx.getRuleContext(0, ExpressionListContext) ?? ctx.getRuleContext(0, MaqlExpressionContext);
194
204
  if (argsCtx) {
195
205
  edits.push(...this.visit(argsCtx));
196
206
  }
197
- const rparen = ctx.tryGetToken(Maql.MaqlParser.RPAREN, 0)?.symbol;
207
+ const rparen = ctx.getToken(MaqlParser.RPAREN, 0)?.symbol;
198
208
  if (rparen) {
199
209
  edits.push(...this.removeWhitespace(this.getHiddenToLeft(rparen)));
200
210
  }
@@ -204,9 +214,12 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
204
214
  }
205
215
  return edits;
206
216
  }
207
- visitTimeMacro(ctx) {
217
+ visitTimeMacro = (ctx) => {
208
218
  const edits = [];
209
- edits.push(...this.visit(ctx.getChild(0)));
219
+ const name = ctx.getChild(0);
220
+ if (name) {
221
+ edits.push(...this.visit(name));
222
+ }
210
223
  const lparen = ctx.LPAREN().symbol;
211
224
  edits.push(...this.removeWhitespace(this.getHiddenToLeft(lparen)));
212
225
  edits.push(...this.ensureWhitespace(this.getHiddenToRight(lparen), "", undefined, tokenRange(lparen).end));
@@ -227,27 +240,19 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
227
240
  edits.push(...this.visit(amountCtx));
228
241
  }
229
242
  return edits;
230
- }
231
- visitExpressionList(ctx) {
243
+ };
244
+ visitExpressionList = (ctx) => {
232
245
  const edits = [];
233
- const commaContext = ctx.COMMA();
234
- const commas = (Array.isArray(commaContext) ? commaContext : [commaContext])
235
- .map((c) => c?.symbol)
236
- .filter((c) => c !== undefined);
237
- for (const comma of commas) {
246
+ for (const comma of ctx.COMMA().map((c) => c.symbol)) {
238
247
  edits.push(...this.removeWhitespace(this.getHiddenToLeft(comma)));
239
248
  const commaRange = tokenRange(comma);
240
249
  edits.push(...this.ensureSpace(this.getHiddenToRight(comma), commaRange.end));
241
250
  }
242
251
  edits.push(...this.visitChildren(ctx));
243
252
  return edits;
244
- }
245
- visitDisjunction(ctx) {
246
- return this.visitLogicalOperatorExpression(ctx, () => ctx.OR());
247
- }
248
- visitConjunction(ctx) {
249
- return this.visitLogicalOperatorExpression(ctx, () => ctx.AND());
250
- }
253
+ };
254
+ visitDisjunction = (ctx) => this.visitLogicalOperatorExpression(ctx, () => ctx.OR());
255
+ visitConjunction = (ctx) => this.visitLogicalOperatorExpression(ctx, () => ctx.AND());
251
256
  visitLogicalOperatorExpression(ctx, ops) {
252
257
  const edits = [];
253
258
  for (const opNode of ops()) {
@@ -259,18 +264,14 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
259
264
  edits.push(...this.visitChildren(ctx));
260
265
  return edits;
261
266
  }
262
- visitAddition(ctx) {
263
- return this.visitArithmeticOperatorExpression(ctx, () => ctx
264
- .additiveOperator()
265
- .map((it) => it.PLUS() ?? it.MINUS())
266
- .filter((it) => !!it));
267
- }
268
- visitMultiplication(ctx) {
269
- return this.visitArithmeticOperatorExpression(ctx, () => ctx
270
- .multiplicativeOperator()
271
- .map((it) => it.MUL() ?? it.DIV())
272
- .filter((it) => !!it));
273
- }
267
+ visitAddition = (ctx) => this.visitArithmeticOperatorExpression(ctx, () => ctx
268
+ .additiveOperator()
269
+ .map((it) => it.PLUS() ?? it.MINUS())
270
+ .filter((it) => !!it));
271
+ visitMultiplication = (ctx) => this.visitArithmeticOperatorExpression(ctx, () => ctx
272
+ .multiplicativeOperator()
273
+ .map((it) => it.MUL() ?? it.DIV())
274
+ .filter((it) => !!it));
274
275
  visitArithmeticOperatorExpression(ctx, ops) {
275
276
  const edits = [];
276
277
  for (const opNode of ops()) {
@@ -282,7 +283,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
282
283
  edits.push(...this.visitChildren(ctx));
283
284
  return edits;
284
285
  }
285
- visitRelationRelop(ctx) {
286
+ visitRelationRelop = (ctx) => {
286
287
  const edits = [];
287
288
  const relop = ctx.RELOP().symbol;
288
289
  const relopRange = tokenRange(relop);
@@ -290,19 +291,19 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
290
291
  edits.push(...this.ensureSpace(this.getHiddenToRight(relop), relopRange.end));
291
292
  edits.push(...this.visitChildren(ctx));
292
293
  return edits;
293
- }
294
- visitRelationLike(ctx) {
294
+ };
295
+ visitRelationLike = (ctx) => {
295
296
  const edits = [];
296
297
  const likeCtx = ctx.like();
297
- const item = likeCtx.LIKE() || likeCtx.ILIKE();
298
+ const item = likeCtx.LIKE() ?? likeCtx.ILIKE();
298
299
  const like = item.symbol;
299
300
  const likeRange = tokenRange(like);
300
301
  edits.push(...this.ensureSpace(this.getHiddenToLeft(like), likeRange.start));
301
302
  edits.push(...this.ensureSpace(this.getHiddenToRight(like), likeRange.end));
302
303
  edits.push(...this.visit(likeCtx));
303
304
  return edits;
304
- }
305
- visitRelationBetween(ctx) {
305
+ };
306
+ visitRelationBetween = (ctx) => {
306
307
  const edits = [];
307
308
  const between = ctx.BETWEEN().symbol;
308
309
  const betweenRange = tokenRange(between);
@@ -314,8 +315,8 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
314
315
  edits.push(...this.ensureSpace(this.getHiddenToRight(and), andRange.end));
315
316
  edits.push(...this.visitChildren(ctx));
316
317
  return edits;
317
- }
318
- visitRelationNot(ctx) {
318
+ };
319
+ visitRelationNot = (ctx) => {
319
320
  const not = ctx.NOT();
320
321
  const edits = [];
321
322
  if (not) {
@@ -327,8 +328,8 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
327
328
  }
328
329
  edits.push(...this.visit(ctx.relationNegatable()));
329
330
  return edits;
330
- }
331
- visitRelationIn(ctx) {
331
+ };
332
+ visitRelationIn = (ctx) => {
332
333
  const edits = [];
333
334
  const int = ctx.IN().symbol;
334
335
  const range = tokenRange(int);
@@ -337,19 +338,19 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
337
338
  edits.push(...this.visit(ctx.IN()));
338
339
  const lparen = ctx.LPAREN().symbol;
339
340
  const lparenRange = tokenRange(lparen);
340
- if (ctx.listLiteral() === undefined) {
341
+ if (ctx.listLiteral() === null) {
341
342
  edits.push(...this.removeWhitespace(this.getHiddenToLeft(ctx.RPAREN().symbol)));
342
343
  }
343
344
  else {
344
345
  this.indent();
345
346
  edits.push(...this.ensureNewline(this.getHiddenToRight(lparen), lparenRange.end));
346
- edits.push(...this.visitChildren(ctx, 1, ctx.childCount - 2));
347
+ edits.push(...this.visitChildren(ctx, 1, ctx.getChildCount() - 2));
347
348
  this.dedent();
348
349
  }
349
350
  edits.push(...this.visit(ctx.RPAREN()));
350
351
  return edits;
351
- }
352
- visitSelectExpression(ctx) {
352
+ };
353
+ visitSelectExpression = (ctx) => {
353
354
  const edits = [];
354
355
  const select = ctx.SELECT().symbol;
355
356
  const selectRange = tokenRange(select);
@@ -360,11 +361,9 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
360
361
  edits.push(...this.visitChildren(ctx, 1));
361
362
  this.dedent();
362
363
  return edits;
363
- }
364
- visitBy(ctx) {
365
- return this.visitKeywordOfStatement(ctx, () => ctx.BY());
366
- }
367
- visitForEach(ctx) {
364
+ };
365
+ visitBy = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.BY());
366
+ visitForEach = (ctx) => {
368
367
  const edits = [];
369
368
  const forEach = ctx.FOR().symbol;
370
369
  const forEachRange = tokenRange(forEach);
@@ -373,25 +372,13 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
373
372
  edits.push(...this.visitChildren(ctx, 1));
374
373
  this.dedent();
375
374
  return edits;
376
- }
377
- visitForTransformation(ctx) {
378
- return this.visitKeywordOfStatement(ctx, () => ctx.FOR());
379
- }
380
- visitWhere(ctx) {
381
- return this.visitKeywordOfStatement(ctx, () => ctx.WHERE());
382
- }
383
- visitHaving(ctx) {
384
- return this.visitKeywordOfStatement(ctx, () => ctx.HAVING());
385
- }
386
- visitUsing(ctx) {
387
- return this.visitKeywordOfStatement(ctx, () => ctx.USING());
388
- }
389
- visitWithPf(ctx) {
390
- return this.visitKeywordOfStatement(ctx, () => ctx.WITH());
391
- }
392
- visitWithoutPf(ctx) {
393
- return this.visitKeywordOfStatement(ctx, () => ctx.WITHOUT());
394
- }
375
+ };
376
+ visitForTransformation = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.FOR());
377
+ visitWhere = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.WHERE());
378
+ visitHaving = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.HAVING());
379
+ visitUsing = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.USING());
380
+ visitWithPf = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.WITH());
381
+ visitWithoutPf = (ctx) => this.visitKeywordOfStatement(ctx, () => ctx.WITHOUT());
395
382
  visitKeywordOfStatement(ctx, keyword) {
396
383
  const edits = [];
397
384
  const kw = keyword().symbol;
@@ -402,13 +389,9 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
402
389
  edits.push(...this.visitChildren(ctx, 1));
403
390
  return edits;
404
391
  }
405
- visitAttributeList(ctx) {
406
- return this.visitNewlineSeparatedCommaList(ctx);
407
- }
392
+ visitAttributeList = (ctx) => this.visitNewlineSeparatedCommaList(ctx);
408
393
  // oxlint-disable-next-line sonarjs/no-identical-functions -- distinct ANTLR visitor override with intentionally identical formatting behavior
409
- visitListLiteral(ctx) {
410
- return this.visitNewlineSeparatedCommaList(ctx);
411
- }
394
+ visitListLiteral = (ctx) => this.visitNewlineSeparatedCommaList(ctx);
412
395
  visitNewlineSeparatedCommaList(ctx) {
413
396
  const edits = [];
414
397
  for (const comma of ctx.COMMA()) {
@@ -419,18 +402,18 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
419
402
  edits.push(...this.visitChildren(ctx));
420
403
  return edits;
421
404
  }
422
- visitIf(ctx) {
405
+ visitIf = (ctx) => {
423
406
  const edits = [];
424
407
  edits.push(...this.visit(ctx.IF()));
425
408
  edits.push(...this.visitElse(ctx));
426
409
  return edits;
427
- }
428
- visitCase(ctx) {
410
+ };
411
+ visitCase = (ctx) => {
429
412
  const edits = [];
430
413
  edits.push(...this.visit(ctx.CASE()));
431
414
  edits.push(...this.visitElse(ctx));
432
415
  return edits;
433
- }
416
+ };
434
417
  visitElse(ctx) {
435
418
  const edits = [];
436
419
  this.indent();
@@ -439,14 +422,19 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
439
422
  edits.push(...this.ensureNewline(this.getHiddenToLeft(elseCtx.symbol), tokenRange(elseCtx.symbol).start));
440
423
  edits.push(...this.visit(elseCtx));
441
424
  }
442
- edits.push(...this.visitChildren(ctx, 1, ctx.childCount - 2));
425
+ // error recovery may leave an IF/CASE without its END token; the generated END() then returns null
426
+ const endNode = ctx.getToken(MaqlParser.END, 0);
427
+ const lastChild = endNode ? ctx.getChildCount() - 2 : ctx.getChildCount() - 1;
428
+ edits.push(...this.visitChildren(ctx, 1, lastChild));
443
429
  this.dedent();
444
- const end = ctx.END()?.symbol;
445
- edits.push(...this.ensureNewline(this.getHiddenToLeft(end), tokenRange(end).start));
446
- edits.push(...this.visit(ctx.END()));
430
+ if (endNode) {
431
+ const end = endNode.symbol;
432
+ edits.push(...this.ensureNewline(this.getHiddenToLeft(end), tokenRange(end).start));
433
+ edits.push(...this.visit(endNode));
434
+ }
447
435
  return edits;
448
436
  }
449
- visitCaseConditional(ctx) {
437
+ visitCaseConditional = (ctx) => {
450
438
  const edits = this.defaultResult();
451
439
  for (const when of ctx.WHEN()) {
452
440
  const token = when.symbol;
@@ -454,10 +442,10 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
454
442
  }
455
443
  edits.push(...this.visitChildren(ctx));
456
444
  return edits;
457
- }
458
- visitTransFunction(ctx) {
445
+ };
446
+ visitTransFunction = (ctx) => {
459
447
  const token = ctx.NEXT() ?? ctx.NEXTPERIOD() ?? ctx.PREVIOUS() ?? ctx.PREVIOUSPERIOD();
460
- const text = token?.text;
448
+ const text = token?.getText();
461
449
  const edited = text ? formatTransFunction(text) : undefined;
462
450
  if (!token || !edited || text === edited)
463
451
  return this.defaultResult();
@@ -465,7 +453,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
465
453
  if (!this.inRange(range))
466
454
  return this.defaultResult();
467
455
  return [TextEdit.replace(range, edited)];
468
- }
456
+ };
469
457
  /**
470
458
  * Shortens whitespace, trims trailing spaces, inserts string at the start of the last line
471
459
  * @param whitespace - is assumed to be the token text of a MaqlParser.WS token
@@ -493,7 +481,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
493
481
  .map((token) => {
494
482
  if (!token.text || this.formattedTokens.has(token.tokenIndex))
495
483
  return null;
496
- if (token.type === Maql.MaqlParser.WS) {
484
+ if (token.type === MaqlParser.WS) {
497
485
  const range = tokenRange(token);
498
486
  const edited = this.formatWhitespace(token.text, finalInline, finalNewline);
499
487
  if (token.text !== edited) {
@@ -524,7 +512,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
524
512
  if (!token.text || this.formattedTokens.has(token.tokenIndex))
525
513
  return;
526
514
  this.formattedTokens.add(token.tokenIndex);
527
- if (token.type === Maql.MaqlParser.WS) {
515
+ if (token.type === MaqlParser.WS) {
528
516
  const range = tokenRange(token);
529
517
  const edited = prevIsLineComment
530
518
  ? "\n" + this.indentSpaces
@@ -535,7 +523,7 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
535
523
  edits.push(TextEdit.replace(range, edited));
536
524
  }
537
525
  }
538
- prevIsLineComment = token.type === Maql.MaqlParser.Comment;
526
+ prevIsLineComment = token.type === MaqlParser.Comment;
539
527
  });
540
528
  return edits;
541
529
  }
@@ -557,12 +545,12 @@ class MaqlFormatter extends AbstractParseTreeVisitor {
557
545
  getHiddenToLeft(token) {
558
546
  if (token.tokenIndex < 0 || token.tokenIndex >= this.stream.size)
559
547
  return [];
560
- return this.stream.getHiddenTokensToLeft(token.tokenIndex, -1);
548
+ return this.stream.getHiddenTokensToLeft(token.tokenIndex, -1) ?? [];
561
549
  }
562
550
  getHiddenToRight(token) {
563
551
  if (token.tokenIndex < 0 || token.tokenIndex >= this.stream.size)
564
552
  return [];
565
- return this.stream.getHiddenTokensToRight(token.tokenIndex, -1);
553
+ return this.stream.getHiddenTokensToRight(token.tokenIndex, -1) ?? [];
566
554
  }
567
555
  }
568
556
  function formatTransFunction(func) {
@@ -1 +1 @@
1
- {"version":3,"file":"semanticsHighlight.d.ts","sourceRoot":"","sources":["../../src/highlight/semanticsHighlight.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAgB9E;;GAEG;AACH,oBAAY,UAAU;IAClB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,OAAO,IAAA;IACP,KAAK,IAAA;IACL,IAAI,IAAA;IACJ,MAAM,KAAA;IACN,OAAO,KAAA;CACV;AAED;;GAEG;AACH,oBAAY,aAAa;IACrB,UAAU,IAAA;CACb;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAE1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,oBAGlC,CAAC;AAoKF,eAAO,MAAM,YAAY,qBAA4B,CAAC;AA2CtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAG7D;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"semanticsHighlight.d.ts","sourceRoot":"","sources":["../../src/highlight/semanticsHighlight.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAkB9E;;GAEG;AACH,oBAAY,UAAU;IAClB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,OAAO,IAAA;IACP,KAAK,IAAA;IACL,IAAI,IAAA;IACJ,MAAM,KAAA;IACN,OAAO,KAAA;CACV;AAED;;GAEG;AACH,oBAAY,aAAa;IACrB,UAAU,IAAA;CACb;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,UAE1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,oBAGlC,CAAC;AAoKF,eAAO,MAAM,YAAY,qBAA4B,CAAC;AA2CtD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAG7D;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC"}
@@ -1,7 +1,6 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import { ParseTreeWalker, } from "antlr4ts/tree/index.js";
3
- import MaqlPkg from "@gooddata/maql-antlr4ts";
4
- const { AttributeTypeContext, MaqlLexer, NumericTypeContext } = MaqlPkg;
2
+ import { ParseTreeWalker, } from "antlr4ng";
3
+ import { AttributeTypeContext, MaqlLexer, MaqlParserListener, NumericTypeContext, } from "@gooddata/maql-antlr4ts";
5
4
  import { LanguageId } from "../constants.js";
6
5
  import { MaqlMetric } from "../parseMaql.js";
7
6
  import { antlrContextRange } from "../tokenRanges.js";
@@ -251,11 +250,12 @@ function tokenize(tree, stream) {
251
250
  * Parse tree listener that assigns semantic tokens to nodes of a MAQL parse tree, usually by directly mapping
252
251
  * from a MAQL token, but is able to use more complicated logic in special cases.
253
252
  */
254
- class SemanticTokenizer {
253
+ class SemanticTokenizer extends MaqlParserListener {
255
254
  stream;
256
255
  tokens = [];
257
256
  skipNodes = false;
258
257
  constructor(stream) {
258
+ super();
259
259
  this.stream = stream;
260
260
  }
261
261
  visitTerminal(node) {
@@ -275,35 +275,37 @@ class SemanticTokenizer {
275
275
  }
276
276
  exitObject(ctx, objectTypeId = -1) {
277
277
  this.skipNodes = false;
278
- this.pushHiddenTokensToLeft(ctx.start.tokenIndex);
278
+ if (ctx.start) {
279
+ this.pushHiddenTokensToLeft(ctx.start.tokenIndex);
280
+ }
279
281
  this.pushRule(ctx, objectTypeId);
280
282
  }
281
283
  enterAttribute = this.enterObject;
282
- exitAttribute(ctx) {
283
- const typeCtx = ctx.tryGetChild(0, AttributeTypeContext);
284
+ exitAttribute = (ctx) => {
285
+ const typeCtx = ctx.getRuleContext(0, AttributeTypeContext);
284
286
  const type = typeCtx?.ATTRIBUTE() ??
285
287
  typeCtx?.COMPUTED_ATTRIBUTE_OBJECT() ??
286
288
  typeCtx?.LABEL() ??
287
289
  typeCtx?.DATASET();
288
290
  this.exitObject(ctx, this.getTokenId(type));
289
- }
291
+ };
290
292
  enterNumeric = this.enterObject;
291
- exitNumeric(ctx) {
292
- const typeCtx = ctx.tryGetChild(0, NumericTypeContext);
293
+ exitNumeric = (ctx) => {
294
+ const typeCtx = ctx.getRuleContext(0, NumericTypeContext);
293
295
  this.exitObject(ctx, this.getTokenId(typeCtx?.FACT() ?? typeCtx?.METRIC_TYPE()));
294
- }
295
- exitFact(ctx) {
296
+ };
297
+ exitFact = (ctx) => {
296
298
  this.exitObject(ctx, this.getTokenId(ctx.FACT()));
297
- }
299
+ };
298
300
  enterParameter = this.enterObject;
299
- exitParameter(ctx) {
301
+ exitParameter = (ctx) => {
300
302
  this.exitObject(ctx, this.getTokenId(ctx.PARAMETER()));
301
- }
303
+ };
302
304
  getTokenId = (node) => node?.symbol.type;
303
305
  pushHiddenTokensToLeft(tokenIndex) {
304
306
  if (tokenIndex < 0 || this.stream.size < tokenIndex)
305
307
  return;
306
- this.stream.getHiddenTokensToLeft(tokenIndex, -1).forEach((token) => this.pushToken(token));
308
+ (this.stream.getHiddenTokensToLeft(tokenIndex, -1) ?? []).forEach((token) => this.pushToken(token));
307
309
  }
308
310
  pushToken(token) {
309
311
  if (SKIP_TOKENS.includes(token.type))
@@ -311,12 +313,14 @@ class SemanticTokenizer {
311
313
  const tokenType = tokenTypeMap.get(token.type) ?? TokenTypes.Type;
312
314
  if (!token.text)
313
315
  return;
314
- this.push(token.text, token.line, token.charPositionInLine, tokenType);
316
+ this.push(token.text, token.line, token.column, tokenType);
315
317
  }
316
318
  pushRule(rule, objectTypeId) {
319
+ if (!rule.start)
320
+ return;
317
321
  const tokenType = getObjectTypeTokenType(objectTypeId) ?? TokenTypes.Type;
318
322
  const range = antlrContextRange(rule.start, rule.stop);
319
- this.push(rule.text, range.startLine, range.startCharacter, tokenType);
323
+ this.push(rule.getText(), range.startLine, range.startCharacter, tokenType);
320
324
  }
321
325
  push(text, antlrLine, antlrCharacter, tokenType, tokenModifiers = []) {
322
326
  const lines = text.split("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"labelElements.d.ts","sourceRoot":"","sources":["../src/labelElements.ts"],"names":[],"mappings":"AAEA,OAAgB,EAIZ,KAAK,SAAS,EAIjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACH,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGhB,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,GAAG,YAAY,CAKtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAIpF;AAED,qBAAa,YAAY;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAM;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAM;IACrC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAM;IAE3C,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAEzB;IAED,OAAO,IAAI,OAAO,CAEjB;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAMvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAuBvF;IAED,YAAY,CAAC,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAOjG;IAED,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAKrC;IAED,QAAQ,IAAI,MAAM,CAOjB;CACJ"}
1
+ {"version":3,"file":"labelElements.d.ts","sourceRoot":"","sources":["../src/labelElements.ts"],"names":[],"mappings":"AAEA,OAAO,EAKH,KAAK,SAAS,EAKjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACH,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGhB,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,GAAG,YAAY,CAKtF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAIpF;AAED,qBAAa,YAAY;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAM;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAM;IACrC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAM;IAE3C,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAEzB;IAED,OAAO,IAAI,OAAO,CAEjB;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAMvD;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAuBvF;IAED,YAAY,CAAC,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAOjG;IAED,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAKrC;IAED,QAAQ,IAAI,MAAM,CAOjB;CACJ"}
@@ -1,6 +1,5 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import MaqlPkg from "@gooddata/maql-antlr4ts";
3
- const { AbstractAstVisitor, positionInRange } = MaqlPkg;
2
+ import { AbstractAstVisitor, positionInRange, } from "@gooddata/maql-antlr4ts";
4
3
  import { isTigerType, tigerIdTypeToObjectType } from "@gooddata/sdk-backend-tiger";
5
4
  import { normalizeMaqlObjectType } from "./maqlObjectTypes.js";
6
5
  import { AntlrRange, isMaqlObject, isMaqlString, } from "./tokenRanges.js";
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../src/metadata/parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,oBAAoB,EAA+B,MAAM,qBAAqB,CAAC;AAI7F,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAE3E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAE9E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,IAAI,oBAAoB,CAU9F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAI7E"}
1
+ {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../src/metadata/parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,oBAAoB,EAA+B,MAAM,qBAAqB,CAAC;AAE7F,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAE3E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAE9E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,IAAI,oBAAoB,CAU9F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAI7E"}
@@ -1,7 +1,6 @@
1
1
  // (C) 2026 GoodData Corporation
2
- import MaqlPkg from "@gooddata/maql-antlr4ts";
2
+ import { escapeString } from "@gooddata/maql-antlr4ts";
3
3
  import { isStringParameterDefinition } from "@gooddata/sdk-model";
4
- const { escapeString } = MaqlPkg;
5
4
  export function parameterTypeLabel(definition) {
6
5
  return definition.type.toLowerCase();
7
6
  }
@@ -1,8 +1,7 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { groupBy } from "lodash-es";
3
3
  import { Diagnostic, DiagnosticSeverity } from "vscode-languageserver";
4
- import MaqlPkg from "@gooddata/maql-antlr4ts";
5
- const { MaqlLexer } = MaqlPkg;
4
+ import { MaqlLexer, } from "@gooddata/maql-antlr4ts";
6
5
  import { isStringParameterDefinition } from "@gooddata/sdk-model";
7
6
  import { ErrorCodes, diagnosticsSource } from "./constants.js";
8
7
  import { AntlrRange, tokenRange } from "./tokenRanges.js";
@@ -142,7 +141,7 @@ function keywordRange(caseNode, metric) {
142
141
  const token = metric.tokenStream
143
142
  .getTokens()
144
143
  .find((candidate) => candidate.line - 1 === astRange.start.line &&
145
- candidate.charPositionInLine === astRange.start.character &&
144
+ candidate.column === astRange.start.character &&
146
145
  (candidate.type === MaqlLexer.CASE || candidate.type === MaqlLexer.IF));
147
146
  return token ? tokenRange(token) : undefined;
148
147
  }
@@ -1,4 +1,4 @@
1
- import { type ANTLRErrorListener, type ANTLRErrorStrategy, CommonTokenStream, type ParserRuleContext, type Token } from "antlr4ts";
1
+ import { type ANTLRErrorListener, CommonTokenStream, type DefaultErrorStrategy, type ParserRuleContext } from "antlr4ng";
2
2
  import { type AstNode, type MaqlLexer as MaqlLexerType, type MaqlParser as MaqlParserType } from "@gooddata/maql-antlr4ts";
3
3
  /**
4
4
  * Class holding different representations of a MAQL query
@@ -17,9 +17,9 @@ declare class MaqlQuery {
17
17
  private _tree;
18
18
  private _ast;
19
19
  constructor(raw: string);
20
- addErrorListener(listener: ANTLRErrorListener<Token>): this;
20
+ addErrorListener(listener: ANTLRErrorListener): this;
21
21
  removeErrorListeners(): this;
22
- setErrorHandler(errorHandler: ANTLRErrorStrategy): this;
22
+ setErrorHandler(errorHandler: DefaultErrorStrategy): this;
23
23
  private notifyChangedConfiguration;
24
24
  }
25
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parseMaql.d.ts","sourceRoot":"","sources":["../src/parseMaql.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACb,MAAM,UAAU,CAAC;AAElB,OAAgB,EACZ,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,aAAa,EAC/B,KAAK,UAAU,IAAI,cAAc,EACpC,MAAM,yBAAyB,CAAC;AAGjC;;;GAGG;AACH,cAAM,SAAS;IAqCC,QAAQ,CAAC,GAAG,EAAE,MAAM;IApChC,IAAI,KAAK,IAAI,aAAa,CAGzB;IAED,IAAI,WAAW,IAAI,iBAAiB,CAGnC;IAED,IAAI,MAAM,IAAI,cAAc,CAG3B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAK5B;IAED,IAAI,GAAG,IAAI,OAAO,CAMjB;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,IAAI,CAAsB;IAElC,YAAqB,GAAG,EAAE,MAAM,EAK/B;IAED,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAI1D;IAED,oBAAoB,IAAI,IAAI,CAI3B;IAED,eAAe,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAItD;IAED,OAAO,CAAC,0BAA0B;CAIrC;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpC;IAED,6FAA6F;IAC7F,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7C;IAED,YAAY,GAAG,EAAE,MAAM,EAAE,uBAAuB,UAAQ,EAKvD;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;CACJ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
1
+ {"version":3,"file":"parseMaql.d.ts","sourceRoot":"","sources":["../src/parseMaql.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACzB,MAAM,UAAU,CAAC;AAElB,OAAO,EACH,KAAK,OAAO,EAIZ,KAAK,SAAS,IAAI,aAAa,EAE/B,KAAK,UAAU,IAAI,cAAc,EACpC,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,cAAM,SAAS;IAqCC,QAAQ,CAAC,GAAG,EAAE,MAAM;IApChC,IAAI,KAAK,IAAI,aAAa,CAGzB;IAED,IAAI,WAAW,IAAI,iBAAiB,CAGnC;IAED,IAAI,MAAM,IAAI,cAAc,CAG3B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAK5B;IAED,IAAI,GAAG,IAAI,OAAO,CAMjB;IAED,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,IAAI,CAAsB;IAElC,YAAqB,GAAG,EAAE,MAAM,EAK/B;IAED,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAInD;IAED,oBAAoB,IAAI,IAAI,CAI3B;IAED,eAAe,CAAC,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAIxD;IAED,OAAO,CAAC,0BAA0B;CAIrC;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAE1D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpC;IAED,6FAA6F;IAC7F,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7C;IAED,YAAY,GAAG,EAAE,MAAM,EAAE,uBAAuB,UAAQ,EAKvD;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;CACJ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
package/esm/parseMaql.js CHANGED
@@ -1,7 +1,6 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
- import { CommonTokenStream, } from "antlr4ts";
3
- import MaqlPkg from "@gooddata/maql-antlr4ts";
4
- const { CaseInsensitiveCharStream, MaqlAstVisitor, MaqlLexer, MaqlParser } = MaqlPkg;
2
+ import { CommonTokenStream, } from "antlr4ng";
3
+ import { CaseInsensitiveCharStream, MaqlAstVisitor, MaqlLexer, MaqlParser, } from "@gooddata/maql-antlr4ts";
5
4
  /**
6
5
  * Class holding different representations of a MAQL query
7
6
  * Raw string, ANTLR4 classes (Lexer, TokenStream, Parser, parse tree), abstract syntax tree (AST)
@@ -1,6 +1,6 @@
1
- import { type Token } from "antlr4ts";
2
- import { type Range } from "vscode-languageserver";
3
- import { type IRange } from "@gooddata/maql-antlr4ts";
1
+ import type { Token } from "antlr4ng";
2
+ import type { Range } from "vscode-languageserver";
3
+ import type { IRange } from "@gooddata/maql-antlr4ts";
4
4
  import { type ITigerMetadataObject, type ITigerMetadataObjectStub } from "./metadata/model.js";
5
5
  export type MetadataObjectAndRange = ITigerMetadataObject & {
6
6
  range: Range;
@@ -23,7 +23,7 @@ export declare function isMaqlString(obj: IOperand): obj is IMaqlString;
23
23
  export declare function isMaqlTimeMacro(obj: IOperand): obj is IMaqlTimeMacro;
24
24
  export declare function tokenRange(token: Token): Range;
25
25
  export declare function defaultRange(line: number, character: number, endLine?: number, endCharacter?: number): Range;
26
- export declare function antlrContextRange(start: Token, stop?: Token): AntlrRange;
26
+ export declare function antlrContextRange(start: Token, stop?: Token | null): AntlrRange;
27
27
  export declare class AntlrRange {
28
28
  readonly startLine: number;
29
29
  readonly startCharacter: number;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenRanges.d.ts","sourceRoot":"","sources":["../src/tokenRanges.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC9B;AACD,MAAM,WAAW,WAAY,SAAQ,QAAQ,EAAE,wBAAwB;IACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,WAAW,CAE9D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,WAAW,CAE9D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAY9C;AAED,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAa,EACtB,YAAY,GAAE,MAAkB,GACjC,KAAK,CASP;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,KAAa,GAAG,UAAU,CAO/E;AAED,qBAAa,UAAU;IAEf,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAJjC,YACa,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,MAAkB,EAC3B,YAAY,GAAE,MAAuB,EAC9C;IAEJ,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,cAOnC;IAED,OAAO,IAAI,KAAK,CAEf;CACJ"}
1
+ {"version":3,"file":"tokenRanges.d.ts","sourceRoot":"","sources":["../src/tokenRanges.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC9B;AACD,MAAM,WAAW,WAAY,SAAQ,QAAQ,EAAE,wBAAwB;IACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,WAAW,CAE9D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,WAAW,CAE9D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAY9C;AAED,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAa,EACtB,YAAY,GAAE,MAAkB,GACjC,KAAK,CASP;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,KAAK,GAAG,IAAY,GAAG,UAAU,CAGtF;AAED,qBAAa,UAAU;IAEf,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAJjC,YACa,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,MAAkB,EAC3B,YAAY,GAAE,MAAuB,EAC9C;IAEJ,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,cAOnC;IAED,OAAO,IAAI,KAAK,CAEf;CACJ"}
@@ -12,7 +12,7 @@ export function tokenRange(token) {
12
12
  // subtract one line to change to indexing from zero
13
13
  // subtract one more for the added "parse metric" line
14
14
  const startLine = token.line - 2;
15
- const startCharacter = token.charPositionInLine;
15
+ const startCharacter = token.column;
16
16
  const lines = token.text?.split("\n") ?? [""];
17
17
  const endLine = startLine + lines.length - 1;
18
18
  const endCharacter = lines[lines.length - 1].length + (startLine === endLine ? startCharacter : 0);
@@ -32,7 +32,8 @@ export function defaultRange(line, character, endLine = line, endCharacter = cha
32
32
  };
33
33
  }
34
34
  export function antlrContextRange(start, stop = start) {
35
- return new AntlrRange(start.line, start.charPositionInLine, stop.line, stop.charPositionInLine + (stop.text?.length ?? 1));
35
+ const end = stop ?? start;
36
+ return new AntlrRange(start.line, start.column, end.line, end.column + (end.text?.length ?? 1));
36
37
  }
37
38
  export class AntlrRange {
38
39
  startLine;
@@ -1 +1 @@
1
- {"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../src/types/signatures.ts"],"names":[],"mappings":"AAEA,OAAgB,EACZ,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAG1B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,oBAAY,YAAY;IACpB,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,KAAK,IAAA;IACL,OAAO,IAAA;CACV;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAKtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE;IACzC,QAAQ,CAAC,QAAQ,EAAE,YAAY;IALnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YACI,IAAI,EAAE,MAAM,EACH,UAAU,EAAE,kBAAkB,EAAE,EAChC,QAAQ,EAAE,YAAY,EAGlC;IAED,QAAQ,IAAI,MAAM,CAcjB;CACJ;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IAIjD,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAEpC,QAAQ,CAAC,MAAM,EAAE,OAAO;IAL5B,YACI,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,kBAAkB,EAAE,EACvB,OAAO,EAAE,kBAAkB,EACpC,QAAQ,EAAE,YAAY,EACb,MAAM,EAAE,OAAO,EAG3B;IAED,MAAM,CAAC,MAAM,CACT,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,QAAQ,EACpB,cAAc,EAAE,QAAQ,EAAE,EAC1B,QAAQ,eAAwB,EAChC,MAAM,UAAQ,GACf,kBAAkB,CAQpB;IAEQ,QAAQ,IAAI,MAAM,CAI1B;CACJ;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CASpG;AAED,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,MAAM,GACb,kBAAkB,CAQpB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,EAAE,CA2E3E"}
1
+ {"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../src/types/signatures.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAK1B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,oBAAY,YAAY;IACpB,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,KAAK,IAAA;IACL,OAAO,IAAA;CACV;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAKtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE;IACzC,QAAQ,CAAC,QAAQ,EAAE,YAAY;IALnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YACI,IAAI,EAAE,MAAM,EACH,UAAU,EAAE,kBAAkB,EAAE,EAChC,QAAQ,EAAE,YAAY,EAGlC;IAED,QAAQ,IAAI,MAAM,CAcjB;CACJ;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,iBAAiB;IAIjD,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAEpC,QAAQ,CAAC,MAAM,EAAE,OAAO;IAL5B,YACI,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,kBAAkB,EAAE,EACvB,OAAO,EAAE,kBAAkB,EACpC,QAAQ,EAAE,YAAY,EACb,MAAM,EAAE,OAAO,EAG3B;IAED,MAAM,CAAC,MAAM,CACT,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,QAAQ,EACpB,cAAc,EAAE,QAAQ,EAAE,EAC1B,QAAQ,eAAwB,EAChC,MAAM,UAAQ,GACf,kBAAkB,CAQpB;IAEQ,QAAQ,IAAI,MAAM,CAI1B;CACJ;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CASpG;AAED,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,MAAM,GACb,kBAAkB,CAQpB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,EAAE,CA2E3E"}
@@ -1,6 +1,5 @@
1
1
  // (C) 2021-2026 GoodData Corporation
2
- import MaqlPkg from "@gooddata/maql-antlr4ts";
3
- const { functionDefinitions, isMaqlFunctionName } = MaqlPkg;
2
+ import { functionDefinitions, isMaqlFunctionName, } from "@gooddata/maql-antlr4ts";
4
3
  import { MaqlType } from "./hierarchy.js";
5
4
  export var CallNotation;
6
5
  (function (CallNotation) {
@@ -1,5 +1,4 @@
1
- import MaqlPkg, { type AstNode, type BooleanLiteralNode, type CaseNode, type ConditionalNode, type EmptyNode, type ExpressionNode, type FilterNode, type FunctionNode, type GranularityNode, type IRange, type IdentifierNode, type LastFirstValueFunctionNode, type ListNode, type NullLiteralNode, type NumberLiteralNode, type OperatorNode, type OrderByElementNode, type RankFunctionNode, type RankingFilterNode, type RunningFunctionNode, type SelectNode, type StringLiteralNode } from "@gooddata/maql-antlr4ts";
2
- declare const AbstractAstVisitor: typeof MaqlPkg.AbstractAstVisitor;
1
+ import { AbstractAstVisitor, type AstNode, type BooleanLiteralNode, type CaseNode, type ConditionalNode, type EmptyNode, type ExpressionNode, type FilterNode, type FunctionNode, type GranularityNode, type IRange, type IdentifierNode, type LastFirstValueFunctionNode, type ListNode, type NullLiteralNode, type NumberLiteralNode, type OperatorNode, type OrderByElementNode, type RankFunctionNode, type RankingFilterNode, type RunningFunctionNode, type SelectNode, type StringLiteralNode } from "@gooddata/maql-antlr4ts";
3
2
  import { MaqlType } from "./hierarchy.js";
4
3
  import { type TypeModel } from "./typeModel.js";
5
4
  export interface ITypeConstraintsViolation {
@@ -52,5 +51,4 @@ export declare class AstTypeChecker extends AbstractAstVisitor<TypedAstNode> {
52
51
  private logUnexpectedOperandCount;
53
52
  private logViolation;
54
53
  }
55
- export {};
56
54
  //# sourceMappingURL=typeChecking.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typeChecking.d.ts","sourceRoot":"","sources":["../../src/types/typeChecking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typeChecking.d.ts","sourceRoot":"","sources":["../../src/types/typeChecking.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,kBAAkB,EAClB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,QAAQ,EAAuD,MAAM,gBAAgB,CAAC;AAQ/F,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,YAAY;IAEjB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAFjC,YACa,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,GAAG,IAAI,EAC7B;CACP;AAED,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,YAAY,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS;IAArC,YAAqB,KAAK,EAAE,SAAS,EAEpC;IAED,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,CAAM;IAErE,aAAa,IAAI,YAAY,CAE5B;IAED,UAAmB,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CAMhG;IAEQ,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAIrD;IAEQ,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAoBvD;IAEQ,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAE/D;IAEQ,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CA2C3D;IAED,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,OAAO;IAaN,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAKnD;IAEQ,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAQ3D;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,oBAAoB;IAiCnB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAQzE;IAEQ,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAKnE;IAEQ,+BAA+B,CAAC,IAAI,EAAE,0BAA0B,GAAG,YAAY,CAQvF;IAEQ,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,CAGnE;IAEQ,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAOrE;IAEQ,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAInD;IAEQ,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAKjE;IAEQ,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAO/D;IAEQ,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,CAEvE;IAEQ,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAGrE;IAEQ,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAErE;IAEQ,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAEjE;IAEQ,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAQjE;IAEQ,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAGvD;IAED,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,YAAY;CAGvB"}
@@ -1,6 +1,5 @@
1
1
  // (C) 2022-2026 GoodData Corporation
2
- import MaqlPkg from "@gooddata/maql-antlr4ts";
3
- const { AbstractAstVisitor } = MaqlPkg;
2
+ import { AbstractAstVisitor, } from "@gooddata/maql-antlr4ts";
4
3
  import { isTigerType } from "@gooddata/sdk-backend-tiger";
5
4
  import { normalizeMaqlObjectType } from "../maqlObjectTypes.js";
6
5
  import { MaqlType, abstractValueTypes, isSubtype, lowestCommonAncestor } from "./hierarchy.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-maql-language-server",
3
- "version": "11.65.0-alpha.8",
3
+ "version": "11.65.0",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Stellar",
@@ -20,18 +20,16 @@
20
20
  "types": "esm/index.d.ts",
21
21
  "exports": "./esm/index.js",
22
22
  "dependencies": {
23
- "@gooddata/maql-antlr4ts": "0.5.1-02977c25.0",
24
- "antlr4-c3": "1.1.16",
25
- "antlr4ts": "0.5.0-alpha.4",
26
- "assert": "2.1.0",
23
+ "@gooddata/maql-antlr4ts": "0.7.2",
24
+ "antlr4-c3": "3.4.4",
25
+ "antlr4ng": "3.0.16",
27
26
  "lodash-es": "^4.17.23",
28
- "util": "0.12.5",
29
27
  "vscode-languageserver": "8.1.0",
30
28
  "vscode-languageserver-textdocument": "1.0.12",
31
- "@gooddata/sdk-backend-base": "11.65.0-alpha.8",
32
- "@gooddata/sdk-backend-spi": "11.65.0-alpha.8",
33
- "@gooddata/sdk-backend-tiger": "11.65.0-alpha.8",
34
- "@gooddata/sdk-model": "11.65.0-alpha.8"
29
+ "@gooddata/sdk-backend-base": "11.65.0",
30
+ "@gooddata/sdk-backend-spi": "11.65.0",
31
+ "@gooddata/sdk-model": "11.65.0",
32
+ "@gooddata/sdk-backend-tiger": "11.65.0"
35
33
  },
36
34
  "devDependencies": {
37
35
  "@microsoft/api-documenter": "7.30.16",
@@ -57,14 +55,13 @@
57
55
  "oxlint": "1.83.0",
58
56
  "oxlint-plugin-eslint": "1.82.0",
59
57
  "oxlint-tsgolint": "7.0.2001",
60
- "process": "0.11.10",
61
58
  "ts-dedent": "2.3.0",
62
59
  "typescript": "7.0.2",
63
60
  "vitest": "5.0.4",
64
- "@gooddata/api-client-tiger": "11.65.0-alpha.8",
65
- "@gooddata/eslint-config": "11.65.0-alpha.8",
66
- "@gooddata/oxlint-config": "11.65.0-alpha.8",
67
- "@gooddata/stylelint-config": "11.65.0-alpha.8"
61
+ "@gooddata/api-client-tiger": "11.65.0",
62
+ "@gooddata/eslint-config": "11.65.0",
63
+ "@gooddata/oxlint-config": "11.65.0",
64
+ "@gooddata/stylelint-config": "11.65.0"
68
65
  },
69
66
  "scripts": {
70
67
  "_phase:build": "npm run build",