UNPKG

@elastic/highlightjs-esql

Version:

Highlight.js language syntax definitions for ES|QL

395 lines (379 loc) 6.43 kB
/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the MIT license (the "License"); you may * not use this file except in compliance with the License. */ /* Language: ES|QL Description: language definition for Elastic ES|QL language Website: https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html Category: enterprise */ const source = (re) => { if (!re) return null; if (typeof re === "string") return re; return re.source; }; const concat = (...args) => { const joined = args.map((x) => source(x)).join(""); return joined; }; const either = (...args) => { const joined = "(" + args.map((x) => source(x)).join("|") + ")"; return joined; }; export default function (hljs) { const literals = ["TRUE", "FALSE", "NULL"]; const binaryNamedOperators = ["AND", "OR", "IS", "IN", "AS", "LIKE", "RLIKE"]; const otherNamedOperators = ["ASC", "DESC", "FIRST", "LAST", "NULLS", "NOT"]; const keywords = ["BY", "ON", "WITH", "METADATA", "SCORE", "KEY", "GROUP"]; const commands = [ "CHANGE_POINT", "COMPLETION", "DISSECT", "DROP", "ENRICH", "EVAL", "EXPLAIN", "FORK", "FROM", "FULL JOIN", "FUSE", "GROK", "INFO", "INLINESTATS", "JOIN", "KEEP", "LEFT JOIN", "LEFT", "LIMIT", "LOOKUP JOIN", "LOOKUP", "METRICS", "METRICS_INFO", "MMR", "MV_EXPAND", "RENAME", "OPTIONS", "PROMQL", "REGISTERED_DOMAIN", "RERANK", "RIGHT JOIN", "RIGHT", "ROW", "SAMPLE", "SET", "SHOW INFO", "SHOW", "SORT", "STATS", "TIMESERIES", "TS_INFO", "TS", "URI_PARTS", "USER_AGENT", "WHERE", ]; const OPERATOR = { className: "operator", match: /\|\+-%\*\//, }; const STRING = { className: "string", begin: /"/, end: /"/, contains: [hljs.BACKSLASH_ESCAPE], }; const functions = [ "ABS", "ABSENT", "ABSENT_OVER_TIME", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATAN2", "ATANH", "AVG", "AVG_OVER_TIME", "BIT_LENGTH", "BUCKET", "BYTE_LENGTH", "CASE", "CATEGORIZE", "CBRT", "CEIL", "CHUNK", "CIDR_MATCH", "CLAMP", "CLAMP_MAX", "CLAMP_MIN", "COALESCE", "CONCAT", "CONTAINS", "COPY_SIGN", "COS", "COSH", "COUNT", "COUNT_DISTINCT", "COUNT_DISTINCT_OVER_TIME", "COUNT_OVER_TIME", "DATE_DIFF", "DATE_EXTRACT", "DATE_FORMAT", "DATE_PARSE", "DATE_TRUNC", "DAY_NAME", "DECAY", "DELTA", "DERIV", "E", "ENDS_WITH", "EXP", "FIRST", "FIRST_OVER_TIME", "FLOOR", "FROM_BASE64", "GREATEST", "HASH", "HYPOT", "IDELTA", "INCREASE", "IP_PREFIX", "IRATE", "JSON_EXTRACT", "KNN", "KQL", "LAST", "LAST_OVER_TIME", "LEAST", "LEFT", "LENGTH", "LOCATE", "LOG", "LOG10", "LTRIM", "MATCH", "MATCH_PHRASE", "MAX", "MAX_OVER_TIME", "MD5", "MEDIAN_ABSOLUTE_DEVIATION", "MEDIAN", "MIN", "MIN_OVER_TIME", "MONTH_NAME", "MV_APPEND", "MV_AVG", "MV_CONCAT", "MV_CONTAINS", "MV_COUNT", "MV_DEDUPE", "MV_FIRST", "MV_INTERSECTION", "MV_INTERSECTS", "MV_LAST", "MV_MAX", "MV_MEDIAN_ABSOLUTE_DEVIATION", "MV_MEDIAN", "MV_MIN", "MV_PERCENTILE", "MV_PSERIES_WEIGHTED_SUM", "MV_SLICE", "MV_SORT", "MV_SUM", "MV_UNION", "MV_ZIP", "NETWORK_DIRECTION", "NOW", "PERCENTILE", "PERCENTILE_OVER_TIME", "PI", "POW", "PRESENT", "PRESENT_OVER_TIME", "QSTR", "RATE", "REPEAT", "REPLACE", "REVERSE", "RIGHT", "ROUND", "ROUND_TO", "RTRIM", "SAMPLE", "SCALB", "SCORE", "SHA1", "SHA256", "SIGNUM", "SIN", "SINH", "SPACE", "SPARKLINE", "SPLIT", "SQRT", "ST_BUFFER", "ST_CENTROID_AGG", "ST_CONTAINS", "ST_DIMENSION", "ST_DISJOINT", "ST_DISTANCE", "ST_ENVELOPE", "ST_EXTENT_AGG", "ST_GEOHASH", "ST_GEOHEX", "ST_GEOMETRYTYPE", "ST_GEOTILE", "ST_INTERSECTS", "ST_ISEMPTY", "ST_NPOINTS", "ST_SIMPLIFY", "ST_SIMPLIFYPRESERVETOPOLOGY", "ST_WITHIN", "ST_X", "ST_XMAX", "ST_XMIN", "ST_Y", "ST_YMAX", "ST_YMIN", "STARTS_WITH", "STD_DEV", "STDDEV_OVER_TIME", "SUBSTRING", "SUM", "SUM_OVER_TIME", "TAN", "TANH", "TAU", "TBUCKET", "TEXT_EMBEDDING", "TO_AGGREGATE_METRIC_DOUBLE", "TO_BASE64", "TO_BOOLEAN", "TO_CARTESIANPOINT", "TO_CARTESIANSHAPE", "TO_DATE_NANOS", "TO_DATEPERIOD", "TO_DATETIME", "TO_DEGREES", "TO_DENSE_VECTOR", "TO_DOUBLE", "TO_EXPONENTIAL_HISTOGRAM", "TO_GEOHASH", "TO_GEOHEX", "TO_GEOPOINT", "TO_GEOSHAPE", "TO_GEOTILE", "TO_INTEGER", "TO_IP", "TO_LONG", "TO_LOWER", "TO_RADIANS", "TO_STRING", "TO_TDIGEST", "TO_TIMEDURATION", "TO_UNSIGNED_LONG", "TO_UPPER", "TO_VERSION", "TOP", "TOP_SNIPPETS", "TRANGE", "TRIM", "URL_DECODE", "URL_ENCODE", "URL_ENCODE_COMPONENT", "V_COSINE", "V_DOT_PRODUCT", "V_HAMMING", "V_L1_NORM", "V_L2_NORM", "V_MAGNITUDE", "VALUES", "VARIANCE", "VARIANCE_OVER_TIME", "WEIGHTED_AVG", "ADD", "CAST", "DIV", "EQUALS", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "IN", "IS_NOT_NULL", "IS_NULL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "LIKE", "MATCH_OPERATOR", "MOD", "MUL", "NEG", "NOT_IN", "NOT_LIKE", "NOT_RLIKE", "NOT_EQUALS", "RLIKE", "SUB", ]; const FUNCTION_CALL = { className: "function", begin: concat(/\b/, either(...functions), /\s*\(/), keywords: { keyword: functions, }, }; const DOCTAGS = hljs.COMMENT( "/\\*", // begin "\\*/", // end { contains: [ { scope: "doctag", begin: "@\\w+", }, ], }, ); const PARAM = { className: "variable", begin: "\\?(\\w+)?", }; const CAST = { className: "type", begin: "::\\w+", }; const PUNCTUATION = { scope: "punctuation", match: /[,;{}[\]()]/, }; return { name: "esql", aliases: ["es|ql"], case_insensitive: true, keywords: { $pattern: /\b[\w.]+\b/, keyword: [...keywords, ...commands], built_in: [...binaryNamedOperators, ...otherNamedOperators], literal: literals, }, contains: [ DOCTAGS, hljs.C_BLOCK_COMMENT_MODE, hljs.C_LINE_COMMENT_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, OPERATOR, FUNCTION_CALL, STRING, PARAM, CAST, PUNCTUATION, ], illegal: /[{}]|<\//, }; }