UNPKG

prettylint

Version:
52 lines (51 loc) 1.97 kB
import { LinesAndColumns } from "lines-and-columns"; import * as utils from "prettier-linter-helpers"; export var Operation; (function (Operation) { Operation[Operation["Delete"] = 0] = "Delete"; Operation[Operation["Insert"] = 1] = "Insert"; Operation[Operation["Replace"] = 2] = "Replace"; })(Operation || (Operation = {})); export function diagnose(input, output) { return utils .generateDifferences(input, output) .map((difference) => { const { offset: startOffset, deleteText = "", insertText = "", } = difference; const endOffset = startOffset + deleteText.length; const insertCode = utils.showInvisibles(insertText); const deleteCode = utils.showInvisibles(deleteText); let message; let operation; switch (difference.operation) { case "delete": operation = Operation.Delete; message = `Delete \`${deleteCode}\``; break; case "insert": operation = Operation.Insert; message = `Insert \`${insertCode}\``; break; case "replace": operation = Operation.Replace; message = `Replace \`${deleteCode}\` with \`${insertCode}\``; break; /* c8 ignore start */ default: throw new Error(`Unexpected operation '${difference.operation}'`); /* c8 ignore stop */ } const locator = new LinesAndColumns(input); const getLocation = (offset) => { const { line, column } = locator.locationForIndex(offset); return { line: line + 1, column: column + 1, offset }; }; return { start: getLocation(startOffset), end: getLocation(endOffset), message, operation, insertText: insertText, deleteText: deleteText, }; }); }