hive_highlight_rules.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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(function (require, exports, module) {
  17. "use strict";
  18. var oop = require("../lib/oop");
  19. var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
  20. var HiveHighlightRules = function () {
  21. // regexp must not have capturing parentheses. Use (?:) instead.
  22. // regexps are ordered -> the first match is used
  23. var keywords =
  24. 'ABORT|ADD|ADMIN|AFTER|ALL|ALTER|ANALYZE|AND|ARCHIVE|AS|ASC|AST|AUTHORIZATION|BETWEEN|BUCKET|BUCKETS|BY|' +
  25. 'CACHE|CASCADE|CASE|CBO|CHANGE|CHECK|CLUSTER|CLUSTERED|COLLECTION|COLUMN|COLUMNS|COMMENT|COMPACT|COMPACTIONS|' +
  26. 'COMPUTE|CONCATENATE|CONF|CONNECTOR|CONNECTORS|CONSTRAINT|COST|CREATE|CROSS|CUBE|CURRENT|DATA|DATABASE|' +
  27. 'DATABASES|DBPROPERTIES|DCPROPERTIES|DEFAULT|DEFERRED|DEFINED|DELETE|DEPENDENCY|DESC|DESCRIBE|DETAIL|DIRECTORY|' +
  28. 'DISABLE|DISTINCT|DISTRIBUTE|DISTRIBUTED|DIV|DROP|ELSE|ENABLE|END|ESCAPED|EXCHANGE|EXISTS|EXPLAIN|EXPORT|' +
  29. 'EXPRESSION|EXTENDED|EXTERNAL|FIELDS|FILE|FILEFORMAT|FIRST|FOLLOWING|FOR|FOREIGN|FORMAT|FORMATTED|FROM|FULL|' +
  30. 'FUNCTION|FUNCTIONS|GRANT|GROUP|GROUPING|HAVING|IDXPROPERTIES|IF|IMPORT|IN|INDEX|INDEXES|INNER|INPATH|' +
  31. 'INPUTFORMAT|INSERT|INTO|IS|ITEMS|JAR|JOIN|JOINCOST|KEY|KEYS|LAST|LATERAL|LEFT|LIKE|LIMIT|LINES|LITERAL|LOAD|' +
  32. 'LOCAL|LOCATION|LOCK|LOCKS|MACRO|MATCHED|MATERIALIZED|MERGE|METADATA|MSCK|NO_DROP|NONE|NORELY|NOSCAN|NOT|' +
  33. 'NOVALIDATE|NULLS|OF|OFFLINE|ON|ONLY|OPERATOR|OPTION|OR|ORDER|OUT|OUTER|OUTPUTFORMAT|OVER|OVERWRITE|OWNER|' +
  34. 'PARTITION|PARTITIONED|PARTITIONS|PERCENT|PRECEDING|PRIMARY|PRIVILEGES|PURGE|QUARTER|RANGE|REBUILD|RECOVER|' +
  35. 'REFERENCES|REGEXP|RELOAD|RELY|REMOTE|RENAME|REPAIR|REPLACE|REPLICATION|RESTRICT|REVOKE|REWRITE|RIGHT|RLIKE|' +
  36. 'ROLE|ROLES|ROLLUP|ROW|ROWS|SCHEMA|SCHEMAS|SELECT|SEMI|SERDEPROPERTIES|SET|SETS|SHOW|SHOW_DATABASE|SKEWED|SORT|' +
  37. 'SORTED|SPEC|STATISTICS|STORED|SUMMARY|SYNC|TABLE|TABLES|TABLESAMPLE|TBLPROPERTIES|TEMPORARY|TERMINATED|THEN|' +
  38. 'TO|TOUCH|TRANSACTIONAL|TRANSACTIONS|TRUNCATE|TYPE|UNARCHIVE|UNBOUNDED|UNION|UNIQUE|UPDATE|URL|USE|USER|USING|' +
  39. 'VALUES|VECTORIZATION|VIEW|VIEWS|WAIT|WHEN|WHERE|WINDOW|WITH';
  40. var builtinConstants =
  41. 'AVRO|DELIMITED|FALSE|ICEBERG|JSONFILE|NULL|ORC|PARQUET|RCFILE|SEQUENCEFILE|SERDE|TEXTFILE|TRUE';
  42. var builtinFunctions =
  43. 'ABS|ACOS|ADD_MONTHS|AES_DECRYPT|AES_ENCRYPT|ARRAY|ARRAY_CONTAINS|ASCII|ASIN|ATAN|AVG|BASE64|BIN|BINARY|' +
  44. 'BROUND|CAST|CBRT|CEIL|CEILING|COALESCE|COLLECT_LIST|COLLECT_SET|CONCAT|CONCAT_WS|CONTEXT_NGRAMS|CONV|CORR|' +
  45. 'COS|COVAR_POP|COVAR_SAMP|COUNT|CRC32|CREATE_UNION|CUME_DIST|CURRENT_DATABASE|CURRENT_DATE|' +
  46. 'CURRENT_TIMESTAMP|CURRENT_USER|DATE_ADD|DATE_FORMAT|DATE_SUB|DATEDIFF|DAY|DAYOFMONTH|DAYOFWEEK|DECODE|' +
  47. 'DEGREES|DENSE_RANK|E|ENCODE|EXP|EXPLODE|FACTORIAL|FIND_IN_SET|FIRST_VALUE|FLOOR|FORMAT_NUMBER|FROM_UNIXTIME|' +
  48. 'FROM_UTC_TIMESTAMP|GET_JSON_OBJECT|GREATEST|HASH|HEX|HISTOGRAM_NUMERIC|HOUR|IF|IN_FILE|INLINE|INSTR|INITCAP|' +
  49. 'ISNOTNULL|ISNULL|JAVA_METHOD|JSON_TUPLE|LAG|LAST_DAY|LAST_VALUE|LEAD|LEAST|LENGTH|LEVENSHTEIN|LCASE|LN|' +
  50. 'LOCATE|LOG|LOG10|LOG2|LOWER|LPAD|LTRIM|MAP|MAP_KEYS|MAP_VALUES|MAX|MD5|MIN|MINUTE|MONTH|MONTHS_BETWEEN|' +
  51. 'NAMED_STRUCT|NEGATIVE|NEXT_DAY|NGRAMS|NTILE|NVL|PARSE_URL|PARSE_URL_TUPLE|PERCENT_RANK|PERCENTILE|' +
  52. 'PERCENTILE_APPROX|PI|PMOD|POSEXPLODE|POSITIVE|POW|POWER|PRINTF|QUARTER|RADIANS|RAND|RANK|REFLECT|' +
  53. 'REGEXP_EXTRACT|REGEXP_REPLACE|REPEAT|REVERSE|ROUND|ROW_NUMBER|RPAD|RTRIM|SECOND|SHA|SHA1|SHA2|SHIFTLEFT|' +
  54. 'SHIFTRIGHT|SHIFTRIGHTUNSIGNED|SIGN|SIN|SIZE|SORT_ARRAY|SQRT|STACK|STDDEV_POP|STDDEV_SAMP|STRUCT|SENTENCES|' +
  55. 'SOUNDEX|SPACE|SPLIT|STR_TO_MAP|SUBSTR|SUBSTRING|SUBSTRING_INDEX|SUM|TAN|TO_DATE|TO_UTC_TIMESTAMP|TRANSLATE|' +
  56. 'TRIM|TRUNC|UCASE|UNBASE64|UNHEX|UNIX_TIMESTAMP|UPPER|VAR_POP|VAR_SAMP|VARIANCE|WEEK|WEEKOFYEAR|XPATH|' +
  57. 'XPATH_BOOLEAN|XPATH_DOUBLE|XPATH_FLOAT|XPATH_INT|XPATH_LONG|XPATH_NUMBER|XPATH_SHORT|XPATH_STRING|YEAR';
  58. var dataTypes =
  59. 'ARRAY|BIGINT|BINARY|BOOLEAN|CHAR|DATE|DECIMAL|DOUBLE|FLOAT|INT|INTEGER|MAP|PRECISION|SMALLINT|STRING|STRUCT|' +
  60. 'TIMESTAMP|TINYINT|UNIONTYPE|VARCHAR';
  61. var keywordMapper = this.createKeywordMapper({
  62. "support.function": builtinFunctions,
  63. "keyword": keywords,
  64. "constant.language": builtinConstants,
  65. "storage.type": dataTypes
  66. }, "identifier", true);
  67. this.$rules = {
  68. start: [
  69. {
  70. token : "comment",
  71. regex : "--.*$"
  72. }, {
  73. token : "comment",
  74. start : "/\\*",
  75. end : "\\*/"
  76. }, {
  77. token : "string", // " string
  78. regex : '".*?"'
  79. }, {
  80. token : "string", // ' string
  81. regex : "'.*?'"
  82. }, {
  83. token : "constant.numeric", // float
  84. regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
  85. }, {
  86. token : keywordMapper,
  87. regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
  88. }, {
  89. token : "keyword.operator",
  90. regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
  91. }, {
  92. token : "paren.lparen",
  93. regex : "[\\(]"
  94. }, {
  95. token : "paren.rparen",
  96. regex : "[\\)]"
  97. }, {
  98. token : "text",
  99. regex : "\\s+"
  100. }
  101. ]
  102. };
  103. this.normalizeRules();
  104. };
  105. HiveHighlightRules.metaData = {
  106. fileTypes: ["hql", "q", "ql"],
  107. name: "Hive",
  108. scopeName: "source.hive"
  109. };
  110. oop.inherits(HiveHighlightRules, TextHighlightRules);
  111. exports.HiveHighlightRules = HiveHighlightRules;
  112. });