msdax.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. define(["require", "exports"], function (require, exports) {
  6. 'use strict';
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.conf = {
  9. comments: {
  10. lineComment: '//',
  11. blockComment: ['/*', '*/'],
  12. },
  13. brackets: [['[', ']'], ['(', ')'], ['{', '}']],
  14. autoClosingPairs: [
  15. { open: '"', close: '"', notIn: ['string', 'comment'] },
  16. { open: '\'', close: '\'', notIn: ['string', 'comment'] },
  17. { open: '[', close: ']', notIn: ['string', 'comment'] },
  18. { open: '(', close: ')', notIn: ['string', 'comment'] },
  19. { open: '{', close: '}', notIn: ['string', 'comment'] },
  20. ]
  21. };
  22. exports.language = {
  23. defaultToken: '',
  24. tokenPostfix: '.msdax',
  25. ignoreCase: true,
  26. brackets: [
  27. { open: '[', close: ']', token: 'delimiter.square' },
  28. { open: '{', close: '}', token: 'delimiter.brackets' },
  29. { open: '(', close: ')', token: 'delimiter.parenthesis' }
  30. ],
  31. keywords: [
  32. // Query keywords
  33. 'VAR',
  34. 'RETURN',
  35. 'NOT',
  36. 'EVALUATE',
  37. 'DATATABLE',
  38. 'ORDER',
  39. 'BY',
  40. 'START',
  41. 'AT',
  42. 'DEFINE',
  43. 'MEASURE',
  44. 'ASC',
  45. 'DESC',
  46. 'IN',
  47. // Datatable types
  48. 'BOOLEAN',
  49. 'DOUBLE',
  50. 'INTEGER',
  51. 'DATETIME',
  52. 'CURRENCY',
  53. 'STRING'
  54. ],
  55. functions: [
  56. // Relational
  57. 'CLOSINGBALANCEMONTH', 'CLOSINGBALANCEQUARTER', 'CLOSINGBALANCEYEAR', 'DATEADD', 'DATESBETWEEN',
  58. 'DATESINPERIOD', 'DATESMTD', 'DATESQTD', 'DATESYTD', 'ENDOFMONTH',
  59. 'ENDOFQUARTER', 'ENDOFYEAR', 'FIRSTDATE', 'FIRSTNONBLANK', 'LASTDATE',
  60. 'LASTNONBLANK', 'NEXTDAY', 'NEXTMONTH', 'NEXTQUARTER', 'NEXTYEAR',
  61. 'OPENINGBALANCEMONTH', 'OPENINGBALANCEQUARTER', 'OPENINGBALANCEYEAR', 'PARALLELPERIOD', 'PREVIOUSDAY',
  62. 'PREVIOUSMONTH', 'PREVIOUSQUARTER', 'PREVIOUSYEAR', 'SAMEPERIODLASTYEAR', 'STARTOFMONTH',
  63. 'STARTOFQUARTER', 'STARTOFYEAR', 'TOTALMTD', 'TOTALQTD', 'TOTALYTD',
  64. 'ADDCOLUMNS', 'ADDMISSINGITEMS', 'ALL', 'ALLEXCEPT', 'ALLNOBLANKROW',
  65. 'ALLSELECTED', 'CALCULATE', 'CALCULATETABLE', 'CALENDAR', 'CALENDARAUTO',
  66. 'CROSSFILTER', 'CROSSJOIN', 'CURRENTGROUP', 'DATATABLE', 'DETAILROWS',
  67. 'DISTINCT', 'EARLIER', 'EARLIEST', 'EXCEPT', 'FILTER',
  68. 'FILTERS', 'GENERATE', 'GENERATEALL', 'GROUPBY', 'IGNORE',
  69. 'INTERSECT', 'ISONORAFTER', 'KEEPFILTERS', 'LOOKUPVALUE', 'NATURALINNERJOIN',
  70. 'NATURALLEFTOUTERJOIN', 'RELATED', 'RELATEDTABLE', 'ROLLUP', 'ROLLUPADDISSUBTOTAL',
  71. 'ROLLUPGROUP', 'ROLLUPISSUBTOTAL', 'ROW', 'SAMPLE', 'SELECTCOLUMNS',
  72. 'SUBSTITUTEWITHINDEX', 'SUMMARIZE', 'SUMMARIZECOLUMNS', 'TOPN', 'TREATAS',
  73. 'UNION', 'USERELATIONSHIP', 'VALUES', 'SUM', 'SUMX',
  74. 'PATH', 'PATHCONTAINS', 'PATHITEM', 'PATHITEMREVERSE', 'PATHLENGTH',
  75. 'AVERAGE', 'AVERAGEA', 'AVERAGEX', 'COUNT', 'COUNTA',
  76. 'COUNTAX', 'COUNTBLANK', 'COUNTROWS', 'COUNTX', 'DISTINCTCOUNT',
  77. 'DIVIDE', 'GEOMEAN', 'GEOMEANX', 'MAX', 'MAXA',
  78. 'MAXX', 'MEDIAN', 'MEDIANX', 'MIN', 'MINA',
  79. 'MINX', 'PERCENTILE.EXC', 'PERCENTILE.INC', 'PERCENTILEX.EXC', 'PERCENTILEX.INC',
  80. 'PRODUCT', 'PRODUCTX', 'RANK.EQ', 'RANKX', 'STDEV.P',
  81. 'STDEV.S', 'STDEVX.P', 'STDEVX.S', 'VAR.P', 'VAR.S',
  82. 'VARX.P', 'VARX.S', 'XIRR', 'XNPV',
  83. // Scalar
  84. 'DATE', 'DATEDIFF', 'DATEVALUE', 'DAY', 'EDATE',
  85. 'EOMONTH', 'HOUR', 'MINUTE', 'MONTH', 'NOW',
  86. 'SECOND', 'TIME', 'TIMEVALUE', 'TODAY', 'WEEKDAY',
  87. 'WEEKNUM', 'YEAR', 'YEARFRAC', 'CONTAINS', 'CONTAINSROW',
  88. 'CUSTOMDATA', 'ERROR', 'HASONEFILTER', 'HASONEVALUE', 'ISBLANK',
  89. 'ISCROSSFILTERED', 'ISEMPTY', 'ISERROR', 'ISEVEN', 'ISFILTERED',
  90. 'ISLOGICAL', 'ISNONTEXT', 'ISNUMBER', 'ISODD', 'ISSUBTOTAL',
  91. 'ISTEXT', 'USERNAME', 'USERPRINCIPALNAME', 'AND', 'FALSE',
  92. 'IF', 'IFERROR', 'NOT', 'OR', 'SWITCH',
  93. 'TRUE', 'ABS', 'ACOS', 'ACOSH', 'ACOT',
  94. 'ACOTH', 'ASIN', 'ASINH', 'ATAN', 'ATANH',
  95. 'BETA.DIST', 'BETA.INV', 'CEILING', 'CHISQ.DIST', 'CHISQ.DIST.RT',
  96. 'CHISQ.INV', 'CHISQ.INV.RT', 'COMBIN', 'COMBINA', 'CONFIDENCE.NORM',
  97. 'CONFIDENCE.T', 'COS', 'COSH', 'COT', 'COTH',
  98. 'CURRENCY', 'DEGREES', 'EVEN', 'EXP', 'EXPON.DIST',
  99. 'FACT', 'FLOOR', 'GCD', 'INT', 'ISO.CEILING',
  100. 'LCM', 'LN', 'LOG', 'LOG10', 'MOD',
  101. 'MROUND', 'ODD', 'PERMUT', 'PI', 'POISSON.DIST',
  102. 'POWER', 'QUOTIENT', 'RADIANS', 'RAND', 'RANDBETWEEN',
  103. 'ROUND', 'ROUNDDOWN', 'ROUNDUP', 'SIGN', 'SIN',
  104. 'SINH', 'SQRT', 'SQRTPI', 'TAN', 'TANH',
  105. 'TRUNC', 'BLANK', 'CONCATENATE', 'CONCATENATEX', 'EXACT',
  106. 'FIND', 'FIXED', 'FORMAT', 'LEFT', 'LEN',
  107. 'LOWER', 'MID', 'REPLACE', 'REPT', 'RIGHT',
  108. 'SEARCH', 'SUBSTITUTE', 'TRIM', 'UNICHAR', 'UNICODE',
  109. 'UPPER', 'VALUE'
  110. ],
  111. tokenizer: {
  112. root: [
  113. { include: '@comments' },
  114. { include: '@whitespace' },
  115. { include: '@numbers' },
  116. { include: '@strings' },
  117. { include: '@complexIdentifiers' },
  118. [/[;,.]/, 'delimiter'],
  119. [/[({})]/, '@brackets'],
  120. [/[a-z_][a-zA-Z0-9_]*/, {
  121. cases: {
  122. '@keywords': 'keyword',
  123. '@functions': 'keyword',
  124. '@default': 'identifier'
  125. }
  126. }],
  127. [/[<>=!%&+\-*/|~^]/, 'operator'],
  128. ],
  129. whitespace: [
  130. [/\s+/, 'white']
  131. ],
  132. comments: [
  133. [/\/\/+.*/, 'comment'],
  134. [/\/\*/, { token: 'comment.quote', next: '@comment' }]
  135. ],
  136. comment: [
  137. [/[^*/]+/, 'comment'],
  138. [/\*\//, { token: 'comment.quote', next: '@pop' }],
  139. [/./, 'comment']
  140. ],
  141. numbers: [
  142. [/0[xX][0-9a-fA-F]*/, 'number'],
  143. [/[$][+-]*\d*(\.\d*)?/, 'number'],
  144. [/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number']
  145. ],
  146. strings: [
  147. [/N"/, { token: 'string', next: '@string' }],
  148. [/"/, { token: 'string', next: '@string' }]
  149. ],
  150. string: [
  151. [/[^"]+/, 'string'],
  152. [/""/, 'string'],
  153. [/"/, { token: 'string', next: '@pop' }]
  154. ],
  155. complexIdentifiers: [
  156. [/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
  157. [/'/, { token: 'identifier.quote', next: '@quotedIdentifier' }]
  158. ],
  159. bracketedIdentifier: [
  160. [/[^\]]+/, 'identifier'],
  161. [/]]/, 'identifier'],
  162. [/]/, { token: 'identifier.quote', next: '@pop' }]
  163. ],
  164. quotedIdentifier: [
  165. [/[^']+/, 'identifier'],
  166. [/''/, 'identifier'],
  167. [/'/, { token: 'identifier.quote', next: '@pop' }]
  168. ]
  169. }
  170. };
  171. });