@gooddata/sdk-maql-language-server 0.0.0-stage → 11.65.0-alpha.10
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.
- package/LICENSE +7 -0
- package/README.md +118 -2
- package/esm/completions/complete.d.ts +12 -0
- package/esm/completions/complete.d.ts.map +1 -0
- package/esm/completions/complete.js +316 -0
- package/esm/completions/descriptions.d.ts +42 -0
- package/esm/completions/descriptions.d.ts.map +1 -0
- package/esm/completions/descriptions.js +289 -0
- package/esm/completions/findContext.d.ts +19 -0
- package/esm/completions/findContext.d.ts.map +1 -0
- package/esm/completions/findContext.js +171 -0
- package/esm/completions/functionDescriptions.d.ts +3 -0
- package/esm/completions/functionDescriptions.d.ts.map +1 -0
- package/esm/completions/functionDescriptions.js +98 -0
- package/esm/completions/sort.d.ts +4 -0
- package/esm/completions/sort.d.ts.map +1 -0
- package/esm/completions/sort.js +88 -0
- package/esm/constants.d.ts +21 -0
- package/esm/constants.d.ts.map +1 -0
- package/esm/constants.js +22 -0
- package/esm/dateElementFormat.d.ts +9 -0
- package/esm/dateElementFormat.d.ts.map +1 -0
- package/esm/dateElementFormat.js +60 -0
- package/esm/decorations.d.ts +46 -0
- package/esm/decorations.d.ts.map +1 -0
- package/esm/decorations.js +42 -0
- package/esm/diagnostics.d.ts +12 -0
- package/esm/diagnostics.d.ts.map +1 -0
- package/esm/diagnostics.js +259 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.js +61 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.js +19 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.js +72 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.js +41 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.js +69 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.js +61 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.js +25 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.js +63 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.js +20 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.js +73 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.js +96 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.js +71 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.js +65 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.js +64 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.js +22 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.js +85 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.js +42 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.js +94 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.js +17 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.js +12 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.js +22 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.js +59 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.js +23 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.js +13 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.js +13 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.js +34 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.js +30 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.js +32 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.js +57 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.js +90 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.js +53 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.js +101 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.js +50 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.js +71 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.js +54 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.js +47 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.js +46 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.js +74 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.js +44 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.js +88 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.js +54 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.js +96 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.js +38 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.js +26 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.js +30 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.js +53 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.js +55 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.js +79 -0
- package/esm/docs/index.d.ts +82 -0
- package/esm/docs/index.d.ts.map +1 -0
- package/esm/docs/index.js +143 -0
- package/esm/findObjects.d.ts +13 -0
- package/esm/findObjects.d.ts.map +1 -0
- package/esm/findObjects.js +73 -0
- package/esm/format.d.ts +4 -0
- package/esm/format.d.ts.map +1 -0
- package/esm/format.js +569 -0
- package/esm/highlight/convert.d.ts +3 -0
- package/esm/highlight/convert.d.ts.map +1 -0
- package/esm/highlight/convert.js +12 -0
- package/esm/highlight/semanticsHighlight.d.ts +47 -0
- package/esm/highlight/semanticsHighlight.d.ts.map +1 -0
- package/esm/highlight/semanticsHighlight.js +345 -0
- package/esm/highlight/utils.d.ts +3 -0
- package/esm/highlight/utils.d.ts.map +1 -0
- package/esm/highlight/utils.js +14 -0
- package/esm/hover.d.ts +23 -0
- package/esm/hover.d.ts.map +1 -0
- package/esm/hover.js +60 -0
- package/esm/index.d.ts +11 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +9 -0
- package/esm/labelElements.d.ts +22 -0
- package/esm/labelElements.d.ts.map +1 -0
- package/esm/labelElements.js +224 -0
- package/esm/maqlLanguageService.d.ts +56 -0
- package/esm/maqlLanguageService.d.ts.map +1 -0
- package/esm/maqlLanguageService.js +104 -0
- package/esm/maqlObjectTypes.d.ts +17 -0
- package/esm/maqlObjectTypes.d.ts.map +1 -0
- package/esm/maqlObjectTypes.js +30 -0
- package/esm/maqlServer.d.ts +4 -0
- package/esm/maqlServer.d.ts.map +1 -0
- package/esm/maqlServer.js +78 -0
- package/esm/metadata/model.d.ts +162 -0
- package/esm/metadata/model.d.ts.map +1 -0
- package/esm/metadata/model.js +143 -0
- package/esm/metadata/parameters.d.ts +16 -0
- package/esm/metadata/parameters.d.ts.map +1 -0
- package/esm/metadata/parameters.js +37 -0
- package/esm/metadata/types.d.ts +16 -0
- package/esm/metadata/types.d.ts.map +1 -0
- package/esm/metadata/types.js +2 -0
- package/esm/metadataService.d.ts +56 -0
- package/esm/metadataService.d.ts.map +1 -0
- package/esm/metadataService.js +159 -0
- package/esm/node/main.d.ts +2 -0
- package/esm/node/main.d.ts.map +1 -0
- package/esm/node/main.js +18 -0
- package/esm/parameterConstraints.d.ts +5 -0
- package/esm/parameterConstraints.d.ts.map +1 -0
- package/esm/parameterConstraints.js +197 -0
- package/esm/parseMaql.d.ts +43 -0
- package/esm/parseMaql.d.ts.map +1 -0
- package/esm/parseMaql.js +96 -0
- package/esm/renderParameters.d.ts +41 -0
- package/esm/renderParameters.d.ts.map +1 -0
- package/esm/renderParameters.js +76 -0
- package/esm/sdk-maql-language-server.d.ts +496 -0
- package/esm/tests/metadata.test.helpers.d.ts +8 -0
- package/esm/tests/metadata.test.helpers.d.ts.map +1 -0
- package/esm/tests/metadata.test.helpers.js +468 -0
- package/esm/tokenRanges.d.ts +36 -0
- package/esm/tokenRanges.d.ts.map +1 -0
- package/esm/tokenRanges.js +55 -0
- package/esm/tsdoc-metadata.json +11 -0
- package/esm/types/hierarchy.d.ts +37 -0
- package/esm/types/hierarchy.d.ts.map +1 -0
- package/esm/types/hierarchy.js +165 -0
- package/esm/types/signatures.d.ts +40 -0
- package/esm/types/signatures.d.ts.map +1 -0
- package/esm/types/signatures.js +141 -0
- package/esm/types/typeChecking.d.ts +54 -0
- package/esm/types/typeChecking.d.ts.map +1 -0
- package/esm/types/typeChecking.js +295 -0
- package/esm/types/typeModel.d.ts +18 -0
- package/esm/types/typeModel.d.ts.map +1 -0
- package/esm/types/typeModel.js +84 -0
- package/package.json +83 -3
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
|
+
import { CompletionItemKind, InsertTextFormat } from "vscode-languageserver";
|
|
3
|
+
import { MaqlParser } from "@gooddata/maql-antlr4ts";
|
|
4
|
+
import { errorTokens } from "../diagnostics.js";
|
|
5
|
+
import { getTokenIdFromName } from "../parseMaql.js";
|
|
6
|
+
import { MaqlType } from "../types/hierarchy.js";
|
|
7
|
+
import { functionDescriptions } from "./functionDescriptions.js";
|
|
8
|
+
/**
|
|
9
|
+
* Maps concepts from MAQL to completionItemKind values
|
|
10
|
+
*/
|
|
11
|
+
export const Kind = {
|
|
12
|
+
Attribute: CompletionItemKind.Enum,
|
|
13
|
+
Label: CompletionItemKind.Enum,
|
|
14
|
+
Metric: CompletionItemKind.Variable,
|
|
15
|
+
Parameter: CompletionItemKind.Value,
|
|
16
|
+
Fact: CompletionItemKind.Field,
|
|
17
|
+
Dataset: CompletionItemKind.Constant,
|
|
18
|
+
LabelElement: CompletionItemKind.Text,
|
|
19
|
+
Function: CompletionItemKind.Function,
|
|
20
|
+
Keyword: CompletionItemKind.Keyword,
|
|
21
|
+
Operator: CompletionItemKind.Operator,
|
|
22
|
+
Boolean: CompletionItemKind.Value,
|
|
23
|
+
Granularity: CompletionItemKind.EnumMember,
|
|
24
|
+
Snippet: CompletionItemKind.Snippet,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Tokens that will not generate any completion items
|
|
28
|
+
* Note that this can be overwritten by creating a CompletionDescription that triggers on that token
|
|
29
|
+
*/
|
|
30
|
+
export const ignoredTokens = new Set([
|
|
31
|
+
MaqlParser.String,
|
|
32
|
+
MaqlParser.OVER,
|
|
33
|
+
MaqlParser.TO,
|
|
34
|
+
MaqlParser.LPAREN,
|
|
35
|
+
MaqlParser.LBRACE,
|
|
36
|
+
MaqlParser.ID,
|
|
37
|
+
MaqlParser.SEP,
|
|
38
|
+
MaqlParser.RBRACE,
|
|
39
|
+
MaqlParser.ZERO,
|
|
40
|
+
MaqlParser.Natural,
|
|
41
|
+
MaqlParser.Real,
|
|
42
|
+
MaqlParser.COMMA,
|
|
43
|
+
MaqlParser.METRIC_TYPE,
|
|
44
|
+
MaqlParser.ATTRIBUTE,
|
|
45
|
+
MaqlParser.COMPUTED_ATTRIBUTE_OBJECT,
|
|
46
|
+
MaqlParser.LABEL,
|
|
47
|
+
MaqlParser.DATASET,
|
|
48
|
+
MaqlParser.PROMPT,
|
|
49
|
+
MaqlParser.PARAMETER,
|
|
50
|
+
MaqlParser.FACT,
|
|
51
|
+
MaqlParser.LOCAL,
|
|
52
|
+
MaqlParser.WS,
|
|
53
|
+
MaqlParser.Comment,
|
|
54
|
+
MaqlParser.REPORT,
|
|
55
|
+
MaqlParser.METRIC,
|
|
56
|
+
MaqlParser.SEMICOLON,
|
|
57
|
+
MaqlParser.EOF,
|
|
58
|
+
MaqlParser.NEXT,
|
|
59
|
+
MaqlParser.PREVIOUS,
|
|
60
|
+
MaqlParser.THIS,
|
|
61
|
+
// fiscal granularities below are parsed by the grammar but not yet fully
|
|
62
|
+
// delivered in the product, so they are hidden from completion suggestions
|
|
63
|
+
MaqlParser.FISCALWEEK,
|
|
64
|
+
MaqlParser.FISCALSEMESTER,
|
|
65
|
+
MaqlParser.FISCALDAYOFFISCALWEEK,
|
|
66
|
+
MaqlParser.FISCALDAYOFFISCALMONTH,
|
|
67
|
+
MaqlParser.FISCALDAYOFFISCALQUARTER,
|
|
68
|
+
MaqlParser.FISCALDAYOFFISCALSEMESTER,
|
|
69
|
+
MaqlParser.FISCALDAYOFFISCALYEAR,
|
|
70
|
+
MaqlParser.FISCALWEEKOFFISCALMONTH,
|
|
71
|
+
MaqlParser.FISCALWEEKOFFISCALQUARTER,
|
|
72
|
+
MaqlParser.FISCALWEEKOFFISCALSEMESTER,
|
|
73
|
+
MaqlParser.FISCALWEEKOFFISCALYEAR,
|
|
74
|
+
MaqlParser.FISCALMONTHOFFISCALQUARTER,
|
|
75
|
+
MaqlParser.FISCALMONTHOFFISCALSEMESTER,
|
|
76
|
+
MaqlParser.FISCALMONTHOFFISCALYEAR,
|
|
77
|
+
MaqlParser.FISCALQUARTEROFFISCALSEMESTER,
|
|
78
|
+
MaqlParser.FISCALQUARTEROFFISCALYEAR,
|
|
79
|
+
MaqlParser.FISCALSEMESTEROFFISCALYEAR,
|
|
80
|
+
...errorTokens,
|
|
81
|
+
]);
|
|
82
|
+
export const descriptions = [
|
|
83
|
+
...functionDescriptions,
|
|
84
|
+
desc("%", Kind.Operator, "PERCENT operator (MAQL)"),
|
|
85
|
+
desc("()", Kind.Operator),
|
|
86
|
+
desc(")", Kind.Operator),
|
|
87
|
+
desc("*", Kind.Operator, "MULTIPLICATION operator (MAQL)", "arithmetic-operations", undefined, " "),
|
|
88
|
+
desc("+", Kind.Operator, "PLUS operator (MAQL)", "arithmetic-operations", undefined, " "),
|
|
89
|
+
desc("-", Kind.Operator, "MINUS operator (MAQL)", "arithmetic-operations", undefined, " "),
|
|
90
|
+
desc("/", Kind.Operator, "DIVISION operator (MAQL)", "arithmetic-operations", undefined, " "),
|
|
91
|
+
desc("<", Kind.Operator, "LESSER filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
92
|
+
desc("<=", Kind.Operator, "LESSER OR EQUAL filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
93
|
+
desc("<>", Kind.Operator, "DOES NOT EQUAL filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
94
|
+
desc("=", Kind.Operator, "EQUALS filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
95
|
+
desc(">", Kind.Operator, "GREATER filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
96
|
+
desc(">=", Kind.Operator, "GREATER OR EQUAL filtering operator (MAQL)", "relational-operators", undefined, " "),
|
|
97
|
+
desc("ALL", Kind.Keyword, "ALL keyword (MAQL)", "by-all", undefined, " "),
|
|
98
|
+
desc("AND", Kind.Keyword, "AND logical operator (MAQL)", "and", undefined, " "),
|
|
99
|
+
desc("ASC", Kind.Keyword, "ASC keyword (MAQL)", undefined, undefined, " "),
|
|
100
|
+
desc("BETWEEN", Kind.Keyword, "BETWEEN keyword (MAQL)", "relational-operators", undefined, " "),
|
|
101
|
+
desc("ALL OTHER EXCEPT", Kind.Keyword, "ALL OTHER EXCEPT clause (MAQL)", "by-all-in-all-other-dimensions-except-for-attribute", undefined, " "),
|
|
102
|
+
desc("ALL OTHER", Kind.Keyword, "ALL OTHER clause (MAQL)", "by-all-in-all-other-dimensions", undefined),
|
|
103
|
+
desc("BY", Kind.Keyword, "BY keyword (MAQL)", "by", undefined, " "),
|
|
104
|
+
desc("CASE", Kind.Keyword, "CASE keyword (MAQL)", "case", undefined, " "),
|
|
105
|
+
desc("COMPUTED ATTRIBUTE", Kind.Keyword, "COMPUTED ATTRIBUTE keyword (MAQL)", undefined, undefined, " "),
|
|
106
|
+
desc("CURRENT", Kind.Keyword, "CURRENT keyword (MAQL)", undefined, undefined, ""),
|
|
107
|
+
desc("DESC", Kind.Keyword, "DESC keyword (MAQL)", undefined, undefined, " "),
|
|
108
|
+
desc("DIMENSIONS", Kind.Keyword, "DIMENSIONS keyword (MAQL)", undefined, undefined, " "),
|
|
109
|
+
desc("ELSE", Kind.Keyword, "ELSE keyword (MAQL)", undefined, undefined, " "),
|
|
110
|
+
desc("END", Kind.Keyword, "END keyword (MAQL)", undefined, undefined, " "),
|
|
111
|
+
desc("EXCEPT", Kind.Keyword, "EXCEPT keyword (MAQL)", undefined, undefined, " "),
|
|
112
|
+
desc("FILTER", Kind.Keyword, "FILTER keyword (MAQL)", undefined, undefined, " "),
|
|
113
|
+
desc("FOLLOWING", Kind.Keyword, "FOLLOWING keyword (MAQL)", undefined, undefined, " "),
|
|
114
|
+
desc("FOR", Kind.Keyword, "FOR keyword (MAQL)", undefined, undefined, " "),
|
|
115
|
+
desc("FOR EACH", Kind.Keyword, "FOR EACH keyword (MAQL)", "for-each", undefined, " "),
|
|
116
|
+
desc("EACH", Kind.Keyword, "FOR EACH keyword (MAQL)", "for-each", undefined, " "),
|
|
117
|
+
desc("HAVING", Kind.Keyword, "HAVING keyword (MAQL)", "filtering-with-the-having-clause", undefined, " "),
|
|
118
|
+
desc("IF", Kind.Keyword, "IF keyword (MAQL)", "if-then-else", undefined, " "),
|
|
119
|
+
desc("ILIKE", Kind.Keyword, "ILIKE keyword (MAQL)", "filtering-with-the-like-clause", undefined, " "),
|
|
120
|
+
desc("LIKE", Kind.Keyword, "LIKE keyword (MAQL)", "filtering-with-the-like-clause", undefined, " "),
|
|
121
|
+
desc("METRIC", Kind.Keyword, "METRIC keyword (MAQL)", undefined, undefined, " "),
|
|
122
|
+
desc("NOT", Kind.Keyword, "NOT keyword (MAQL)", "not", undefined, " "),
|
|
123
|
+
desc("NULL", Kind.Keyword, "NULL keyword (MAQL)", undefined, undefined, " "),
|
|
124
|
+
desc("OR", Kind.Keyword, "OR logical operator (MAQL)", "or", undefined, " "),
|
|
125
|
+
desc("OTHER", Kind.Keyword, "OTHER keyword (MAQL)", undefined, undefined),
|
|
126
|
+
desc("ORDER BY", Kind.Keyword, "ORDER BY keyword (MAQL)", undefined, undefined, " "),
|
|
127
|
+
desc("PARENT FILTER", Kind.Keyword, "PARENT FILTER keyword (MAQL)", undefined, undefined, " "),
|
|
128
|
+
desc("PARENT", Kind.Keyword, "PARENT keyword (MAQL)", undefined, undefined, " "),
|
|
129
|
+
desc("PARSE", Kind.Keyword, "PARSE keyword (MAQL)", undefined, undefined, " "),
|
|
130
|
+
desc("PF", Kind.Keyword, "PF keyword (MAQL)", undefined, undefined, " "),
|
|
131
|
+
desc("PRECEDING", Kind.Keyword, "PRECEDING keyword (MAQL)", undefined, undefined, " "),
|
|
132
|
+
desc("ROW", Kind.Keyword, "ROW keyword (MAQL)", undefined, undefined, " "),
|
|
133
|
+
desc("ROWS", Kind.Keyword, "ROWS keyword (MAQL)", undefined, undefined, " "),
|
|
134
|
+
desc("SELECT", Kind.Keyword, "SELECT keyword (MAQL)", undefined, undefined, " "),
|
|
135
|
+
desc("THEN", Kind.Keyword, "THEN keyword (MAQL)", undefined, undefined, " "),
|
|
136
|
+
desc("UNBOUNDED", Kind.Keyword, "UNBOUNDED keyword (MAQL)", undefined, undefined, " "),
|
|
137
|
+
desc("USING", Kind.Keyword, "USING keyword (MAQL)", undefined, undefined, " "),
|
|
138
|
+
desc("WHEN", Kind.Keyword, "WHEN keyword (MAQL)", undefined, undefined, " "),
|
|
139
|
+
desc("WHERE", Kind.Keyword, "WHERE keyword (MAQL)", "filtering-with-the-where-clause", undefined, " "),
|
|
140
|
+
desc("WITH", Kind.Keyword, "WITH keyword (MAQL)", "with-parent-filter", undefined, " "),
|
|
141
|
+
desc("WITHOUT", Kind.Keyword, "WITHOUT keyword (MAQL)", "without-parent-filter", undefined, " "),
|
|
142
|
+
booleanDesc("FALSE"),
|
|
143
|
+
booleanDesc("TRUE"),
|
|
144
|
+
granularityDesc("SECOND", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
145
|
+
granularityDesc("MINUTE", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
146
|
+
granularityDesc("DAY", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
147
|
+
granularityDesc("HOUR", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
148
|
+
granularityDesc("WEEK", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
149
|
+
granularityDesc("MONTH", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
150
|
+
granularityDesc("QUARTER", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
151
|
+
granularityDesc("YEAR", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
152
|
+
granularityDesc("FISCALMONTH", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
153
|
+
granularityDesc("FISCALQUARTER", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
154
|
+
granularityDesc("FISCALYEAR", MaqlType.CHRONOLOGICAL_GRANULARITY),
|
|
155
|
+
granularityDesc("SECONDOFMINUTE", MaqlType.PERIODICAL_GRANULARITY),
|
|
156
|
+
granularityDesc("SECONDOFDAY", MaqlType.PERIODICAL_GRANULARITY),
|
|
157
|
+
granularityDesc("MINUTEOFHOUR", MaqlType.PERIODICAL_GRANULARITY),
|
|
158
|
+
granularityDesc("MINUTEOFDAY", MaqlType.PERIODICAL_GRANULARITY),
|
|
159
|
+
granularityDesc("HOUROFDAY", MaqlType.PERIODICAL_GRANULARITY),
|
|
160
|
+
granularityDesc("DAYOFWEEK", MaqlType.PERIODICAL_GRANULARITY),
|
|
161
|
+
granularityDesc("DAYOFMONTH", MaqlType.PERIODICAL_GRANULARITY),
|
|
162
|
+
granularityDesc("DAYOFQUARTER", MaqlType.PERIODICAL_GRANULARITY),
|
|
163
|
+
granularityDesc("DAYOFYEAR", MaqlType.PERIODICAL_GRANULARITY),
|
|
164
|
+
granularityDesc("WEEKOFYEAR", MaqlType.PERIODICAL_GRANULARITY),
|
|
165
|
+
granularityDesc("MONTHOFYEAR", MaqlType.PERIODICAL_GRANULARITY),
|
|
166
|
+
granularityDesc("QUARTEROFYEAR", MaqlType.PERIODICAL_GRANULARITY),
|
|
167
|
+
objectDesc("label", undefined, "LABEL object (MAQL)", undefined, MaqlParser.RULE_attribute, Kind.Label, MaqlType.STRING_AND_DATE),
|
|
168
|
+
objectDesc("computed_attribute", undefined, "COMPUTED_ATTRIBUTE object (MAQL)", undefined, MaqlParser.RULE_attribute, Kind.Attribute, MaqlType.STRING),
|
|
169
|
+
objectDesc("dataset", undefined, "DATASET object (MAQL)", undefined, MaqlParser.RULE_attribute, Kind.Dataset, MaqlType.DATASET),
|
|
170
|
+
objectDesc("fact", undefined, "FACT object (MAQL)", undefined, MaqlParser.RULE_numeric, Kind.Fact, MaqlType.NUMERIC),
|
|
171
|
+
objectDesc("metric", undefined, "METRIC object (MAQL)", undefined, MaqlParser.RULE_numeric, Kind.Metric),
|
|
172
|
+
objectDesc("parameter", undefined, "PARAMETER object (MAQL)", undefined, MaqlParser.RULE_parameter, Kind.Parameter, MaqlType.NUMERIC),
|
|
173
|
+
// This description does not have an appropriate trigger place, disable for now
|
|
174
|
+
// {
|
|
175
|
+
// label: "BY attribute ALL OTHER",
|
|
176
|
+
// kind: Kind.Snippet,
|
|
177
|
+
// insertTextFormat: InsertTextFormat.Snippet,
|
|
178
|
+
// insertText: "BY ${1:attribute} ALL OTHER $0",
|
|
179
|
+
// detail: "BY attribute ALL OTHER clause (MAQL)",
|
|
180
|
+
// resolveTag: "by-attribute-all-in-all-other-dimensions",
|
|
181
|
+
// ruleId: MaqlParser.RULE_by,
|
|
182
|
+
// },
|
|
183
|
+
{
|
|
184
|
+
label: "WITHIN(DIMENSIONS)",
|
|
185
|
+
kind: Kind.Snippet,
|
|
186
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
187
|
+
insertText: "WITHIN($1)$0",
|
|
188
|
+
sortText: "WITHIN",
|
|
189
|
+
detail: "WITHIN clause (MAQL)",
|
|
190
|
+
resolveTag: "within-clause",
|
|
191
|
+
triggerTokenId: getTokenIdFromName("WITHIN"),
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
label: "BOTTOM(NUMERIC) ... -> BOOLEAN",
|
|
195
|
+
kind: Kind.Function,
|
|
196
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
197
|
+
insertText: "BOTTOM($1)$0",
|
|
198
|
+
sortText: "BOTTOM",
|
|
199
|
+
detail: "BOTTOM ranking filter (MAQL)",
|
|
200
|
+
resolveTag: "filtering-with-ranking-filters",
|
|
201
|
+
triggerTokenId: getTokenIdFromName("BOTTOM"),
|
|
202
|
+
maqlType: MaqlType.BOOLEAN,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
label: "TOP(NUMERIC) ... -> BOOLEAN",
|
|
206
|
+
kind: Kind.Function,
|
|
207
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
208
|
+
insertText: "TOP($1)$0",
|
|
209
|
+
sortText: "TOP",
|
|
210
|
+
detail: "TOP ranking filter (MAQL)",
|
|
211
|
+
resolveTag: "filtering-with-ranking-filters",
|
|
212
|
+
triggerTokenId: getTokenIdFromName("TOP"),
|
|
213
|
+
maqlType: MaqlType.BOOLEAN,
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
label: "IF ... THEN ... ELSE ... END",
|
|
217
|
+
kind: Kind.Snippet,
|
|
218
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
219
|
+
insertText: "IF $1 THEN $2 ELSE $3 END",
|
|
220
|
+
sortText: "IF THEN ELSE",
|
|
221
|
+
detail: "IF THEN ELSE conditional statement (MAQL)",
|
|
222
|
+
resolveTag: "if-then-else",
|
|
223
|
+
triggerTokenId: getTokenIdFromName("IF"),
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
label: "IN (...)", // TODO: IN disambiguation (TOP IN, object IN (...))
|
|
227
|
+
kind: Kind.Keyword,
|
|
228
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
229
|
+
insertText: "IN ($1)$0",
|
|
230
|
+
detail: "IN keyword (MAQL)",
|
|
231
|
+
resolveTag: "relational-operators",
|
|
232
|
+
triggerTokenId: getTokenIdFromName("IN"),
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
label: "OF (...)",
|
|
236
|
+
kind: Kind.Keyword,
|
|
237
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
238
|
+
insertText: "OF ($1)$0",
|
|
239
|
+
detail: "OF keyword (MAQL)",
|
|
240
|
+
resolveTag: "where-top-or-bottom-of",
|
|
241
|
+
triggerTokenId: getTokenIdFromName("OF"),
|
|
242
|
+
},
|
|
243
|
+
];
|
|
244
|
+
function desc(label, kind, detail, resolveTag, insertPrefix, insertSuffix, ruleId, maqlType) {
|
|
245
|
+
return {
|
|
246
|
+
label,
|
|
247
|
+
kind,
|
|
248
|
+
insertText: (insertPrefix ?? "") + label + (insertSuffix ?? ""),
|
|
249
|
+
detail,
|
|
250
|
+
resolveTag,
|
|
251
|
+
triggerTokenId: getTokenIdFromName(label),
|
|
252
|
+
ruleId,
|
|
253
|
+
maqlType,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function booleanDesc(value) {
|
|
257
|
+
return {
|
|
258
|
+
label: value,
|
|
259
|
+
kind: Kind.Boolean,
|
|
260
|
+
insertText: value,
|
|
261
|
+
triggerTokenId: getTokenIdFromName(value),
|
|
262
|
+
maqlType: MaqlType.BOOLEAN,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function granularityDesc(name, type) {
|
|
266
|
+
return {
|
|
267
|
+
label: name,
|
|
268
|
+
kind: Kind.Granularity,
|
|
269
|
+
insertText: name,
|
|
270
|
+
detail: name + " time granularity (MAQL)",
|
|
271
|
+
triggerTokenId: getTokenIdFromName(name),
|
|
272
|
+
maqlType: type,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function objectDesc(type, id = undefined, detail = undefined, resolveTag = undefined, ruleId, kind, maqlType) {
|
|
276
|
+
const format = id ? InsertTextFormat.PlainText : InsertTextFormat.Snippet;
|
|
277
|
+
return {
|
|
278
|
+
label: `${type}/${id ?? "$identifier"}`,
|
|
279
|
+
kind,
|
|
280
|
+
insertText: `{${type}/${id ?? "${1:identifier}"}}`,
|
|
281
|
+
insertTextFormat: format,
|
|
282
|
+
filterText: `{ ${type} / }`,
|
|
283
|
+
sortText: `{${type}/}`,
|
|
284
|
+
detail,
|
|
285
|
+
resolveTag,
|
|
286
|
+
ruleId,
|
|
287
|
+
maqlType,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Token } from "antlr4ng";
|
|
2
|
+
import { type AstNode, type IPosition } from "@gooddata/maql-antlr4ts";
|
|
3
|
+
import { type MaqlMetric } from "../parseMaql.js";
|
|
4
|
+
import { MaqlType } from "../types/hierarchy.js";
|
|
5
|
+
export interface ICaretContext {
|
|
6
|
+
/** List of AST nodes whose range includes the caret. Starts from the deepest node */
|
|
7
|
+
nodeStack: AstNode[];
|
|
8
|
+
/** List of types that are expected to be present at the caret position */
|
|
9
|
+
expectedTypes: MaqlType[];
|
|
10
|
+
/** Final tokens surrounding the caret position */
|
|
11
|
+
tokens: {
|
|
12
|
+
caretToken: Token;
|
|
13
|
+
leftFinalToken: Token;
|
|
14
|
+
rightFinalToken: Token;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function findContext(metric: MaqlMetric, caretPosition: IPosition, offset: number): ICaretContext;
|
|
18
|
+
export declare function isFinal(token: Token): boolean;
|
|
19
|
+
//# sourceMappingURL=findContext.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// (C) 2022-2026 GoodData Corporation
|
|
2
|
+
import { AbstractAstVisitor, MaqlParser, positionInRange, } from "@gooddata/maql-antlr4ts";
|
|
3
|
+
import { MaqlType, abstractValueTypes } from "../types/hierarchy.js";
|
|
4
|
+
import { findFunctionDefinitions, } from "../types/signatures.js";
|
|
5
|
+
export function findContext(metric, caretPosition, offset) {
|
|
6
|
+
const finder = new AstContextFinder(caretPosition);
|
|
7
|
+
const [leftFinalToken, caretToken, rightFinalToken] = findCaretToken(metric.tokenStream, offset);
|
|
8
|
+
const context = finder.visit(metric.ast);
|
|
9
|
+
if (context.caretExpectedTypes.size === 0) {
|
|
10
|
+
// no information is inferred therefore allow everything
|
|
11
|
+
context.caretExpectedTypes.add(MaqlType.ANY);
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
nodeStack: context.nodeStack,
|
|
15
|
+
expectedTypes: Array.from(context.caretExpectedTypes),
|
|
16
|
+
tokens: {
|
|
17
|
+
leftFinalToken,
|
|
18
|
+
caretToken,
|
|
19
|
+
rightFinalToken,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
class AstContext {
|
|
24
|
+
nodeStack;
|
|
25
|
+
caretExpectedTypes;
|
|
26
|
+
/**
|
|
27
|
+
* @param nodeStack - List of AST nodes whose range includes the caret. Starts from the deepest node
|
|
28
|
+
* @param caretExpectedTypes - List of possible MAQL types expected at caret position
|
|
29
|
+
*/
|
|
30
|
+
constructor(nodeStack = [], caretExpectedTypes = new Set()) {
|
|
31
|
+
this.nodeStack = nodeStack;
|
|
32
|
+
this.caretExpectedTypes = caretExpectedTypes;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
class AstContextFinder extends AbstractAstVisitor {
|
|
36
|
+
caretPosition;
|
|
37
|
+
constructor(caretPosition) {
|
|
38
|
+
super();
|
|
39
|
+
this.caretPosition = caretPosition;
|
|
40
|
+
}
|
|
41
|
+
defaultResult() {
|
|
42
|
+
return new AstContext();
|
|
43
|
+
}
|
|
44
|
+
aggregateResult(aggregate, nextResult) {
|
|
45
|
+
return aggregate.nodeStack.length === 0 ? nextResult : aggregate;
|
|
46
|
+
}
|
|
47
|
+
mergeResultWithParent(parentNode, result) {
|
|
48
|
+
// Add `parentNode` to `result.nodeStack` if the caret position is in range
|
|
49
|
+
if (parentNode.contextRange && positionInRange(this.caretPosition, parentNode.contextRange)) {
|
|
50
|
+
result.nodeStack.push(parentNode);
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
visitFunctionNode(node) {
|
|
55
|
+
const args = node.content.map((child) => this.visit(child));
|
|
56
|
+
// find the index of argument with the caret position
|
|
57
|
+
const argIdx = args.findIndex((arg) => arg.nodeStack.length > 0);
|
|
58
|
+
const argContext = args[argIdx] ?? new AstContext();
|
|
59
|
+
if (this.isCaretContext(argContext)) {
|
|
60
|
+
return this.mergeResultWithParent(node, argContext);
|
|
61
|
+
}
|
|
62
|
+
const defs = findFunctionDefinitions(node.type, node.name);
|
|
63
|
+
// if no argument has the caret position, definitions exists, and the caret is still within the function range,
|
|
64
|
+
// assume that the user wants the next argument of the function
|
|
65
|
+
const range = node.contextRange;
|
|
66
|
+
const idx = argIdx === -1 && defs.length !== 0 && range && positionInRange(this.caretPosition, range)
|
|
67
|
+
? args.length
|
|
68
|
+
: argIdx;
|
|
69
|
+
if (idx === -1) {
|
|
70
|
+
return this.mergeResultWithParent(node, argContext);
|
|
71
|
+
}
|
|
72
|
+
const allowedTypes = defs
|
|
73
|
+
.map((def) => {
|
|
74
|
+
return def.vararg ? Array(args.length).fill(def.parameters[0]) : def.parameters;
|
|
75
|
+
})
|
|
76
|
+
.map((paramTypes) => paramTypes[idx]?.type)
|
|
77
|
+
.filter((type) => type !== undefined);
|
|
78
|
+
return this.mergeResultWithParent(node, new AstContext(argContext.nodeStack, new Set(allowedTypes)));
|
|
79
|
+
}
|
|
80
|
+
visitOrderByElement(node) {
|
|
81
|
+
const elementCtx = this.visit(node.content[0]);
|
|
82
|
+
if (this.isCaretContext(elementCtx)) {
|
|
83
|
+
return this.mergeResultWithParent(node, elementCtx);
|
|
84
|
+
}
|
|
85
|
+
return this.mergeResultWithParent(node, new AstContext(elementCtx.nodeStack, new Set(abstractValueTypes)));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check that the context is the one most relevant to the location of the caret
|
|
89
|
+
*/
|
|
90
|
+
isCaretContext(ctx) {
|
|
91
|
+
// nodeStack > 1 means caret is in a deeper rule, expected types mean that the context is already restricted
|
|
92
|
+
return ctx.nodeStack.length > 1 || ctx.caretExpectedTypes.size > 0;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Function to find position of the caret for the purposes of completions.
|
|
97
|
+
* The caret position may be ambiguous in regard to the caret token.
|
|
98
|
+
* The caret token is the place at which position we want to place completions.
|
|
99
|
+
* We can imagine it as removing the token and everything after it
|
|
100
|
+
* Consider these two examples, '|' signifies caret position
|
|
101
|
+
* 1. parse metric SELECT SUM(|)
|
|
102
|
+
* 2. parse metric SELECT SUM(Price|)
|
|
103
|
+
* In both queries, we want to see suggestions as if the query was 'SELECT SUM('.
|
|
104
|
+
* In query 1, the caret token is on the RIGHT of the caret: ')'.
|
|
105
|
+
* In query 2, the caret token is on the LEFT of the caret: 'Price'
|
|
106
|
+
* This function resolves this by separating tokens into two categories - "final" (F) and "extensible" (X).
|
|
107
|
+
* Final tokens cannot change by appending characters to them. These are tokens like parentheses, commas, operators,
|
|
108
|
+
* completed strings and end-of-file. Extensible tokens are rewritable - these include all keywords, functions,
|
|
109
|
+
* unterminated strings and incomplete objects (missing '\}'). When the caret is at the boundary of two tokens, the caret
|
|
110
|
+
* token is decided as follows:
|
|
111
|
+
* F | F -\> RIGHT
|
|
112
|
+
* F | X -\> RIGHT
|
|
113
|
+
* X | F -\> LEFT
|
|
114
|
+
* X | X -\> LEFT
|
|
115
|
+
* After caret token is found, the function looks for the closest final tokens on the left and right to serve as
|
|
116
|
+
* boundaries for text edit range on completion.
|
|
117
|
+
* @returns [Token, Token, Token]
|
|
118
|
+
* - leftFinalToken - last final token before or including caret token
|
|
119
|
+
* - caretToken - the actual token where the caret is currently placed, to be passed into antlr4c3 completion core
|
|
120
|
+
* - rightFinalToken - first final token after or including caret token
|
|
121
|
+
*/
|
|
122
|
+
function findCaretToken(tokenStream, offset) {
|
|
123
|
+
let caretToken = tokenStream.get(0), leftFinalToken, rightFinalToken;
|
|
124
|
+
// first find the caret token
|
|
125
|
+
for (let tokenIndex = 0; tokenIndex < tokenStream.size; tokenIndex++) {
|
|
126
|
+
const nextToken = tokenStream.get(tokenIndex);
|
|
127
|
+
if (nextToken.start < offset || (nextToken.start === offset && isFinal(caretToken))) {
|
|
128
|
+
caretToken = nextToken;
|
|
129
|
+
}
|
|
130
|
+
if (nextToken.start >= offset)
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
for (let tokenIndex = caretToken.tokenIndex; tokenIndex < tokenStream.size; tokenIndex++) {
|
|
134
|
+
const nextToken = tokenStream.get(tokenIndex);
|
|
135
|
+
if (nextToken.type !== MaqlParser.RBRACE && isFinal(nextToken)) {
|
|
136
|
+
// rewriting RBRACE is allowed if approached from the left side
|
|
137
|
+
rightFinalToken = nextToken;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
for (let tokenIndex = caretToken.tokenIndex; tokenIndex > 0; tokenIndex--) {
|
|
142
|
+
const prevToken = tokenStream.get(tokenIndex);
|
|
143
|
+
if (isFinal(prevToken)) {
|
|
144
|
+
leftFinalToken = prevToken;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return [leftFinalToken ?? caretToken, caretToken, rightFinalToken ?? caretToken];
|
|
149
|
+
}
|
|
150
|
+
const finalTokens = new Set([
|
|
151
|
+
MaqlParser.WS,
|
|
152
|
+
MaqlParser.EOF,
|
|
153
|
+
MaqlParser.String,
|
|
154
|
+
MaqlParser.ZERO,
|
|
155
|
+
MaqlParser.Natural,
|
|
156
|
+
MaqlParser.Real,
|
|
157
|
+
MaqlParser.PLUS,
|
|
158
|
+
MaqlParser.MINUS,
|
|
159
|
+
MaqlParser.MUL,
|
|
160
|
+
MaqlParser.DIV,
|
|
161
|
+
MaqlParser.PERCENT,
|
|
162
|
+
MaqlParser.RELOP,
|
|
163
|
+
MaqlParser.COMMA,
|
|
164
|
+
MaqlParser.SEMICOLON,
|
|
165
|
+
MaqlParser.LPAREN,
|
|
166
|
+
MaqlParser.RPAREN,
|
|
167
|
+
MaqlParser.RBRACE,
|
|
168
|
+
]);
|
|
169
|
+
export function isFinal(token) {
|
|
170
|
+
return finalTokens.has(token.type);
|
|
171
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// (C) 2022-2026 GoodData Corporation
|
|
2
|
+
import { CompletionItemKind, InsertTextFormat } from "vscode-languageserver";
|
|
3
|
+
import { MaqlParser, functionDefinitions, } from "@gooddata/maql-antlr4ts";
|
|
4
|
+
import { getTokenIdFromName } from "../parseMaql.js";
|
|
5
|
+
import { transformFunctionDefinition } from "../types/signatures.js";
|
|
6
|
+
/**
|
|
7
|
+
* Tags for functions to resolve correct documentation
|
|
8
|
+
*/
|
|
9
|
+
const functionResolveTags = {
|
|
10
|
+
"time macro": {
|
|
11
|
+
THIS: "time-macros",
|
|
12
|
+
NEXT: "time-macros",
|
|
13
|
+
PREVIOUS: "time-macros",
|
|
14
|
+
},
|
|
15
|
+
function: {
|
|
16
|
+
ABS: "abs",
|
|
17
|
+
APPROXIMATE_COUNT: "approximate_count",
|
|
18
|
+
AVG: "avg",
|
|
19
|
+
CEIL: "ceiling",
|
|
20
|
+
CEILING: "ceiling",
|
|
21
|
+
CORREL: "correl",
|
|
22
|
+
COUNT: "count",
|
|
23
|
+
COVAR: "covariance-functions",
|
|
24
|
+
COVARP: "covariance-functions",
|
|
25
|
+
ROW_NUMBER: "rank-variations",
|
|
26
|
+
RANK: "rank-variations",
|
|
27
|
+
DENSE_RANK: "rank-variations",
|
|
28
|
+
PERCENT_RANK: "rank-variations",
|
|
29
|
+
CUME_DIST: "rank-variations",
|
|
30
|
+
EXP: "exp",
|
|
31
|
+
FIRST_VALUE: "first",
|
|
32
|
+
FLOOR: "floor",
|
|
33
|
+
// "FORECAST": "forecast", // not implemented
|
|
34
|
+
GREATEST: "greatest",
|
|
35
|
+
IFNULL: "ifnull",
|
|
36
|
+
LAST_VALUE: "last",
|
|
37
|
+
LEAST: "least",
|
|
38
|
+
LN: "ln",
|
|
39
|
+
LOG: "log",
|
|
40
|
+
MAX: "max",
|
|
41
|
+
MEDIAN: "median",
|
|
42
|
+
MIN: "min",
|
|
43
|
+
NEXT: "for-next",
|
|
44
|
+
NEXTPERIOD: "for-next-period",
|
|
45
|
+
PERCENTILE: "percentile",
|
|
46
|
+
POWER: "power",
|
|
47
|
+
PREVIOUS: "for-previous",
|
|
48
|
+
PREVIOUSPERIOD: "for-previous-period",
|
|
49
|
+
ROUND: "round",
|
|
50
|
+
RSQ: "least-squares-functions",
|
|
51
|
+
RUNAVG: "running-totals-for-core-functions",
|
|
52
|
+
RUNMAX: "running-totals-for-core-functions",
|
|
53
|
+
RUNMIN: "running-totals-for-core-functions",
|
|
54
|
+
RUNSUM: "running-totals-for-core-functions",
|
|
55
|
+
RUNSTDEV: "running-total-statistical-functions",
|
|
56
|
+
RUNSTDEVP: "running-total-statistical-functions",
|
|
57
|
+
RUNVAR: "running-total-statistical-functions",
|
|
58
|
+
RUNVARP: "running-total-statistical-functions",
|
|
59
|
+
SIGN: "sign",
|
|
60
|
+
SQRT: "sqrt",
|
|
61
|
+
STDEV: "standard-deviation-functions",
|
|
62
|
+
STDEVP: "standard-deviation-functions",
|
|
63
|
+
SUM: "sum",
|
|
64
|
+
TRUNC: "trunc",
|
|
65
|
+
VAR: "variance-functions",
|
|
66
|
+
VARP: "variance-functions",
|
|
67
|
+
DATETIME_ADD: "datetime-add",
|
|
68
|
+
DATETIME_DIFF: "datetime-diff",
|
|
69
|
+
INTERCEPT: undefined,
|
|
70
|
+
SLOPE: undefined,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
export const functionDescriptions = Object.entries(functionDefinitions).flatMap(([astType, astDefs]) => {
|
|
74
|
+
return Object.entries(astDefs).flatMap(([name, defs]) => {
|
|
75
|
+
return defs.map((def) => {
|
|
76
|
+
const signature = transformFunctionDefinition(def, name);
|
|
77
|
+
const ruleId = astType === "time macro" ? MaqlParser.RULE_timeMacroName : undefined;
|
|
78
|
+
return {
|
|
79
|
+
label: signature.toString(),
|
|
80
|
+
kind: CompletionItemKind.Function,
|
|
81
|
+
insertText: name + snippetArgs(signature.parameters.length),
|
|
82
|
+
insertTextFormat: InsertTextFormat.Snippet,
|
|
83
|
+
sortText: name,
|
|
84
|
+
detail: `${name} function (MAQL)`,
|
|
85
|
+
resolveTag: functionResolveTags[astType][name],
|
|
86
|
+
ruleId,
|
|
87
|
+
triggerTokenId: ruleId ? undefined : getTokenIdFromName(name),
|
|
88
|
+
maqlType: signature.returns.type,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
function snippetArgs(count) {
|
|
94
|
+
return labelArgs(Array.from(Array(count)).map((_v, idx) => `$${idx + 1}`), undefined, ")$0");
|
|
95
|
+
}
|
|
96
|
+
function labelArgs(args, prefix = "(", suffix = ")", separator = ", ") {
|
|
97
|
+
return prefix + args.join(separator) + suffix;
|
|
98
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../src/completions/sort.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKrF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAgDtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,kBAoD1E"}
|