sparksql_highlight_rules.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // Licensed to Cloudera, Inc. under one
  2. // or more contributor license agreements. See the NOTICE file
  3. // distributed with this work for additional information
  4. // regarding copyright ownership. Cloudera, Inc. licenses this file
  5. // to you under the Apache License, Version 2.0 (the
  6. // "License"); you may not use this file except in compliance
  7. // with the License. You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. define((require, exports, module) => {
  17. 'use strict';
  18. const oop = require('../lib/oop');
  19. const TextHighlightRules = require('./text_highlight_rules').TextHighlightRules;
  20. const SparksqlHighlightRules = function () {
  21. // regexp must not have capturing parentheses. Use (?:) instead.
  22. // regexps are ordered -> the first match is used
  23. const keywords =
  24. 'ADD|AFTER|ALL|ALTER|ANALYZE|AND|ANTI|ANY|ARCHIVE|AS|ASC|AT|AUTHORIZATION|BETWEEN|BOTH|BUCKET|BUCKETS|BY|CACHE|' +
  25. 'CASCADE|CASE|CAST|CATALOG|CATALOGS|CHANGE|CHECK|CLEAR|CLUSTER|CLUSTERED|CODEGEN|COLLATE|COLLECTION|COLUMN|' +
  26. 'COLUMNS|COMMENT|COMMIT|COMPACT|COMPACTIONS|COMPUTE|CONCATENATE|CONSTRAINT|COST|CREATE|CROSS|CUBE|CURRENT|' +
  27. 'CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|DATA|DATABASE|DATABASES|DATEADD|DATEDIFF|DAYOFYEAR|' +
  28. 'DBPROPERTIES|DEFINED|DELETE|DELIMITED|DESC|DESCRIBE|DFS|DIRECTORIES|DIRECTORY|DISTINCT|DISTRIBUTE|DIV|DROP|' +
  29. 'ELSE|END|ESCAPE|ESCAPED|EXCEPT|EXCHANGE|EXISTS|EXPLAIN|EXPORT|EXTENDED|EXTERNAL|EXTRACT|FETCH|FIELDS|' +
  30. 'FILEFORMAT|FILTER|FIRST|FOLLOWING|FOR|FOREIGN|FORMAT|FORMATTED|FROM|FULL|FUNCTION|FUNCTIONS|GLOBAL|GRANT|' +
  31. 'GROUP|GROUPING|HAVING|IF|IGNORE|ILIKE|IMPORT|IN|INDEX|INDEXES|INNER|INPATH|INPUTFORMAT|INSERT|INTERSECT|' +
  32. 'INTERVAL|INTO|IS|ITEMS|JOIN|KEYS|LAST|LATERAL|LAZY|LEADING|LEFT|LIKE|LIMIT|LINES|LIST|LOAD|LOCAL|LOCATION|' +
  33. 'LOCK|LOCKS|LOGICAL|MACRO|MATCHED|MERGE|MICROSECOND|MILLISECOND|MINUS|MSCK|NAMESPACE|NAMESPACES|NATURAL|NO|NOT|' +
  34. 'NULLS|OF|ON|ONLY|OPTION|OPTIONS|OR|ORDER|OUT|OUTER|OUTPUTFORMAT|OVER|OVERLAPS|OVERLAY|OVERWRITE|PARTITION|' +
  35. 'PARTITIONED|PARTITIONS|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PIVOT|PLACING|POSITION|PRECEDING|PRIMARY|' +
  36. 'PRINCIPALS|PROPERTIES|PURGE|QUARTER|QUERY|RANGE|RECORDREADER|RECORDWRITER|RECOVER|REDUCE|REFERENCES|REFRESH|' +
  37. 'REGEXP|RENAME|REPAIR|REPEATABLE|REPLACE|RESET|RESPECT|RESTRICT|REVOKE|RIGHT|RLIKE|ROLE|ROLES|ROLLBACK|ROLLUP|' +
  38. 'ROW|ROWS|SCHEMA|SCHEMAS|SELECT|SEMI|SEPARATED|SERDE|SERDEPROPERTIES|SESSION_USER|SET|SETS|SHOW|SKEWED|SOME|' +
  39. 'SORT|SORTED|START|STATISTICS|STORED|STRATIFY|SUBSTR|SUBSTRING|SYNC|SYSTEM_TIME|SYSTEM_VERSION|TABLE|TABLES|' +
  40. 'TABLESAMPLE|TBLPROPERTIES|TEMP|TEMPORARY|TERMINATED|THEN|TIME|TIMESTAMPADD|TIMESTAMPDIFF|TO|TOUCH|TRAILING|' +
  41. 'TRANSACTION|TRANSACTIONS|TRANSFORM|TRIM|TRUNCATE|TRY_CAST|TYPE|UNARCHIVE|UNBOUNDED|UNCACHE|UNION|UNIQUE|' +
  42. 'UNKNOWN|UNLOCK|UNSET|UPDATE|USE|USER|USING|VALUES|VERSION|VIEW|VIEWS|WEEK|WHEN|WHERE|WINDOW|WITH|WITHIN|ZONE';
  43. const builtinConstants =
  44. 'AVRO|DAY|FALSE|HOUR|KUDU|MINUTE|MONTH|NULL|ORC|PARQUET|RCFILE|SECOND|SEQUENCEFILE|TEXTFILE|TRUE|YEAR';
  45. const builtinFunctions =
  46. 'ABS|ACOS|ACOSH|ADD_MONTHS|AES_DECRYPT|AES_ENCRYPT|ANY|APPROX_COUNT_DISTINCT|APPROX_PERCENTILE|ARRAY|ARRAY_AGG|' +
  47. 'ARRAY_CONTAINS|ARRAY_DISTINCT|ARRAY_EXCEPT|ARRAY_INTERSECT|ARRAY_JOIN|ARRAY_MAX|ARRAY_MIN|ARRAY_POSITION|' +
  48. 'ARRAY_REMOVE|ARRAY_REPEAT|ARRAY_UNION|ARRAYS_OVERLAP|ARRAYS_ZIP|ASCII|ASIN|ASINH|ASSERT_TRUE|ATAN|ATAN2|ATANH|' +
  49. 'AVG|BASE64|BIGINT|BIN|BINARY|BIT_AND|BIT_COUNT|BIT_GET|BIT_LENGTH|BIT_OR|BIT_XOR|BOOL_AND|BOOL_OR|BOOLEAN|' +
  50. 'BROUND|BTRIM|CAST|CBRT|CEIL|CEILING|CHAR|CHAR_LENGTH|CHARACTER_LENGTH|CHR|COALESCE|COLLECT_LIST|COLLECT_SET|' +
  51. 'CONCAT_WS|CONTAINS|CONV|CORR|COS|COSH|COT|COUNT|COUNT_MIN_SKETCH|COVAR_POP|COVAR_SAMP|CSC|CUME_DIST|' +
  52. 'CURRENT_CATALOG|CURRENT_DATABASE|CURRENT_DATE|CURRENT_TIMESTAMP|CURRENT_TIMEZONE|CURRENT_USER|DATE|DATE_ADD|' +
  53. 'DATE_FORMAT|DATE_FROM_UNIX_DATE|DATE_PART|DATE_SUB|DATE_TRUNC|DATEDIFF|DAY|DAYOFMONTH|DAYOFWEEK|DAYOFYEAR|' +
  54. 'DECIMAL|DECODE|DEGREES|DENSE_RANK|DOUBLE|E|ELEMENT_AT|ELT|ENCODE|ENDSWITH|EVERY|EXP|EXPLODE|EXPLODE_OUTER|' +
  55. 'EXPM1|EXPR1|EXTRACT|FACTORIAL|FIND_IN_SET|FIRST|FIRST_VALUE|FLATTEN|FLOAT|FLOOR|FORMAT_NUMBER|FORMAT_STRING|' +
  56. 'FROM_JSON|FROM_UNIXTIME|FROM_UTC_TIMESTAMP|GET_JSON_OBJECT|GETBIT|GREATEST|GROUPING|GROUPING_ID|HEX|' +
  57. 'HISTOGRAM_NUMERIC|HOUR|HYPOT|IF|IFNULL|INITCAP|INLINE|INLINE_OUTER|INPUT_FILE_BLOCK_LENGTH|' +
  58. 'INPUT_FILE_BLOCK_START|INPUT_FILE_NAME|INSTR|INT|ISNAN|ISNOTNULL|ISNULL|JAVA_METHOD|JSON_ARRAY_LENGTH|' +
  59. 'JSON_OBJECT_KEYS|JSON_TUPLE|KURTOSIS|LAG|LAST|LAST_DAY|LAST_VALUE|LCASE|LEAD|LEAST|LEFT|LENGTH|LEVENSHTEIN|LN|' +
  60. 'LOCATE|LOG|LOG10|LOG1P|LOG2|LOWER|LPAD|LTRIM|MAKE_DATE|MAKE_DT_INTERVAL|MAKE_INTERVAL|MAKE_TIMESTAMP|' +
  61. 'MAKE_YM_INTERVAL|MAP|MAP_CONCAT|MAP_CONTAINS_KEY|MAP_ENTRIES|MAP_FROM_ARRAYS|MAP_FROM_ENTRIES|MAP_KEYS|' +
  62. 'MAP_VALUES|MAX|MAX_BY|MEAN|MIN|MIN_BY|MINUTE|MONOTONICALLY_INCREASING_ID|MONTH|MONTHS_BETWEEN|NANVL|NEGATIVE|' +
  63. 'NEXT_DAY|NOW|NTH_VALUE|NTILE|NULLIF|NVL|NVL2|OCTET_LENGTH|OVERLAY|PARSE_URL|PERCENT_RANK|PERCENTILE|' +
  64. 'PERCENTILE_APPROX|PI|PMOD|POSEXPLODE|POSEXPLODE_OUTER|POSITION|POSITIVE|POW|POWER|PRINTF|QUARTER|RADIANS|RAND|' +
  65. 'RANDN|RANDOM|RANK|REFLECT|REGEXP|REGEXP_EXTRACT|REGEXP_EXTRACT_ALL|REGEXP_LIKE|REGEXP_REPLACE|REGR_AVGX|' +
  66. 'REGR_AVGY|REGR_COUNT|REGR_R2|REPEAT|REPLACE|RIGHT|RINT|RLIKE|ROUND|ROW_NUMBER|RPAD|RTRIM|SCHEMA_OF_JSON|SEC|' +
  67. 'SECOND|SENTENCES|SEQUENCE|SESSION_WINDOW|SHIFTLEFT|SHIFTRIGHT|SHIFTRIGHTUNSIGNED|SHUFFLE|SIGN|SIGNUM|SIN|SINH|' +
  68. 'SKEWNESS|SLICE|SMALLINT|SOME|SORT_ARRAY|SOUNDEX|SPACE|SPARK_PARTITION_ID|SPLIT|SPLIT_PART|SQRT|STACK|' +
  69. 'STARTSWITH|STD|STDDEV|STDDEV_POP|STDDEV_SAMP|STR_TO_MAP|STRING|SUBSTR|SUBSTRING|SUBSTRING_INDEX|SUM|TAN|TANH|' +
  70. 'TIMESTAMP|TIMESTAMP_MICROS|TIMESTAMP_MILLIS|TIMESTAMP_SECONDS|TINYINT|TO_BINARY|TO_DATE|TO_JSON|TO_NUMBER|' +
  71. 'TO_TIMESTAMP|TO_UNIX_TIMESTAMP|TO_UTC_TIMESTAMP|TRANSLATE|TRIM|TRUNC|TRY_ADD|TRY_AVG|TRY_DIVIDE|' +
  72. 'TRY_ELEMENT_AT|TRY_MULTIPLY|TRY_SUBTRACT|TRY_SUM|TRY_TO_BINARY|TRY_TO_NUMBER|TYPEOF|UCASE|UNBASE64|UNHEX|' +
  73. 'UNIX_DATE|UNIX_MICROS|UNIX_MILLIS|UNIX_SECONDS|UNIX_TIMESTAMP|UPPER|UUID|VAR_POP|VAR_SAMP|VARIANCE|VERSION|' +
  74. 'WEEKDAY|WEEKOFYEAR|WIDTH_BUCKET|WINDOW|YEAR';
  75. const dataTypes =
  76. 'ARRAY|BIGINT|BINARY|BOOLEAN|BYTE|DATE|DEC|DECIMAL|DOUBLE|FLOAT|INT|INTEGER|LONG|MAP|NUMERIC|REAL|SHORT|' +
  77. 'SMALLINT|STRING|STRUCT|TIMESTAMP|TINYINT';
  78. const keywordMapper = this.createKeywordMapper(
  79. {
  80. 'support.function': builtinFunctions,
  81. keyword: keywords,
  82. 'constant.language': builtinConstants,
  83. 'storage.type': dataTypes
  84. },
  85. 'identifier',
  86. true
  87. );
  88. this.$rules = {
  89. start: [
  90. {
  91. token: 'comment',
  92. regex: '--.*$'
  93. },
  94. {
  95. token: 'comment',
  96. start: '/\\*',
  97. end: '\\*/'
  98. },
  99. {
  100. token: 'string', // " string
  101. regex: '".*?"'
  102. },
  103. {
  104. token: 'string', // ' string
  105. regex: "'.*?'"
  106. },
  107. {
  108. token: 'constant.numeric', // float
  109. regex: '[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b'
  110. },
  111. {
  112. token: keywordMapper,
  113. regex: '[a-zA-Z_$][a-zA-Z0-9_$]*\\b'
  114. },
  115. {
  116. token: 'keyword.operator',
  117. regex: '\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|='
  118. },
  119. {
  120. token: 'paren.lparen',
  121. regex: '[\\(]'
  122. },
  123. {
  124. token: 'paren.rparen',
  125. regex: '[\\)]'
  126. },
  127. {
  128. token: 'text',
  129. regex: '\\s+'
  130. }
  131. ]
  132. };
  133. this.normalizeRules();
  134. };
  135. SparksqlHighlightRules.metaData = {
  136. fileTypes: ['hql', 'q', 'ql'],
  137. name: 'sparksql',
  138. scopeName: 'source.sparksql'
  139. };
  140. oop.inherits(SparksqlHighlightRules, TextHighlightRules);
  141. exports.SparksqlHighlightRules = SparksqlHighlightRules;
  142. });