UNPKG

@codeque/eslint-plugin

Version:

Create custom ESLint rules based on code samples. Utilizing CodeQue - structural code search engine.

61 lines (60 loc) 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertCompatibleParser = exports.extractParserNameFromResolvedPath = exports.parserNamesMappingsToCodeQueInternal = exports.supportedParsers = exports.createMultipleSearchFunctionsExecutor = exports.formatQueryParseErrors = void 0; const formatQueryParseErrors = (queries) => { return `Queries parse errors: [\n${queries .map(([[{ error, queryCode }]]) => { var _a, _b; const errorLocation = (error === null || error === void 0 ? void 0 : error.location) ? `(${(_a = error === null || error === void 0 ? void 0 : error.location) === null || _a === void 0 ? void 0 : _a.line}:${(_b = error === null || error === void 0 ? void 0 : error.location) === null || _b === void 0 ? void 0 : _b.column})` : ''; return `"${queryCode}" -> ${error === null || error === void 0 ? void 0 : error.text}${errorLocation}`; }) .join(',\n')}\n]`; }; exports.formatQueryParseErrors = formatQueryParseErrors; const createMultipleSearchFunctionsExecutor = (searchFns) => (node) => { searchFns.forEach((searchFn) => searchFn(node)); }; exports.createMultipleSearchFunctionsExecutor = createMultipleSearchFunctionsExecutor; const typescriptEslintParser = '@typescript-eslint/parser'; const babelEslintParser = '@babel/eslint-parser'; const esprimaParser = 'esprima'; const espreeParser = 'espree'; const eslintParser = 'eslint'; // in fact it's espree exports.supportedParsers = [ typescriptEslintParser, babelEslintParser, esprimaParser, espreeParser, eslintParser, ]; exports.parserNamesMappingsToCodeQueInternal = { [typescriptEslintParser]: 'typescript-eslint-parser', [babelEslintParser]: 'babel-eslint-parser', [esprimaParser]: 'esprima', [espreeParser]: 'espree', [eslintParser]: 'espree', }; const extractParserNameFromResolvedPath = (pathToParser) => { const [_, pathAfterNodeModules] = pathToParser.split('node_modules'); const separatorRegExp = /(\/|\\)/; const pathSegments = pathAfterNodeModules .split(separatorRegExp) .filter((segment) => Boolean(segment) && !separatorRegExp.test(segment)); const org = pathSegments[0].startsWith('@') ? pathSegments[0] : null; const packageName = org !== null ? pathSegments[1] : pathSegments[0]; if (org) { return `${org}/${packageName}`; } return packageName; }; exports.extractParserNameFromResolvedPath = extractParserNameFromResolvedPath; const assertCompatibleParser = (parserPath) => { const parser = (0, exports.extractParserNameFromResolvedPath)(parserPath); if (!exports.supportedParsers.includes(parser)) { throw new Error(`\nCodeQue does not support "${parser}" parser.\nSupported parsers are:\n- ${exports.supportedParsers.join('\n- ')}\nPlease open an issue to request parser support.\nVisit https://github.com/codeque-co/codeque/issues\n`); } return parser; }; exports.assertCompatibleParser = assertCompatibleParser;