| [9af201e] | 1 | "use strict";
|
|---|
| 2 |
|
|---|
| 3 | const ESLINT_VERSION = require("../utils/eslint-version.cjs");
|
|---|
| 4 | function convertTemplateType(tokens, tl) {
|
|---|
| 5 | let curlyBrace = null;
|
|---|
| 6 | let templateTokens = [];
|
|---|
| 7 | const result = [];
|
|---|
| 8 | function addTemplateType() {
|
|---|
| 9 | const start = templateTokens[0];
|
|---|
| 10 | const end = templateTokens[templateTokens.length - 1];
|
|---|
| 11 | const value = templateTokens.reduce((result, token) => {
|
|---|
| 12 | if (token.value) {
|
|---|
| 13 | result += token.value;
|
|---|
| 14 | } else if (token.type.label !== tl.template) {
|
|---|
| 15 | result += token.type.label;
|
|---|
| 16 | }
|
|---|
| 17 | return result;
|
|---|
| 18 | }, "");
|
|---|
| 19 | result.push({
|
|---|
| 20 | type: "Template",
|
|---|
| 21 | value: value,
|
|---|
| 22 | start: start.start,
|
|---|
| 23 | end: end.end,
|
|---|
| 24 | loc: {
|
|---|
| 25 | start: start.loc.start,
|
|---|
| 26 | end: end.loc.end
|
|---|
| 27 | }
|
|---|
| 28 | });
|
|---|
| 29 | templateTokens = [];
|
|---|
| 30 | }
|
|---|
| 31 | tokens.forEach(token => {
|
|---|
| 32 | switch (token.type.label) {
|
|---|
| 33 | case tl.backQuote:
|
|---|
| 34 | if (curlyBrace) {
|
|---|
| 35 | result.push(curlyBrace);
|
|---|
| 36 | curlyBrace = null;
|
|---|
| 37 | }
|
|---|
| 38 | templateTokens.push(token);
|
|---|
| 39 | if (templateTokens.length > 1) {
|
|---|
| 40 | addTemplateType();
|
|---|
| 41 | }
|
|---|
| 42 | break;
|
|---|
| 43 | case tl.dollarBraceL:
|
|---|
| 44 | templateTokens.push(token);
|
|---|
| 45 | addTemplateType();
|
|---|
| 46 | break;
|
|---|
| 47 | case tl.braceR:
|
|---|
| 48 | if (curlyBrace) {
|
|---|
| 49 | result.push(curlyBrace);
|
|---|
| 50 | }
|
|---|
| 51 | curlyBrace = token;
|
|---|
| 52 | break;
|
|---|
| 53 | case tl.template:
|
|---|
| 54 | if (curlyBrace) {
|
|---|
| 55 | templateTokens.push(curlyBrace);
|
|---|
| 56 | curlyBrace = null;
|
|---|
| 57 | }
|
|---|
| 58 | templateTokens.push(token);
|
|---|
| 59 | break;
|
|---|
| 60 | default:
|
|---|
| 61 | if (curlyBrace) {
|
|---|
| 62 | result.push(curlyBrace);
|
|---|
| 63 | curlyBrace = null;
|
|---|
| 64 | }
|
|---|
| 65 | result.push(token);
|
|---|
| 66 | }
|
|---|
| 67 | });
|
|---|
| 68 | return result;
|
|---|
| 69 | }
|
|---|
| 70 | function convertToken(token, source, tl) {
|
|---|
| 71 | const {
|
|---|
| 72 | type
|
|---|
| 73 | } = token;
|
|---|
| 74 | const {
|
|---|
| 75 | label
|
|---|
| 76 | } = type;
|
|---|
| 77 | const newToken = token;
|
|---|
| 78 | newToken.range = [token.start, token.end];
|
|---|
| 79 | if (label === tl.name) {
|
|---|
| 80 | const tokenValue = token.value;
|
|---|
| 81 | if (tokenValue === "let" || tokenValue === "static" || tokenValue === "yield") {
|
|---|
| 82 | newToken.type = "Keyword";
|
|---|
| 83 | } else {
|
|---|
| 84 | newToken.type = "Identifier";
|
|---|
| 85 | }
|
|---|
| 86 | } 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) {
|
|---|
| 87 | var _newToken$value;
|
|---|
| 88 | newToken.type = "Punctuator";
|
|---|
| 89 | (_newToken$value = newToken.value) != null ? _newToken$value : newToken.value = label;
|
|---|
| 90 | } else if (label === tl.jsxTagStart) {
|
|---|
| 91 | newToken.type = "Punctuator";
|
|---|
| 92 | newToken.value = "<";
|
|---|
| 93 | } else if (label === tl.jsxTagEnd) {
|
|---|
| 94 | newToken.type = "Punctuator";
|
|---|
| 95 | newToken.value = ">";
|
|---|
| 96 | } else if (label === tl.jsxName) {
|
|---|
| 97 | newToken.type = "JSXIdentifier";
|
|---|
| 98 | } else if (label === tl.jsxText) {
|
|---|
| 99 | newToken.type = "JSXText";
|
|---|
| 100 | } else if (type.keyword === "null") {
|
|---|
| 101 | newToken.type = "Null";
|
|---|
| 102 | } else if (type.keyword === "false" || type.keyword === "true") {
|
|---|
| 103 | newToken.type = "Boolean";
|
|---|
| 104 | } else if (type.keyword) {
|
|---|
| 105 | newToken.type = "Keyword";
|
|---|
| 106 | } else if (label === tl.num) {
|
|---|
| 107 | newToken.type = "Numeric";
|
|---|
| 108 | newToken.value = source.slice(token.start, token.end);
|
|---|
| 109 | } else if (label === tl.string) {
|
|---|
| 110 | newToken.type = "String";
|
|---|
| 111 | newToken.value = source.slice(token.start, token.end);
|
|---|
| 112 | } else if (label === tl.regexp) {
|
|---|
| 113 | newToken.type = "RegularExpression";
|
|---|
| 114 | const value = token.value;
|
|---|
| 115 | newToken.regex = {
|
|---|
| 116 | pattern: value.pattern,
|
|---|
| 117 | flags: value.flags
|
|---|
| 118 | };
|
|---|
| 119 | newToken.value = `/${value.pattern}/${value.flags}`;
|
|---|
| 120 | } else if (label === tl.bigint) {
|
|---|
| 121 | newToken.type = "Numeric";
|
|---|
| 122 | newToken.value = `${token.value}n`;
|
|---|
| 123 | } else if (label === tl.privateName) {
|
|---|
| 124 | newToken.type = "PrivateIdentifier";
|
|---|
| 125 | } else if (label === tl.templateNonTail || label === tl.templateTail || label === tl.Template) {
|
|---|
| 126 | newToken.type = "Template";
|
|---|
| 127 | }
|
|---|
| 128 | return newToken;
|
|---|
| 129 | }
|
|---|
| 130 | module.exports = function convertTokens(tokens, code, tokLabels) {
|
|---|
| 131 | const result = [];
|
|---|
| 132 | const templateTypeMergedTokens = convertTemplateType(tokens, tokLabels);
|
|---|
| 133 | for (let i = 0, {
|
|---|
| 134 | length
|
|---|
| 135 | } = templateTypeMergedTokens; i < length - 1; i++) {
|
|---|
| 136 | const token = templateTypeMergedTokens[i];
|
|---|
| 137 | const tokenType = token.type;
|
|---|
| 138 | if (tokenType === "CommentLine" || tokenType === "CommentBlock") {
|
|---|
| 139 | continue;
|
|---|
| 140 | }
|
|---|
| 141 | if (ESLINT_VERSION >= 8 && i + 1 < length && tokenType.label === tokLabels.hash) {
|
|---|
| 142 | const nextToken = templateTypeMergedTokens[i + 1];
|
|---|
| 143 | if (nextToken.type.label === tokLabels.name && token.end === nextToken.start) {
|
|---|
| 144 | i++;
|
|---|
| 145 | nextToken.type = "PrivateIdentifier";
|
|---|
| 146 | nextToken.start -= 1;
|
|---|
| 147 | nextToken.loc.start.column -= 1;
|
|---|
| 148 | nextToken.range = [nextToken.start, nextToken.end];
|
|---|
| 149 | result.push(nextToken);
|
|---|
| 150 | continue;
|
|---|
| 151 | }
|
|---|
| 152 | }
|
|---|
| 153 | result.push(convertToken(token, code, tokLabels));
|
|---|
| 154 | }
|
|---|
| 155 | return result;
|
|---|
| 156 | };
|
|---|
| 157 |
|
|---|
| 158 | //# sourceMappingURL=convertTokens.cjs.map
|
|---|