@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
JavaScript
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;
;