123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- const ESLINT_VERSION = require("../utils/eslint-version.cjs");
- function convertTemplateType(tokens, tl) {
- let curlyBrace = null;
- let templateTokens = [];
- const result = [];
- function addTemplateType() {
- const start = templateTokens[0];
- const end = templateTokens[templateTokens.length - 1];
- const value = templateTokens.reduce((result, token) => {
- if (token.value) {
- result += token.value;
- } else if (token.type.label !== tl.template) {
- result += token.type.label;
- }
- return result;
- }, "");
- result.push({
- type: "Template",
- value: value,
- start: start.start,
- end: end.end,
- loc: {
- start: start.loc.start,
- end: end.loc.end
- }
- });
- templateTokens = [];
- }
- tokens.forEach(token => {
- switch (token.type.label) {
- case tl.backQuote:
- if (curlyBrace) {
- result.push(curlyBrace);
- curlyBrace = null;
- }
- templateTokens.push(token);
- if (templateTokens.length > 1) {
- addTemplateType();
- }
- break;
- case tl.dollarBraceL:
- templateTokens.push(token);
- addTemplateType();
- break;
- case tl.braceR:
- if (curlyBrace) {
- result.push(curlyBrace);
- }
- curlyBrace = token;
- break;
- case tl.template:
- if (curlyBrace) {
- templateTokens.push(curlyBrace);
- curlyBrace = null;
- }
- templateTokens.push(token);
- break;
- default:
- if (curlyBrace) {
- result.push(curlyBrace);
- curlyBrace = null;
- }
- result.push(token);
- }
- });
- return result;
- }
- function convertToken(token, source, tl) {
- const {
- type
- } = token;
- const {
- label
- } = type;
- token.range = [token.start, token.end];
- if (label === tl.name) {
- if (token.value === "static") {
- token.type = "Keyword";
- } else {
- token.type = "Identifier";
- }
- } else if (label === tl.semi || label === tl.comma || label === tl.parenL || label === tl.parenR || label === tl.braceL || label === tl.braceR || label === tl.slash || label === tl.dot || label === tl.bracketL || label === tl.bracketR || label === tl.ellipsis || label === tl.arrow || label === tl.pipeline || label === tl.star || label === tl.incDec || label === tl.colon || label === tl.question || label === tl.template || label === tl.backQuote || label === tl.dollarBraceL || label === tl.at || label === tl.logicalOR || label === tl.logicalAND || label === tl.nullishCoalescing || label === tl.bitwiseOR || label === tl.bitwiseXOR || label === tl.bitwiseAND || label === tl.equality || label === tl.relational || label === tl.bitShift || label === tl.plusMin || label === tl.modulo || label === tl.exponent || label === tl.bang || label === tl.tilde || label === tl.doubleColon || label === tl.hash || label === tl.questionDot || label === tl.braceHashL || label === tl.braceBarL || label === tl.braceBarR || label === tl.bracketHashL || label === tl.bracketBarL || label === tl.bracketBarR || label === tl.doubleCaret || label === tl.doubleAt || type.isAssign) {
- var _token$value;
- token.type = "Punctuator";
- (_token$value = token.value) != null ? _token$value : token.value = label;
- } else if (label === tl.jsxTagStart) {
- token.type = "Punctuator";
- token.value = "<";
- } else if (label === tl.jsxTagEnd) {
- token.type = "Punctuator";
- token.value = ">";
- } else if (label === tl.jsxName) {
- token.type = "JSXIdentifier";
- } else if (label === tl.jsxText) {
- token.type = "JSXText";
- } else if (type.keyword === "null") {
- token.type = "Null";
- } else if (type.keyword === "false" || type.keyword === "true") {
- token.type = "Boolean";
- } else if (type.keyword) {
- token.type = "Keyword";
- } else if (label === tl.num) {
- token.type = "Numeric";
- token.value = source.slice(token.start, token.end);
- } else if (label === tl.string) {
- token.type = "String";
- token.value = source.slice(token.start, token.end);
- } else if (label === tl.regexp) {
- token.type = "RegularExpression";
- const value = token.value;
- token.regex = {
- pattern: value.pattern,
- flags: value.flags
- };
- token.value = `/${value.pattern}/${value.flags}`;
- } else if (label === tl.bigint) {
- token.type = "Numeric";
- token.value = `${token.value}n`;
- } else if (label === tl.privateName) {
- token.type = "PrivateIdentifier";
- } else if (label === tl.templateNonTail || label === tl.templateTail) {
- token.type = "Template";
- }
- if (typeof token.type !== "string") {
- delete token.type.rightAssociative;
- }
- }
- module.exports = function convertTokens(tokens, code, tl) {
- const result = [];
- const templateTypeMergedTokens = convertTemplateType(tokens, tl);
- for (let i = 0, {
- length
- } = templateTypeMergedTokens; i < length - 1; i++) {
- const token = templateTypeMergedTokens[i];
- const tokenType = token.type;
- if (tokenType === "CommentLine" || tokenType === "CommentBlock") {
- continue;
- }
- {
- if (ESLINT_VERSION >= 8 && i + 1 < length && tokenType.label === tl.hash) {
- const nextToken = templateTypeMergedTokens[i + 1];
- if (nextToken.type.label === tl.name && token.end === nextToken.start) {
- i++;
- nextToken.type = "PrivateIdentifier";
- nextToken.start -= 1;
- nextToken.loc.start.column -= 1;
- nextToken.range = [nextToken.start, nextToken.end];
- result.push(nextToken);
- continue;
- }
- }
- }
- convertToken(token, code, tl);
- result.push(token);
- }
- return result;
- };
- //# sourceMappingURL=convertTokens.cjs.map
|