export default function()

in src/languages/esql.js [24:271]


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'];
  const commands = [
    'DISSECT',
    'DROP',
    'ENRICH',
    'EVAL',
    'EXPLAIN',
    'FORK',
    'FROM',
    'FULL JOIN',
    'GROK',
    'INFO',
    'INLINESTATS',
    'JOIN',
    'KEEP',
    'LEFT JOIN',
    'LEFT',
    'LIMIT',
    'LOOKUP JOIN',
    'LOOKUP',
    'METRICS',
    'MV_EXPAND',
    'RENAME',
    'RIGHT JOIN',
    'RIGHT',
    'ROW',
    'SHOW INFO',
    'SHOW',
    'SORT',
    'STATS',
    'WHERE',
  ];

  const OPERATOR = {
    className: "operator",
    match: /\|\+\-%\*\//
  };

  const STRING = {
    className: 'string',
    begin: /"/,
    end: /"/,
    contains: [ hljs.BACKSLASH_ESCAPE ]
  };

  const functions = [
    'ABS',
    'ACOS',
    'ASIN',
    'ATAN',
    'ATAN2',
    'AVG',
    'BIT_LENGTH',
    'BUCKET',
    'BYTE_LENGTH',
    'CASE',
    'CATEGORIZE',
    'CBRT',
    'CEIL',
    'CIDR_MATCH',
    'COALESCE',
    'CONCAT',
    'COS',
    'COSH',
    'COUNT_DISTINCT',
    'COUNT',
    'DATE_DIFF',
    'DATE_EXTRACT',
    'DATE_FORMAT',
    'DATE_PARSE',
    'DATE_TRUNC',
    'E',
    'ENDS_WITH',
    'EXP',
    'FLOOR',
    'FROM_BASE64',
    'GREATEST',
    'HASH',
    'HYPOT',
    'IP_PREFIX',
    'LEAST',
    'LEFT',
    'LENGTH',
    'LOCATE',
    'LOG',
    'LOG10',
    'LTRIM',
    'MATCH',
    'MAX',
    'MEDIAN_ABSOLUTE_DEVIATION',
    'MEDIAN',
    'MIN',
    'MV_APPEND',
    'MV_AVG',
    'MV_CONCAT',
    'MV_COUNT',
    'MV_DEDUPE',
    'MV_FIRST',
    '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_ZIP',
    'NOW',
    'PERCENTILE',
    'PI',
    'POW',
    'QSTR',
    'REPEAT',
    'REPLACE',
    'REVERSE',
    'RIGHT',
    'ROUND',
    'RTRIM',
    'SIGNUM',
    'SIN',
    'SINH',
    'SPACE',
    'SPLIT',
    'SQRT',
    'ST_CENTROID_AGG',
    'ST_CONTAINS',
    'ST_DISJOINT',
    'ST_DISTANCE',
    'ST_ENVELOPE',
    'ST_EXTENT_AGG',
    'ST_INTERSECTS',
    'ST_WITHIN',
    'ST_X',
    'ST_XMAX',
    'ST_XMIN',
    'ST_Y',
    'ST_YMAX',
    'ST_YMIN',
    'STARTS_WITH',
    'STD_DEV',
    'SUBSTRING',
    'SUM',
    'TAN',
    'TANH',
    'TAU',
    'TO_BASE64',
    'TO_BOOLEAN',
    'TO_CARTESIANPOINT',
    'TO_CARTESIANSHAPE',
    'TO_DATE_NANOS',
    'TO_DATEPERIOD',
    'TO_DATETIME',
    'TO_DEGREES',
    'TO_DOUBLE',
    'TO_GEOPOINT',
    'TO_GEOSHAPE',
    'TO_INTEGER',
    'TO_IP',
    'TO_LONG',
    'TO_LOWER',
    'TO_RADIANS',
    'TO_STRING',
    'TO_TIMEDURATION',
    'TO_UNSIGNED_LONG',
    'TO_UPPER',
    'TO_VERSION',
    'TOP',
    'TRIM',
    'VALUES',
    'WEIGHTED_AVG',
  ];

  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: /[{}]|<\//
  };
}