blob: 7cbca11161add01ff6edc3cf6fc90918fbd25319 [file] [log] [blame]
package com.intellij.tasks.jira.jql;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
%%
%class _JqlLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%ignorecase
%eof{ return;
%eof}
WHITESPACE_CHAR = [\ \t]
DIGIT = [0-9]
HEX_DIGIT = [0-9a-fA-F]
// RESERVED_CHARS = [/+.;?*%\^$#@\[\]{}]
// OPERATORS = [<>=~!()]
// this symbols unused but also disallowed to include in identifier
// UNUSED_OPERATORS = [&|]
VALID_ESCAPE = \\['\"tnr\\\ ] | \\u{HEX_DIGIT}{4}
// JIRA allows to include virtually any symbol in field name except reserved ones
// VALID_CHAR = !({WHITESPACE_CHAR}|{RESERVED_CHARS}|{OPERATORS}|\\)+
VALID_CHAR = [^'\"\n\r\ \t+.,;?*%\^$#@\[\]{}<>=~!()\\|\&]
UNQUOTED_STRING = ({VALID_ESCAPE}|{VALID_CHAR})+
QUOTED_STRING = \"({VALID_ESCAPE}|[^\\\"])*\"
SQUOTED_STRING = '({VALID_ESCAPE}|[^\\'])*'
// only minus sign is allowed as prefix and no floating point numbers
STRING_LITERAL = {UNQUOTED_STRING} | {QUOTED_STRING} | {SQUOTED_STRING}
NUMBER_LITERAL = -?{DIGIT}+
CUSTOM_FIELD = cf\[{DIGIT}+\]
%%
"and" { return JqlTokenTypes.AND_KEYWORD; }
"or" { return JqlTokenTypes.OR_KEYWORD; }
"not" { return JqlTokenTypes.NOT_KEYWORD; }
"empty" { return JqlTokenTypes.EMPTY_KEYWORD; }
"null" { return JqlTokenTypes.NULL_KEYWORD; }
"order" { return JqlTokenTypes.ORDER_KEYWORD; }
"by" { return JqlTokenTypes.BY_KEYWORD; }
"was" { return JqlTokenTypes.WAS_KEYWORD; }
"changed" { return JqlTokenTypes.CHANGED_KEYWORD; }
"is" { return JqlTokenTypes.IS_KEYWORD; }
"in" { return JqlTokenTypes.IN_KEYWORD; }
"asc" { return JqlTokenTypes.ASC_KEYWORD; }
"desc" { return JqlTokenTypes.DESC_KEYWORD; }
"changed" { return JqlTokenTypes.CHANGED_KEYWORD; }
"from" { return JqlTokenTypes.FROM_KEYWORD; }
"to" { return JqlTokenTypes.TO_KEYWORD; }
"on" { return JqlTokenTypes.ON_KEYWORD; }
"during" { return JqlTokenTypes.DURING_KEYWORD; }
"before" { return JqlTokenTypes.BEFORE_KEYWORD; }
"after" { return JqlTokenTypes.AFTER_KEYWORD; }
"=" { return JqlTokenTypes.EQ; }
"!=" { return JqlTokenTypes.NE; }
"<" { return JqlTokenTypes.LT; }
">" { return JqlTokenTypes.GT; }
"<=" { return JqlTokenTypes.LE; }
">=" { return JqlTokenTypes.GE; }
"~" { return JqlTokenTypes.CONTAINS; }
"!~" { return JqlTokenTypes.NOT_CONTAINS; }
"(" { return JqlTokenTypes.LPAR; }
")" { return JqlTokenTypes.RPAR; }
"&&" { return JqlTokenTypes.AMP_AMP; }
"&" { return JqlTokenTypes.AMP; }
"||" { return JqlTokenTypes.PIPE_PIPE; }
"|" { return JqlTokenTypes.PIPE; }
"!" { return JqlTokenTypes.BANG; }
"," { return JqlTokenTypes.COMMA; }
{CUSTOM_FIELD} { return JqlTokenTypes.CUSTOM_FIELD; }
{NUMBER_LITERAL} { return JqlTokenTypes.NUMBER_LITERAL; }
{STRING_LITERAL} { return JqlTokenTypes.STRING_LITERAL; }
{WHITESPACE_CHAR}+ { return JqlTokenTypes.WHITE_SPACE; }
[^] { return JqlTokenTypes.BAD_CHARACTER; }