msdax.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  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. export var conf = {
  6. comments: {
  7. lineComment: '//',
  8. blockComment: ['/*', '*/']
  9. },
  10. brackets: [
  11. ['[', ']'],
  12. ['(', ')'],
  13. ['{', '}']
  14. ],
  15. autoClosingPairs: [
  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. { open: '{', close: '}', notIn: ['string', 'comment'] }
  21. ]
  22. };
  23. export var language = {
  24. defaultToken: '',
  25. tokenPostfix: '.msdax',
  26. ignoreCase: true,
  27. brackets: [
  28. { open: '[', close: ']', token: 'delimiter.square' },
  29. { open: '{', close: '}', token: 'delimiter.brackets' },
  30. { open: '(', close: ')', token: 'delimiter.parenthesis' }
  31. ],
  32. keywords: [
  33. // Query keywords
  34. 'VAR',
  35. 'RETURN',
  36. 'NOT',
  37. 'EVALUATE',
  38. 'DATATABLE',
  39. 'ORDER',
  40. 'BY',
  41. 'START',
  42. 'AT',
  43. 'DEFINE',
  44. 'MEASURE',
  45. 'ASC',
  46. 'DESC',
  47. 'IN',
  48. // Datatable types
  49. 'BOOLEAN',
  50. 'DOUBLE',
  51. 'INTEGER',
  52. 'DATETIME',
  53. 'CURRENCY',
  54. 'STRING'
  55. ],
  56. functions: [
  57. // Relational
  58. 'CLOSINGBALANCEMONTH',
  59. 'CLOSINGBALANCEQUARTER',
  60. 'CLOSINGBALANCEYEAR',
  61. 'DATEADD',
  62. 'DATESBETWEEN',
  63. 'DATESINPERIOD',
  64. 'DATESMTD',
  65. 'DATESQTD',
  66. 'DATESYTD',
  67. 'ENDOFMONTH',
  68. 'ENDOFQUARTER',
  69. 'ENDOFYEAR',
  70. 'FIRSTDATE',
  71. 'FIRSTNONBLANK',
  72. 'LASTDATE',
  73. 'LASTNONBLANK',
  74. 'NEXTDAY',
  75. 'NEXTMONTH',
  76. 'NEXTQUARTER',
  77. 'NEXTYEAR',
  78. 'OPENINGBALANCEMONTH',
  79. 'OPENINGBALANCEQUARTER',
  80. 'OPENINGBALANCEYEAR',
  81. 'PARALLELPERIOD',
  82. 'PREVIOUSDAY',
  83. 'PREVIOUSMONTH',
  84. 'PREVIOUSQUARTER',
  85. 'PREVIOUSYEAR',
  86. 'SAMEPERIODLASTYEAR',
  87. 'STARTOFMONTH',
  88. 'STARTOFQUARTER',
  89. 'STARTOFYEAR',
  90. 'TOTALMTD',
  91. 'TOTALQTD',
  92. 'TOTALYTD',
  93. 'ADDCOLUMNS',
  94. 'ADDMISSINGITEMS',
  95. 'ALL',
  96. 'ALLEXCEPT',
  97. 'ALLNOBLANKROW',
  98. 'ALLSELECTED',
  99. 'CALCULATE',
  100. 'CALCULATETABLE',
  101. 'CALENDAR',
  102. 'CALENDARAUTO',
  103. 'CROSSFILTER',
  104. 'CROSSJOIN',
  105. 'CURRENTGROUP',
  106. 'DATATABLE',
  107. 'DETAILROWS',
  108. 'DISTINCT',
  109. 'EARLIER',
  110. 'EARLIEST',
  111. 'EXCEPT',
  112. 'FILTER',
  113. 'FILTERS',
  114. 'GENERATE',
  115. 'GENERATEALL',
  116. 'GROUPBY',
  117. 'IGNORE',
  118. 'INTERSECT',
  119. 'ISONORAFTER',
  120. 'KEEPFILTERS',
  121. 'LOOKUPVALUE',
  122. 'NATURALINNERJOIN',
  123. 'NATURALLEFTOUTERJOIN',
  124. 'RELATED',
  125. 'RELATEDTABLE',
  126. 'ROLLUP',
  127. 'ROLLUPADDISSUBTOTAL',
  128. 'ROLLUPGROUP',
  129. 'ROLLUPISSUBTOTAL',
  130. 'ROW',
  131. 'SAMPLE',
  132. 'SELECTCOLUMNS',
  133. 'SUBSTITUTEWITHINDEX',
  134. 'SUMMARIZE',
  135. 'SUMMARIZECOLUMNS',
  136. 'TOPN',
  137. 'TREATAS',
  138. 'UNION',
  139. 'USERELATIONSHIP',
  140. 'VALUES',
  141. 'SUM',
  142. 'SUMX',
  143. 'PATH',
  144. 'PATHCONTAINS',
  145. 'PATHITEM',
  146. 'PATHITEMREVERSE',
  147. 'PATHLENGTH',
  148. 'AVERAGE',
  149. 'AVERAGEA',
  150. 'AVERAGEX',
  151. 'COUNT',
  152. 'COUNTA',
  153. 'COUNTAX',
  154. 'COUNTBLANK',
  155. 'COUNTROWS',
  156. 'COUNTX',
  157. 'DISTINCTCOUNT',
  158. 'DIVIDE',
  159. 'GEOMEAN',
  160. 'GEOMEANX',
  161. 'MAX',
  162. 'MAXA',
  163. 'MAXX',
  164. 'MEDIAN',
  165. 'MEDIANX',
  166. 'MIN',
  167. 'MINA',
  168. 'MINX',
  169. 'PERCENTILE.EXC',
  170. 'PERCENTILE.INC',
  171. 'PERCENTILEX.EXC',
  172. 'PERCENTILEX.INC',
  173. 'PRODUCT',
  174. 'PRODUCTX',
  175. 'RANK.EQ',
  176. 'RANKX',
  177. 'STDEV.P',
  178. 'STDEV.S',
  179. 'STDEVX.P',
  180. 'STDEVX.S',
  181. 'VAR.P',
  182. 'VAR.S',
  183. 'VARX.P',
  184. 'VARX.S',
  185. 'XIRR',
  186. 'XNPV',
  187. // Scalar
  188. 'DATE',
  189. 'DATEDIFF',
  190. 'DATEVALUE',
  191. 'DAY',
  192. 'EDATE',
  193. 'EOMONTH',
  194. 'HOUR',
  195. 'MINUTE',
  196. 'MONTH',
  197. 'NOW',
  198. 'SECOND',
  199. 'TIME',
  200. 'TIMEVALUE',
  201. 'TODAY',
  202. 'WEEKDAY',
  203. 'WEEKNUM',
  204. 'YEAR',
  205. 'YEARFRAC',
  206. 'CONTAINS',
  207. 'CONTAINSROW',
  208. 'CUSTOMDATA',
  209. 'ERROR',
  210. 'HASONEFILTER',
  211. 'HASONEVALUE',
  212. 'ISBLANK',
  213. 'ISCROSSFILTERED',
  214. 'ISEMPTY',
  215. 'ISERROR',
  216. 'ISEVEN',
  217. 'ISFILTERED',
  218. 'ISLOGICAL',
  219. 'ISNONTEXT',
  220. 'ISNUMBER',
  221. 'ISODD',
  222. 'ISSUBTOTAL',
  223. 'ISTEXT',
  224. 'USERNAME',
  225. 'USERPRINCIPALNAME',
  226. 'AND',
  227. 'FALSE',
  228. 'IF',
  229. 'IFERROR',
  230. 'NOT',
  231. 'OR',
  232. 'SWITCH',
  233. 'TRUE',
  234. 'ABS',
  235. 'ACOS',
  236. 'ACOSH',
  237. 'ACOT',
  238. 'ACOTH',
  239. 'ASIN',
  240. 'ASINH',
  241. 'ATAN',
  242. 'ATANH',
  243. 'BETA.DIST',
  244. 'BETA.INV',
  245. 'CEILING',
  246. 'CHISQ.DIST',
  247. 'CHISQ.DIST.RT',
  248. 'CHISQ.INV',
  249. 'CHISQ.INV.RT',
  250. 'COMBIN',
  251. 'COMBINA',
  252. 'CONFIDENCE.NORM',
  253. 'CONFIDENCE.T',
  254. 'COS',
  255. 'COSH',
  256. 'COT',
  257. 'COTH',
  258. 'CURRENCY',
  259. 'DEGREES',
  260. 'EVEN',
  261. 'EXP',
  262. 'EXPON.DIST',
  263. 'FACT',
  264. 'FLOOR',
  265. 'GCD',
  266. 'INT',
  267. 'ISO.CEILING',
  268. 'LCM',
  269. 'LN',
  270. 'LOG',
  271. 'LOG10',
  272. 'MOD',
  273. 'MROUND',
  274. 'ODD',
  275. 'PERMUT',
  276. 'PI',
  277. 'POISSON.DIST',
  278. 'POWER',
  279. 'QUOTIENT',
  280. 'RADIANS',
  281. 'RAND',
  282. 'RANDBETWEEN',
  283. 'ROUND',
  284. 'ROUNDDOWN',
  285. 'ROUNDUP',
  286. 'SIGN',
  287. 'SIN',
  288. 'SINH',
  289. 'SQRT',
  290. 'SQRTPI',
  291. 'TAN',
  292. 'TANH',
  293. 'TRUNC',
  294. 'BLANK',
  295. 'CONCATENATE',
  296. 'CONCATENATEX',
  297. 'EXACT',
  298. 'FIND',
  299. 'FIXED',
  300. 'FORMAT',
  301. 'LEFT',
  302. 'LEN',
  303. 'LOWER',
  304. 'MID',
  305. 'REPLACE',
  306. 'REPT',
  307. 'RIGHT',
  308. 'SEARCH',
  309. 'SUBSTITUTE',
  310. 'TRIM',
  311. 'UNICHAR',
  312. 'UNICODE',
  313. 'UPPER',
  314. 'VALUE'
  315. ],
  316. tokenizer: {
  317. root: [
  318. { include: '@comments' },
  319. { include: '@whitespace' },
  320. { include: '@numbers' },
  321. { include: '@strings' },
  322. { include: '@complexIdentifiers' },
  323. [/[;,.]/, 'delimiter'],
  324. [/[({})]/, '@brackets'],
  325. [
  326. /[a-z_][a-zA-Z0-9_]*/,
  327. {
  328. cases: {
  329. '@keywords': 'keyword',
  330. '@functions': 'keyword',
  331. '@default': 'identifier'
  332. }
  333. }
  334. ],
  335. [/[<>=!%&+\-*/|~^]/, 'operator']
  336. ],
  337. whitespace: [[/\s+/, 'white']],
  338. comments: [
  339. [/\/\/+.*/, 'comment'],
  340. [/\/\*/, { token: 'comment.quote', next: '@comment' }]
  341. ],
  342. comment: [
  343. [/[^*/]+/, 'comment'],
  344. [/\*\//, { token: 'comment.quote', next: '@pop' }],
  345. [/./, 'comment']
  346. ],
  347. numbers: [
  348. [/0[xX][0-9a-fA-F]*/, 'number'],
  349. [/[$][+-]*\d*(\.\d*)?/, 'number'],
  350. [/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number']
  351. ],
  352. strings: [
  353. [/N"/, { token: 'string', next: '@string' }],
  354. [/"/, { token: 'string', next: '@string' }]
  355. ],
  356. string: [
  357. [/[^"]+/, 'string'],
  358. [/""/, 'string'],
  359. [/"/, { token: 'string', next: '@pop' }]
  360. ],
  361. complexIdentifiers: [
  362. [/\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],
  363. [/'/, { token: 'identifier.quote', next: '@quotedIdentifier' }]
  364. ],
  365. bracketedIdentifier: [
  366. [/[^\]]+/, 'identifier'],
  367. [/]]/, 'identifier'],
  368. [/]/, { token: 'identifier.quote', next: '@pop' }]
  369. ],
  370. quotedIdentifier: [
  371. [/[^']+/, 'identifier'],
  372. [/''/, 'identifier'],
  373. [/'/, { token: 'identifier.quote', next: '@pop' }]
  374. ]
  375. }
  376. };