UNPKG

eslint-interactive

Version:

The CLI tool to run `eslint --fix` for each rule

62 lines 2.43 kB
import { traverse } from 'estraverse'; import { unreachable } from '../util/type-check.js'; /** * Check the node is the source of the message. */ function isMessageSourceNode(sourceCode, node, message) { // eslint-disable-next-line @typescript-eslint/no-deprecated -- TODO: Do not use `nodeType` in the future. if (message.nodeType === undefined) return false; // In some cases there may be no `endLine` or `endColumn`. if (message.endLine === undefined || message.endColumn === undefined) return false; // If `nodeType` is exists, `range` must be exists. if (node.range === undefined) return unreachable(); const index = sourceCode.getIndexFromLoc({ line: message.line, // NOTE: `column` of `ESLint.LintMessage` is 1-based, but `column` of `ESTree.Position` is 0-based. column: message.column - 1, }); const endIndex = sourceCode.getIndexFromLoc({ line: message.endLine, // NOTE: `column` of `ESLint.LintMessage` is 1-based, but `column` of `ESTree.Position` is 0-based. column: message.endColumn - 1, }); // eslint-disable-next-line @typescript-eslint/no-deprecated -- TODO: Do not use `nodeType` in the future. const nodeType = message.nodeType; return node.range[0] === index && node.range[1] === endIndex && node.type === nodeType; } function getMessageToSourceNode(sourceCode, messages) { const result = new Map(); traverse(sourceCode.ast, { // Required to traverse extension nodes such as `JSXElement`. fallback: 'iteration', enter(node) { for (const message of messages) { if (isMessageSourceNode(sourceCode, node, message)) { result.set(message, node); } } }, }); return result; } function generateFixes(context, args) { const messageToNode = getMessageToSourceNode(context.sourceCode, context.messages); const fixes = []; for (const message of context.messages) { const node = messageToNode.get(message) ?? null; const fix = args.fixableMaker(message, node, context); if (fix) fixes.push(fix); } return fixes; } /** * Create fix to make fixable and fix. */ export function createFixToMakeFixableAndFix(context, args) { return generateFixes(context, args); } //# sourceMappingURL=make-fixable-and-fix.js.map