@aurahelper/languages
Version:
Language Libraries to work with XML, Aura, Apex... files. tokenizers, parsers, system classes and much more
809 lines • 86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ApexTokenizer = void 0;
var core_1 = require("@aurahelper/core");
var system_1 = require("../system");
var Utils = core_1.CoreUtils.Utils;
var Validator = core_1.CoreUtils.Validator;
var StrUtils = core_1.CoreUtils.StrUtils;
var symbolTokens = {
">>>=": core_1.ApexTokenTypes.OPERATOR.BITWISE.UNSIGNED_RIGHT_ASSIGN,
">>=": core_1.ApexTokenTypes.OPERATOR.BITWISE.SIGNED_RIGTH_ASSIGN,
"<<=": core_1.ApexTokenTypes.OPERATOR.BITWISE.LEFT_ASSIGN,
">>>": core_1.ApexTokenTypes.OPERATOR.BITWISE.UNSIGNED_RIGHT,
"!==": core_1.ApexTokenTypes.OPERATOR.LOGICAL.INEQUALITY_EXACT,
"===": core_1.ApexTokenTypes.OPERATOR.LOGICAL.EQUALITY_EXACT,
">>": core_1.ApexTokenTypes.OPERATOR.BITWISE.SIGNED_RIGHT,
"<<": core_1.ApexTokenTypes.OPERATOR.BITWISE.SIGNED_LEFT,
"^=": core_1.ApexTokenTypes.OPERATOR.BITWISE.EXCLUSIVE_OR_ASSIGN,
"--": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.DECREMENT,
"++": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.INCREMENT,
"!=": core_1.ApexTokenTypes.OPERATOR.LOGICAL.INEQUALITY,
"<>": core_1.ApexTokenTypes.OPERATOR.LOGICAL.INEQUALITY,
"==": core_1.ApexTokenTypes.OPERATOR.LOGICAL.EQUALITY,
"||": core_1.ApexTokenTypes.OPERATOR.LOGICAL.OR,
"|=": core_1.ApexTokenTypes.OPERATOR.LOGICAL.OR_ASSIGN,
"&&": core_1.ApexTokenTypes.OPERATOR.LOGICAL.AND,
"&=": core_1.ApexTokenTypes.OPERATOR.LOGICAL.AND_ASSIGN,
">=": core_1.ApexTokenTypes.OPERATOR.LOGICAL.GREATER_THAN_EQUALS,
"<=": core_1.ApexTokenTypes.OPERATOR.LOGICAL.LESS_THAN_EQUALS,
"=>": core_1.ApexTokenTypes.OPERATOR.ASSIGN.MAP_KEY_VALUE,
"+=": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.ADD_ASSIGN,
"-=": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.SUBSTRACT_ASSIGN,
"*=": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.MULTIPLY_ASSIGN,
"/=": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.DIVIDE_ASSIGN,
"^": core_1.ApexTokenTypes.OPERATOR.BITWISE.EXCLUSIVE_OR,
"|": core_1.ApexTokenTypes.OPERATOR.BITWISE.OR,
"&": core_1.ApexTokenTypes.OPERATOR.BITWISE.AND,
"+": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.ADD,
"-": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.SUBSTRACT,
"*": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.MULTIPLY,
"/": core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.DIVIDE,
"!": core_1.ApexTokenTypes.OPERATOR.LOGICAL.NOT,
"<": core_1.ApexTokenTypes.OPERATOR.LOGICAL.LESS_THAN,
">": core_1.ApexTokenTypes.OPERATOR.LOGICAL.GREATER_THAN,
"=": core_1.ApexTokenTypes.OPERATOR.ASSIGN.ASSIGN,
"/**": core_1.ApexTokenTypes.COMMENT.BLOCK_START,
"/*": core_1.ApexTokenTypes.COMMENT.BLOCK_START,
"*/": core_1.ApexTokenTypes.COMMENT.BLOCK_END,
"//": core_1.ApexTokenTypes.COMMENT.LINE,
"///": core_1.ApexTokenTypes.COMMENT.LINE_DOC,
"(": core_1.ApexTokenTypes.OPERATOR.PRIORITY.PARENTHESIS_OPEN,
")": core_1.ApexTokenTypes.OPERATOR.PRIORITY.PARENTHESIS_CLOSE,
"{": core_1.ApexTokenTypes.BRACKET.CURLY_OPEN,
"}": core_1.ApexTokenTypes.BRACKET.CURLY_CLOSE,
"[": core_1.ApexTokenTypes.BRACKET.SQUARE_OPEN,
"]": core_1.ApexTokenTypes.BRACKET.SQUARE_CLOSE,
",": core_1.ApexTokenTypes.PUNCTUATION.COMMA,
";": core_1.ApexTokenTypes.PUNCTUATION.SEMICOLON,
":": core_1.ApexTokenTypes.PUNCTUATION.COLON,
".": core_1.ApexTokenTypes.PUNCTUATION.OBJECT_ACCESSOR,
"?.": core_1.ApexTokenTypes.PUNCTUATION.SAFE_OBJECT_ACCESSOR,
"\\": core_1.ApexTokenTypes.PUNCTUATION.BACKSLASH,
"'": core_1.ApexTokenTypes.PUNCTUATION.QUOTTES,
"@": core_1.ApexTokenTypes.PUNCTUATION.AT,
"?": core_1.ApexTokenTypes.PUNCTUATION.EXMARK,
};
var primitiveDatatypes = {
"blob": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"boolean": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"byte": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"date": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"datetime": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"decimal": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"double": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"id": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"integer": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"long": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"object": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"string": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"time": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
"void": core_1.ApexTokenTypes.DATATYPE.PRIMITIVE,
};
var collectionsDatatypes = {
"list": core_1.ApexTokenTypes.DATATYPE.COLLECTION,
"set": core_1.ApexTokenTypes.DATATYPE.COLLECTION,
"map": core_1.ApexTokenTypes.DATATYPE.COLLECTION,
"array": core_1.ApexTokenTypes.DATATYPE.COLLECTION,
};
var dateLiterals = {
"yesterday": core_1.ApexTokenTypes.LITERAL.DATE,
"today": core_1.ApexTokenTypes.LITERAL.DATE,
"tomorrow": core_1.ApexTokenTypes.LITERAL.DATE,
"last_week": core_1.ApexTokenTypes.LITERAL.DATE,
"this_week": core_1.ApexTokenTypes.LITERAL.DATE,
"next_week": core_1.ApexTokenTypes.LITERAL.DATE,
"last_month": core_1.ApexTokenTypes.LITERAL.DATE,
"this_month": core_1.ApexTokenTypes.LITERAL.DATE,
"next_month": core_1.ApexTokenTypes.LITERAL.DATE,
"last_90_days": core_1.ApexTokenTypes.LITERAL.DATE,
"next_90_days": core_1.ApexTokenTypes.LITERAL.DATE,
"last_n_days": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"next_n_days": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"next_n_weeks": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_weeks": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"next_n_months": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_months": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"this_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"last_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"next_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"next_n_quarters": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_quarters": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"this_year": core_1.ApexTokenTypes.LITERAL.DATE,
"last_year": core_1.ApexTokenTypes.LITERAL.DATE,
"next_n_years": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_years": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"this_fiscal_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"last_fiscal_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"next_fiscal_quarter": core_1.ApexTokenTypes.LITERAL.DATE,
"next_n_fiscal_quarters": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_fiscal_quarters": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"this_fiscal_year": core_1.ApexTokenTypes.LITERAL.DATE,
"last_fiscal_year": core_1.ApexTokenTypes.LITERAL.DATE,
"next_fiscal_year": core_1.ApexTokenTypes.LITERAL.DATE,
"next_n_fiscal_years": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
"last_n_fiscal_years": core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED,
};
var reservedKeywords = {
"abstract": core_1.ApexTokenTypes.KEYWORD.MODIFIER.DEFINITION,
"after": core_1.ApexTokenTypes.DATABASE.TRIGGER_EXEC,
"any": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"activate": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"as": core_1.ApexTokenTypes.KEYWORD.OTHER,
"asc": core_1.ApexTokenTypes.QUERY.ORDER,
"autonomous": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"begin": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"before": core_1.ApexTokenTypes.DATABASE.TRIGGER_EXEC,
"bigdecimal": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"break": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.BREAK,
"bulk": core_1.ApexTokenTypes.KEYWORD.OTHER,
"case": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"cast": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"catch": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.CATCH,
"char": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"class": core_1.ApexTokenTypes.KEYWORD.DECLARATION.CLASS,
"collect": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"commit": core_1.ApexTokenTypes.KEYWORD.OTHER,
"const": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"continue": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.CONTINUE,
"default": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"delete": core_1.ApexTokenTypes.DATABASE.DML,
"desc": core_1.ApexTokenTypes.QUERY.ORDER,
"do": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.DO,
"else": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.ELSE,
"enum": core_1.ApexTokenTypes.KEYWORD.DECLARATION.ENUM,
"exit": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"export": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"extends": core_1.ApexTokenTypes.KEYWORD.DECLARATION.EXTENDS,
"false": core_1.ApexTokenTypes.LITERAL.BOOLEAN,
"final": core_1.ApexTokenTypes.KEYWORD.MODIFIER.FINAL,
"finally": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.FINALLY,
"float": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"for": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.FOR,
"global": core_1.ApexTokenTypes.KEYWORD.MODIFIER.ACCESS,
"goto": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"group": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"hint": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"if": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.IF,
"implements": core_1.ApexTokenTypes.KEYWORD.DECLARATION.IMPLEMENTS,
"import": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"inner": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"insert": core_1.ApexTokenTypes.DATABASE.DML,
"instanceof": core_1.ApexTokenTypes.OPERATOR.LOGICAL.INSTANCE_OF,
"interface": core_1.ApexTokenTypes.KEYWORD.DECLARATION.INTERFACE,
"into": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"join": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"loop": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"merge": core_1.ApexTokenTypes.DATABASE.DML,
"new": core_1.ApexTokenTypes.KEYWORD.OBJECT.NEW,
"null": core_1.ApexTokenTypes.LITERAL.NULL,
"number": core_1.ApexTokenTypes.KEYWORD.OTHER,
"of": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"on": core_1.ApexTokenTypes.KEYWORD.OTHER,
"outer": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"override": core_1.ApexTokenTypes.KEYWORD.MODIFIER.OVERRIDE,
"package": core_1.ApexTokenTypes.KEYWORD.OTHER,
"parallel": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"pragma": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"private": core_1.ApexTokenTypes.KEYWORD.MODIFIER.ACCESS,
"protected": core_1.ApexTokenTypes.KEYWORD.MODIFIER.ACCESS,
"public": core_1.ApexTokenTypes.KEYWORD.MODIFIER.ACCESS,
"retrieve": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"return": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.RETURN,
"returning": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"search": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"select": core_1.ApexTokenTypes.QUERY.CLAUSE.SELECT,
"short": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"sort": core_1.ApexTokenTypes.KEYWORD.OTHER,
"stat": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"static": core_1.ApexTokenTypes.KEYWORD.MODIFIER.STATIC,
"super": core_1.ApexTokenTypes.KEYWORD.OBJECT.SUPER,
"switch": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.SWITCH,
"synchronized": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"testmethod": core_1.ApexTokenTypes.KEYWORD.MODIFIER.TEST_METHOD,
"this": core_1.ApexTokenTypes.KEYWORD.OBJECT.THIS,
"throw": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.THROW,
"transaction": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"trigger": core_1.ApexTokenTypes.KEYWORD.DECLARATION.TRIGGER,
"true": core_1.ApexTokenTypes.LITERAL.BOOLEAN,
"try": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.TRY,
"type": core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE,
"transient": core_1.ApexTokenTypes.KEYWORD.MODIFIER.TRANSIENT,
"undelete": core_1.ApexTokenTypes.DATABASE.DML,
"update": core_1.ApexTokenTypes.DATABASE.DML,
"upsert": core_1.ApexTokenTypes.DATABASE.DML,
"virtual": core_1.ApexTokenTypes.KEYWORD.MODIFIER.DEFINITION,
"webservice": core_1.ApexTokenTypes.KEYWORD.MODIFIER.WEB_SERVICE,
"while": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.WHILE,
"when": core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.SWITCH_CASE,
};
var soqlFunctions = {
"avg": core_1.ApexTokenTypes.QUERY.FUNCTION,
"calendar_month": core_1.ApexTokenTypes.QUERY.FUNCTION,
"calendar_quarter": core_1.ApexTokenTypes.QUERY.FUNCTION,
"calendar_year": core_1.ApexTokenTypes.QUERY.FUNCTION,
"convertcurrency": core_1.ApexTokenTypes.QUERY.FUNCTION,
"converttimezone": core_1.ApexTokenTypes.QUERY.FUNCTION,
"count": core_1.ApexTokenTypes.QUERY.FUNCTION,
"day_in_month": core_1.ApexTokenTypes.QUERY.FUNCTION,
"day_in_week": core_1.ApexTokenTypes.QUERY.FUNCTION,
"day_in_year": core_1.ApexTokenTypes.QUERY.FUNCTION,
"day_only": core_1.ApexTokenTypes.QUERY.FUNCTION,
"data category": core_1.ApexTokenTypes.QUERY.FUNCTION,
"tolabel": core_1.ApexTokenTypes.QUERY.FUNCTION,
"includes": core_1.ApexTokenTypes.QUERY.FUNCTION,
"excludes": core_1.ApexTokenTypes.QUERY.FUNCTION,
"fiscal_month": core_1.ApexTokenTypes.QUERY.FUNCTION,
"fiscal_quarter": core_1.ApexTokenTypes.QUERY.FUNCTION,
"fiscal_year": core_1.ApexTokenTypes.QUERY.FUNCTION,
"format": core_1.ApexTokenTypes.QUERY.FUNCTION,
"grouping": core_1.ApexTokenTypes.QUERY.FUNCTION,
"group by cube": core_1.ApexTokenTypes.QUERY.FUNCTION,
"group by rollup": core_1.ApexTokenTypes.QUERY.FUNCTION,
"hour_in_day": core_1.ApexTokenTypes.QUERY.FUNCTION,
"max": core_1.ApexTokenTypes.QUERY.FUNCTION,
"min": core_1.ApexTokenTypes.QUERY.FUNCTION,
"sum": core_1.ApexTokenTypes.QUERY.FUNCTION,
"week_in_month": core_1.ApexTokenTypes.QUERY.FUNCTION,
"week_in_year": core_1.ApexTokenTypes.QUERY.FUNCTION,
};
var queryClauses = {
"using scope": core_1.ApexTokenTypes.QUERY.CLAUSE.USING_SCOPE,
"order by": core_1.ApexTokenTypes.QUERY.CLAUSE.ORDER_BY,
"where": core_1.ApexTokenTypes.QUERY.CLAUSE.WHERE,
"when": core_1.ApexTokenTypes.QUERY.CLAUSE.WHEN,
"typeof": core_1.ApexTokenTypes.QUERY.CLAUSE.TYPE_OF,
"then": core_1.ApexTokenTypes.QUERY.CLAUSE.THEN,
"nulls": core_1.ApexTokenTypes.QUERY.CLAUSE.NULLS,
"from": core_1.ApexTokenTypes.QUERY.CLAUSE.FROM,
"end": core_1.ApexTokenTypes.QUERY.CLAUSE.END,
"else": core_1.ApexTokenTypes.QUERY.CLAUSE.ELSE,
"group by": core_1.ApexTokenTypes.QUERY.CLAUSE.GROUP_BY,
"having": core_1.ApexTokenTypes.QUERY.CLAUSE.HAVING,
"with": core_1.ApexTokenTypes.QUERY.CLAUSE.WITH,
"limit": core_1.ApexTokenTypes.QUERY.CLAUSE.LIMIT,
"offset": core_1.ApexTokenTypes.QUERY.CLAUSE.OFFSET,
"for": core_1.ApexTokenTypes.QUERY.CLAUSE.FOR,
};
var soqlOperators = {
"above": core_1.ApexTokenTypes.QUERY.OPERATOR,
"above_or_below": core_1.ApexTokenTypes.QUERY.OPERATOR,
"and": core_1.ApexTokenTypes.QUERY.OPERATOR,
"at": core_1.ApexTokenTypes.QUERY.OPERATOR,
"reference": core_1.ApexTokenTypes.QUERY.OPERATOR,
"update": core_1.ApexTokenTypes.QUERY.OPERATOR,
"view": core_1.ApexTokenTypes.QUERY.OPERATOR,
"in": core_1.ApexTokenTypes.QUERY.OPERATOR,
"like": core_1.ApexTokenTypes.QUERY.OPERATOR,
"not in": core_1.ApexTokenTypes.QUERY.OPERATOR,
"not": core_1.ApexTokenTypes.QUERY.OPERATOR,
"or": core_1.ApexTokenTypes.QUERY.OPERATOR,
"update tracking": core_1.ApexTokenTypes.QUERY.OPERATOR,
"update viewstat": core_1.ApexTokenTypes.QUERY.OPERATOR,
"data category": core_1.ApexTokenTypes.QUERY.OPERATOR,
"snippet": core_1.ApexTokenTypes.QUERY.OPERATOR,
"network": core_1.ApexTokenTypes.QUERY.OPERATOR,
"metadata": core_1.ApexTokenTypes.QUERY.OPERATOR,
"using listview": core_1.ApexTokenTypes.QUERY.OPERATOR,
"division": core_1.ApexTokenTypes.QUERY.OPERATOR,
"highlight": core_1.ApexTokenTypes.QUERY.OPERATOR,
"spell_correction": core_1.ApexTokenTypes.QUERY.OPERATOR,
"returning": core_1.ApexTokenTypes.QUERY.OPERATOR
};
var annotations = {
"auraenabled": core_1.ApexTokenTypes.ANNOTATION.NAME,
"deprecated": core_1.ApexTokenTypes.ANNOTATION.NAME,
"future": core_1.ApexTokenTypes.ANNOTATION.NAME,
"invocablemethod": core_1.ApexTokenTypes.ANNOTATION.NAME,
"invocablevariable": core_1.ApexTokenTypes.ANNOTATION.NAME,
"istest": core_1.ApexTokenTypes.ANNOTATION.NAME,
"namespaceaccesible": core_1.ApexTokenTypes.ANNOTATION.NAME,
"readonly": core_1.ApexTokenTypes.ANNOTATION.NAME,
"remoteaction": core_1.ApexTokenTypes.ANNOTATION.NAME,
"suppresswarnings": core_1.ApexTokenTypes.ANNOTATION.NAME,
"testsetup": core_1.ApexTokenTypes.ANNOTATION.NAME,
"testvisible": core_1.ApexTokenTypes.ANNOTATION.NAME,
"restresource": core_1.ApexTokenTypes.ANNOTATION.NAME,
"httpdelete": core_1.ApexTokenTypes.ANNOTATION.NAME,
"httpget": core_1.ApexTokenTypes.ANNOTATION.NAME,
"httppatch": core_1.ApexTokenTypes.ANNOTATION.NAME,
"httppost": core_1.ApexTokenTypes.ANNOTATION.NAME,
"httpPut": core_1.ApexTokenTypes.ANNOTATION.NAME,
};
var nsSummary;
/**
* Class to Tokenize any apex node to extract all tokens
*/
var ApexTokenizer = /** @class */ (function () {
function ApexTokenizer() {
}
/**
* Method to tokenize an Apex file
* @param {string} filePathOrContent File path or file content to tokenize
* @param {ParserData} [systemData] Object with the system data to identify tokens with more precission
* @param {number} [tabSize] Integer number with the tab size for the file
* @returns {Token[]} Returns an array with all file tokens
*/
ApexTokenizer.tokenize = function (filePathOrContent, systemData, tabSize) {
var _a;
if (!tabSize) {
tabSize = 4;
}
var content;
if (Utils.isString(filePathOrContent)) {
try {
content = core_1.FileReader.readFileSync(Validator.validateFilePath(filePathOrContent));
}
catch (error) {
content = filePathOrContent;
}
}
else {
throw new Error('You must to select a file path,or file content');
}
var sObjects = systemData ? systemData.sObjects : [];
var userClasses = systemData ? systemData.userClasses : [];
var namespacesSummary = systemData ? systemData.namespaceSummary : undefined;
if (!namespacesSummary) {
nsSummary = system_1.System.getAllNamespacesSummary();
}
else {
nsSummary = namespacesSummary;
}
var systemNamespace = nsSummary['system'];
var NUM_FORMAT = /[0-9]/;
var ID_FORMAT = /([a-zA-Z0-9À-ÿ]|_|–)/;
content = StrUtils.replace(content, '\r\n', '\n');
var tokens = [];
var lineNumber = 0;
var column = 0;
var onCommentBlock = false;
var onCommentLine = false;
var onText = false;
var onQuery = false;
var onSObjectInstance = false;
var onAnnotation = false;
var sqBracketIndent = 0;
var aBracketsIndex = [];
var parentIndex = [];
var bracketIndex = [];
var auxBracketIndex = [];
var classDeclarationIndex = [];
var classDeclarationNames = [];
var enumDeclarationIndex = [];
var sqBracketIndex = [];
var quottesIndex = [];
var commentBlockIndex = [];
for (var charIndex = 0, len = content.length; charIndex < len; charIndex++) {
var fourChars = content.substring(charIndex, charIndex + 4);
var threeChars = content.substring(charIndex, charIndex + 3);
var twoChars = content.substring(charIndex, charIndex + 2);
var char = content.charAt(charIndex);
var token = void 0;
var lastToken = (tokens.length > 0) ? tokens[tokens.length - 1] : undefined;
var twoLastToken = (tokens.length > 1) ? tokens[tokens.length - 2] : undefined;
if (fourChars.length === 4 && symbolTokens[fourChars] && aBracketsIndex.length === 0) {
token = new core_1.Token(symbolTokens[fourChars], fourChars, lineNumber, column);
charIndex += 3;
column += 4;
}
else if (threeChars.length === 3 && symbolTokens[threeChars] && aBracketsIndex.length === 0) {
token = new core_1.Token(symbolTokens[threeChars], threeChars, lineNumber, column);
charIndex += 2;
column += 3;
}
else if (twoChars.length === 2 && symbolTokens[twoChars]) {
if (isLogicalOperator(symbolTokens[twoChars])) {
aBracketsIndex = [];
}
if (aBracketsIndex.length === 0) {
token = new core_1.Token(symbolTokens[twoChars], twoChars, lineNumber, column);
charIndex += 1;
column += 2;
}
else if (symbolTokens[char]) {
token = new core_1.Token(symbolTokens[char], char, lineNumber, column);
column++;
}
}
else if (symbolTokens[char]) {
token = new core_1.Token(symbolTokens[char], char, lineNumber, column);
if (mustResetABracketIndex(token)) {
aBracketsIndex = [];
}
column++;
}
else if (NUM_FORMAT.test(char)) {
var numContent = '';
while (NUM_FORMAT.test(char) || char === '.' || char === ':' || char === '+' || char === '-' || char.toLowerCase() === 't' || char.toLowerCase() === 'z') {
numContent += char;
char = content.charAt(++charIndex);
}
if (numContent.indexOf(':') !== -1 && numContent.indexOf('-') !== -1) {
token = new core_1.Token(core_1.ApexTokenTypes.LITERAL.DATETIME, numContent, lineNumber, column);
}
else if (numContent.indexOf('-') !== -1) {
token = new core_1.Token(core_1.ApexTokenTypes.LITERAL.DATE, numContent, lineNumber, column);
}
else if (numContent.indexOf(':') !== -1) {
token = new core_1.Token(core_1.ApexTokenTypes.LITERAL.TIME, numContent, lineNumber, column);
}
else if (numContent.indexOf('.') !== -1) {
token = new core_1.Token(core_1.ApexTokenTypes.LITERAL.DOUBLE, numContent, lineNumber, column);
}
else {
token = new core_1.Token(core_1.ApexTokenTypes.LITERAL.INTEGER, numContent, lineNumber, column);
}
charIndex--;
column += numContent.length;
}
else if (ID_FORMAT.test(char)) {
var idContent = '';
while (ID_FORMAT.test(char)) {
idContent += char;
char = content.charAt(++charIndex);
}
charIndex--;
token = new core_1.Token(core_1.ApexTokenTypes.IDENTIFIER, idContent, lineNumber, column);
column += idContent.length;
}
else if (char === "\n") {
if (onCommentLine) {
onCommentLine = false;
}
lineNumber++;
column = 0;
}
else if (char !== "\t" && char !== " " && char.trim().length !== 0) {
token = new core_1.Token(core_1.ApexTokenTypes.UNKNOWN, char, lineNumber, column);
column++;
}
else if (char === "\t") {
column += tabSize;
}
else {
column++;
}
if (token !== undefined) {
if (!onText && !onCommentBlock && !onCommentLine && token.type === core_1.ApexTokenTypes.PUNCTUATION.QUOTTES && (!lastToken || lastToken.text !== '\\')) {
if (onAnnotation) {
token.type = core_1.ApexTokenTypes.ANNOTATION.CONTENT;
}
else {
token.type = core_1.ApexTokenTypes.PUNCTUATION.QUOTTES_START;
quottesIndex.push(tokens.length);
}
onText = true;
token.parentToken = tokens.length - 1;
}
else if (onText && token.type === core_1.ApexTokenTypes.PUNCTUATION.QUOTTES && (!lastToken || lastToken.text !== '\\')) {
if (onAnnotation && lastToken) {
token.type = core_1.ApexTokenTypes.ANNOTATION.CONTENT;
var whitespaces = (lastToken.range.start.line !== token.range.start.line) ? 0 : token.range.start.character - lastToken.range.end.character;
token = new core_1.Token(core_1.ApexTokenTypes.ANNOTATION.CONTENT, lastToken.text + StrUtils.getWhitespaces(whitespaces) + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else {
token.type = core_1.ApexTokenTypes.PUNCTUATION.QUOTTES_END;
if (quottesIndex.length > 0) {
var index = quottesIndex.pop();
if (index !== undefined) {
token.pairToken = index;
tokens[index].pairToken = tokens.length;
token.parentToken = tokens[index].parentToken;
}
}
}
onText = false;
}
else if (!onAnnotation && !onText && !onCommentBlock && !onCommentLine && token.type === core_1.ApexTokenTypes.COMMENT.BLOCK_START) {
onCommentBlock = true;
token.parentToken = tokens.length - 1;
commentBlockIndex.push(tokens.length);
}
else if (onCommentBlock && token.type === core_1.ApexTokenTypes.COMMENT.BLOCK_END) {
onCommentBlock = false;
if (commentBlockIndex.length > 0) {
var index = commentBlockIndex.pop();
if (index !== undefined) {
token.pairToken = index;
tokens[index].pairToken = tokens.length;
token.parentToken = tokens[index].parentToken;
}
}
}
else if (!onAnnotation && !onText && !onCommentBlock && !onCommentLine && (token.type === core_1.ApexTokenTypes.COMMENT.LINE || token.type === core_1.ApexTokenTypes.COMMENT.LINE_DOC)) {
token.parentToken = tokens.length - 1;
onCommentLine = true;
}
else if (onText) {
if (onAnnotation && lastToken) {
token.type = core_1.ApexTokenTypes.ANNOTATION.CONTENT;
var whitespaces = (lastToken.range.start.line !== token.range.start.line) ? 0 : token.range.start.character - lastToken.range.end.character;
token = new core_1.Token(core_1.ApexTokenTypes.ANNOTATION.CONTENT, lastToken.text + StrUtils.getWhitespaces(whitespaces) + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else {
token.type = core_1.ApexTokenTypes.LITERAL.STRING;
if (quottesIndex.length > 0) {
token.parentToken = quottesIndex[quottesIndex.length - 1];
}
}
}
else if (onCommentBlock || onCommentLine) {
if (onCommentBlock && token.text === '/' && lastToken && lastToken.text === '/**') {
tokens[tokens.length - 1].text = '/*';
token.text = '*/';
token.type = core_1.ApexTokenTypes.COMMENT.BLOCK_END;
onCommentBlock = false;
}
else {
token.type = core_1.ApexTokenTypes.COMMENT.CONTENT;
if (commentBlockIndex.length > 0) {
token.parentToken = commentBlockIndex[commentBlockIndex.length - 1];
}
}
}
else if (lastToken && (isOperator(lastToken) || isBracket(lastToken)) && token.type === core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.ADD) {
token.type = core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.POSITIVE;
}
else if (lastToken && (isOperator(lastToken) || isBracket(lastToken)) && token.type === core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.SUBSTRACT) {
token.type = core_1.ApexTokenTypes.OPERATOR.ARITHMETIC.NEGATIVE;
}
else if (onAnnotation && token.type !== core_1.ApexTokenTypes.OPERATOR.PRIORITY.PARENTHESIS_CLOSE) {
token.type = core_1.ApexTokenTypes.ANNOTATION.CONTENT;
}
else if (token.type === core_1.ApexTokenTypes.OPERATOR.LOGICAL.LESS_THAN) {
aBracketsIndex.push(tokens.length);
}
else if (token.type === core_1.ApexTokenTypes.OPERATOR.LOGICAL.GREATER_THAN) {
if (aBracketsIndex.length > 0) {
var index = aBracketsIndex.pop();
if (index !== undefined && tokens[index] && tokens[index].type === core_1.ApexTokenTypes.OPERATOR.LOGICAL.LESS_THAN) {
tokens[index].type = core_1.ApexTokenTypes.BRACKET.PARAMETRIZED_TYPE_OPEN;
if (tokens[index + 1] && tokens[index + 1].type === core_1.ApexTokenTypes.ENTITY.VARIABLE) {
tokens[index + 1].type = core_1.ApexTokenTypes.DATATYPE.CUSTOM_CLASS;
}
if (tokens[tokens.length - 1] && tokens[tokens.length - 1].type === core_1.ApexTokenTypes.ENTITY.VARIABLE) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.DATATYPE.CUSTOM_CLASS;
}
token.type = core_1.ApexTokenTypes.BRACKET.PARAMETRIZED_TYPE_CLOSE;
}
if (index !== undefined) {
token.pairToken = index;
tokens[index].pairToken = tokens.length;
}
}
}
else if (lastToken && lastToken.type === core_1.ApexTokenTypes.BRACKET.CASTING_CLOSE && token.textToLower === ';') {
var pairIndex = (_a = tokens[tokens.length - 1]) === null || _a === void 0 ? void 0 : _a.pairToken;
if (pairIndex) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.BRACKET.PARENTHESIS_PARAM_OPEN;
tokens[pairIndex].type = core_1.ApexTokenTypes.BRACKET.PARENTHESIS_PARAM_CLOSE;
}
}
else if (token.type === core_1.ApexTokenTypes.BRACKET.CURLY_OPEN && lastToken) {
if ((lastToken.type === core_1.ApexTokenTypes.BRACKET.PARAMETRIZED_TYPE_CLOSE || lastToken.type === core_1.ApexTokenTypes.BRACKET.SQUARE_CLOSE) && bracketIndex.length > 0 && classDeclarationIndex.length === 0) {
token.type = core_1.ApexTokenTypes.BRACKET.INIT_VALUES_OPEN;
}
else if (lastToken.type === core_1.ApexTokenTypes.KEYWORD.MODIFIER.STATIC) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.KEYWORD.DECLARATION.STATIC_CONSTRUCTOR;
}
else if (lastToken.textToLower === 'get') {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.KEYWORD.DECLARATION.PROPERTY_GETTER;
}
else if (lastToken.textToLower === 'set') {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.KEYWORD.DECLARATION.PROPERTY_SETTER;
}
else if (lastToken.type === core_1.ApexTokenTypes.DECLARATION.ENTITY.VARIABLE) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.DECLARATION.ENTITY.PROPERTY;
}
else if (lastToken.type === core_1.ApexTokenTypes.BRACKET.CURLY_OPEN || lastToken.type === core_1.ApexTokenTypes.BRACKET.CURLY_CLOSE || lastToken.type === core_1.ApexTokenTypes.PUNCTUATION.SEMICOLON) {
token.type = core_1.ApexTokenTypes.BRACKET.INITIALIZER_OPEN;
}
else if (lastToken.type === core_1.ApexTokenTypes.COMMENT.CONTENT || lastToken.type === core_1.ApexTokenTypes.COMMENT.LINE || lastToken.type === core_1.ApexTokenTypes.COMMENT.LINE_DOC || lastToken.type === core_1.ApexTokenTypes.COMMENT.BLOCK_END) {
var auxToken = lastToken;
var finish = false;
while (!finish) {
if (auxToken.parentToken !== undefined && auxToken.parentToken !== -1) {
auxToken = tokens[auxToken.parentToken];
}
else {
finish = true;
}
if (auxToken.type === core_1.ApexTokenTypes.BRACKET.CURLY_OPEN || auxToken.type === core_1.ApexTokenTypes.BRACKET.CURLY_CLOSE || auxToken.type === core_1.ApexTokenTypes.PUNCTUATION.SEMICOLON) {
finish = true;
token.type = core_1.ApexTokenTypes.BRACKET.INITIALIZER_OPEN;
}
else if (auxToken.type !== core_1.ApexTokenTypes.COMMENT.CONTENT && auxToken.type !== core_1.ApexTokenTypes.COMMENT.LINE && auxToken.type !== core_1.ApexTokenTypes.COMMENT.LINE_DOC && auxToken.type !== core_1.ApexTokenTypes.COMMENT.BLOCK_END) {
finish = true;
}
}
}
if (lastToken.parentToken !== undefined) {
token.parentToken = lastToken.parentToken;
}
else {
token.parentToken = tokens.length - 1;
}
if (lastToken.type === core_1.ApexTokenTypes.BRACKET.PARENTHESIS_GUARD_CLOSE || lastToken.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.ELSE || lastToken.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.TRY || lastToken.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.FINALLY || lastToken.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.DO) {
if (lastToken.type === core_1.ApexTokenTypes.BRACKET.PARENTHESIS_GUARD_CLOSE && lastToken.parentToken !== undefined) {
token.parentToken = lastToken.parentToken;
}
else {
token.parentToken = tokens.length - 1;
}
}
if (classDeclarationIndex.length > 0) {
token.parentToken = classDeclarationIndex.pop();
}
bracketIndex.push(tokens.length);
}
else if (token.type === core_1.ApexTokenTypes.BRACKET.CURLY_CLOSE) {
if (bracketIndex.length > 0) {
var index = bracketIndex.pop();
if (index !== undefined) {
if (tokens[index] && tokens[index].type === core_1.ApexTokenTypes.BRACKET.INIT_VALUES_OPEN) {
token.type = core_1.ApexTokenTypes.BRACKET.INIT_VALUES_CLOSE;
}
else if (tokens[index] && tokens[index].type === core_1.ApexTokenTypes.BRACKET.INITIALIZER_OPEN) {
token.type = core_1.ApexTokenTypes.BRACKET.INITIALIZER_CLOSE;
}
if (tokens[index].parentToken) {
token.parentToken = tokens[index].parentToken;
}
else {
token.parentToken = index;
}
token.pairToken = index;
tokens[index].pairToken = tokens.length;
}
}
if (enumDeclarationIndex.length > 0) {
enumDeclarationIndex.pop();
}
}
else if (token.type === core_1.ApexTokenTypes.OPERATOR.ASSIGN.ASSIGN && onQuery) {
token.type = core_1.ApexTokenTypes.OPERATOR.LOGICAL.EQUALITY;
}
else if (token.type === core_1.ApexTokenTypes.BRACKET.SQUARE_OPEN) {
sqBracketIndex.push(tokens.length);
sqBracketIndent++;
}
else if (token.type === core_1.ApexTokenTypes.BRACKET.SQUARE_CLOSE) {
sqBracketIndent--;
if (sqBracketIndent === 0) {
if (onQuery) {
onQuery = false;
token.type = core_1.ApexTokenTypes.BRACKET.QUERY_END;
}
else if (twoLastToken && lastToken && twoLastToken.type === core_1.ApexTokenTypes.ENTITY.VARIABLE && lastToken.type === core_1.ApexTokenTypes.BRACKET.SQUARE_OPEN) {
tokens[tokens.length - 2].type = core_1.ApexTokenTypes.DATATYPE.CUSTOM_CLASS;
}
}
if (sqBracketIndex.length > 0) {
var index = sqBracketIndex.pop();
if (index !== undefined) {
token.pairToken = index;
tokens[index].pairToken = tokens.length;
}
}
}
else if (token.type === core_1.ApexTokenTypes.PUNCTUATION.SEMICOLON) {
if (lastToken && lastToken.textToLower === 'get') {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.KEYWORD.DECLARATION.PROPERTY_GETTER;
}
else if (lastToken && lastToken.textToLower === 'set') {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.KEYWORD.DECLARATION.PROPERTY_SETTER;
}
}
else if (isObjectAccessor(token)) {
if (lastToken && lastToken.type === core_1.ApexTokenTypes.KEYWORD.DECLARATION.TRIGGER) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.DATATYPE.SUPPORT_CLASS;
}
if (lastToken && lastToken.type === core_1.ApexTokenTypes.KEYWORD.DECLARATION.CLASS) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.DATATYPE.SUPPORT_CLASS;
}
}
else if (onSObjectInstance && token.type === core_1.ApexTokenTypes.OPERATOR.ASSIGN.ASSIGN && twoLastToken && (twoLastToken.type === core_1.ApexTokenTypes.BRACKET.PARENTHESIS_SOBJECT_OPEN || twoLastToken.type === core_1.ApexTokenTypes.PUNCTUATION.COMMA)) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.ENTITY.SOBJECT_FIELD;
}
else if (token.type === core_1.ApexTokenTypes.OPERATOR.ASSIGN.ASSIGN && twoLastToken && twoLastToken.type === core_1.ApexTokenTypes.BRACKET.PARENTHESIS_PARAM_OPEN) {
onSObjectInstance = true;
tokens[tokens.length - 2].type = core_1.ApexTokenTypes.BRACKET.PARENTHESIS_SOBJECT_OPEN;
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.ENTITY.SOBJECT_FIELD;
}
else if (token.type === core_1.ApexTokenTypes.IDENTIFIER) {
if (token.textToLower !== 'constructor' && reservedKeywords[token.textToLower] && reservedKeywords[token.textToLower] !== core_1.ApexTokenTypes.KEYWORD.FOR_FUTURE) {
if (!onQuery || (onQuery && lastToken && lastToken.type !== core_1.ApexTokenTypes.QUERY.VALUE_BIND)) {
token.type = reservedKeywords[token.textToLower];
if (lastToken && isDatatypeToken(lastToken) && token.type !== core_1.ApexTokenTypes.KEYWORD.DECLARATION.IMPLEMENTS) {
token.type = core_1.ApexTokenTypes.DECLARATION.ENTITY.VARIABLE;
}
}
if (lastToken && isObjectAccessor(lastToken) && token.type === core_1.ApexTokenTypes.KEYWORD.DECLARATION.CLASS) {
token.type = core_1.ApexTokenTypes.DATATYPE.SUPPORT_CLASS;
}
if (token.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.IF && lastToken && lastToken.type === core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.ELSE) {
token = new core_1.Token(core_1.ApexTokenTypes.KEYWORD.FLOW_CONTROL.ELSE_IF, lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
}
if (!onQuery && !onAnnotation && lastToken && lastToken.type === core_1.ApexTokenTypes.PUNCTUATION.AT && annotations[token.textToLower]) {
token = new core_1.Token(core_1.ApexTokenTypes.ANNOTATION.ENTITY, lastToken.text + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (!onQuery && (token.type === core_1.ApexTokenTypes.QUERY.CLAUSE.SELECT || token.type === core_1.ApexTokenTypes.QUERY.CLAUSE.FIND) && lastToken && lastToken.type === core_1.ApexTokenTypes.BRACKET.SQUARE_OPEN && sqBracketIndent === 1) {
onQuery = true;
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.BRACKET.QUERY_START;
}
else if (onQuery && token.type === core_1.ApexTokenTypes.QUERY.CLAUSE.SELECT && lastToken && lastToken.type === core_1.ApexTokenTypes.OPERATOR.PRIORITY.PARENTHESIS_OPEN) {
tokens[tokens.length - 1].type = core_1.ApexTokenTypes.BRACKET.INNER_QUERY_START;
}
else if (onQuery && token.textToLower !== 'constructor' && soqlFunctions[token.textToLower] && lastToken && lastToken.type !== core_1.ApexTokenTypes.QUERY.VALUE_BIND && !isObjectAccessor(lastToken)) {
token.type = soqlFunctions[token.textToLower];
}
else if (onQuery && token.textToLower !== 'constructor' && soqlOperators[token.textToLower] && lastToken && lastToken.type !== core_1.ApexTokenTypes.QUERY.VALUE_BIND && !isObjectAccessor(lastToken)) {
token.type = soqlOperators[token.textToLower];
}
else if (onQuery && token.textToLower !== 'constructor' && queryClauses[token.textToLower] && lastToken && lastToken.type !== core_1.ApexTokenTypes.QUERY.VALUE_BIND && !isObjectAccessor(lastToken)) {
token.type = queryClauses[token.textToLower];
}
else if (onQuery && token.textToLower === 'scope' && lastToken && lastToken.textToLower === 'using') {
token = new core_1.Token(queryClauses['using scope'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'by' && lastToken && lastToken.textToLower === 'order') {
token = new core_1.Token(queryClauses['order by'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'by' && lastToken && lastToken.textToLower === 'group') {
token = new core_1.Token(queryClauses['group by'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'cube' && lastToken && lastToken.type === core_1.ApexTokenTypes.QUERY.CLAUSE.GROUP_BY) {
token = new core_1.Token(soqlFunctions['group by cube'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'rollup' && lastToken && lastToken.type === core_1.ApexTokenTypes.QUERY.CLAUSE.GROUP_BY) {
token = new core_1.Token(soqlFunctions['group by rollup'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'category' && lastToken && lastToken.textToLower === 'data') {
token = new core_1.Token(soqlFunctions['data category'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'update' && lastToken && lastToken.textToLower === 'tracking') {
token = new core_1.Token(soqlFunctions['update tracking'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'update' && lastToken && lastToken.textToLower === 'tracking') {
token = new core_1.Token(soqlFunctions['update viewstat'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (onQuery && token.textToLower === 'listview' && lastToken && lastToken.textToLower === 'using') {
token = new core_1.Token(soqlFunctions['using listview'], lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (token.textToLower === 'sharing' && lastToken && (lastToken.textToLower === 'with' || lastToken.textToLower === 'without' || lastToken.textToLower === 'inherited')) {
token = new core_1.Token(core_1.ApexTokenTypes.KEYWORD.MODIFIER.SHARING, lastToken.text + ' ' + token.text, lastToken.range.start.line, lastToken.range.start.character);
tokens.pop();
lastToken = tokens[tokens.length - 1];
}
else if (lastToken && lastToken.type === core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED_START_PARAM) {
token.type = core_1.ApexTokenTypes.LITERAL.DATE_PARAMETRIZED_PARAM_VARIABLE;
}
else if (lastTo