From de72cc233b6cd976436cffd443500d47fde3e7b2 Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 23 Jan 2021 11:21:14 +0800 Subject: [PATCH 1/2] Simplify report logic --- eslint-plugin-prettier.js | 105 ++++++++------------------------------ 1 file changed, 21 insertions(+), 84 deletions(-) diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index fd7e453c..7cfbef2f 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -32,71 +32,26 @@ let prettier; // ------------------------------------------------------------------------------ /** - * Reports an "Insert ..." issue where text must be inserted. + * Reports difference. * @param {RuleContext} context - The ESLint rule context. - * @param {number} offset - The source offset where to insert text. - * @param {string} text - The text to be inserted. + * @param {Difference} difference - The difference object. * @returns {void} */ -function reportInsert(context, offset, text) { - const pos = context.getSourceCode().getLocFromIndex(offset); - const range = [offset, offset]; - context.report({ - message: 'Insert `{{ code }}`', - data: { code: showInvisibles(text) }, - loc: { start: pos, end: pos }, - fix(fixer) { - return fixer.insertTextAfterRange(range, text); - } - }); -} - -/** - * Reports a "Delete ..." issue where text must be deleted. - * @param {RuleContext} context - The ESLint rule context. - * @param {number} offset - The source offset where to delete text. - * @param {string} text - The text to be deleted. - * @returns {void} - */ -function reportDelete(context, offset, text) { - const start = context.getSourceCode().getLocFromIndex(offset); - const end = context.getSourceCode().getLocFromIndex(offset + text.length); - const range = [offset, offset + text.length]; - context.report({ - message: 'Delete `{{ code }}`', - data: { code: showInvisibles(text) }, - loc: { start, end }, - fix(fixer) { - return fixer.removeRange(range); - } - }); -} - -/** - * Reports a "Replace ... with ..." issue where text must be replaced. - * @param {RuleContext} context - The ESLint rule context. - * @param {number} offset - The source offset where to replace deleted text - with inserted text. - * @param {string} deleteText - The text to be deleted. - * @param {string} insertText - The text to be inserted. - * @returns {void} - */ -function reportReplace(context, offset, deleteText, insertText) { - const start = context.getSourceCode().getLocFromIndex(offset); - const end = context - .getSourceCode() - .getLocFromIndex(offset + deleteText.length); +function reportDifference(context, difference) { + const { operation, offset, deleteText = '', insertText = '' } = difference; const range = [offset, offset + deleteText.length]; + const [start, end] = range.map(index => + context.getSourceCode().getLocFromIndex(index) + ); + context.report({ - message: 'Replace `{{ deleteCode }}` with `{{ insertCode }}`', + messageId: operation, data: { - deleteCode: showInvisibles(deleteText), - insertCode: showInvisibles(insertText) + deleteText: showInvisibles(deleteText), + insertText: showInvisibles(insertText) }, loc: { start, end }, - fix(fixer) { - return fixer.replaceTextRange(range, insertText); - } + fix: fixer => fixer.replaceTextRange(range, insertText) }); } @@ -143,7 +98,12 @@ module.exports = { }, additionalProperties: true } - ] + ], + messages: { + [DELETE]: 'Delete `{{ deleteText }}`', + [INSERT]: 'Insert `{{ insertText }}`', + [REPLACE]: 'Replace `{{ deleteText }}` with `{{ insertText }}`' + } }, create(context) { const usePrettierrc = @@ -263,32 +223,9 @@ module.exports = { if (source !== prettierSource) { const differences = generateDifferences(source, prettierSource); - differences.forEach(difference => { - switch (difference.operation) { - case INSERT: - reportInsert( - context, - difference.offset, - difference.insertText - ); - break; - case DELETE: - reportDelete( - context, - difference.offset, - difference.deleteText - ); - break; - case REPLACE: - reportReplace( - context, - difference.offset, - difference.deleteText, - difference.insertText - ); - break; - } - }); + for (const difference of differences) { + reportDifference(context, difference); + } } } }; From 7a351df07a579ba1226bb79ebe870688ff8e0bfc Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 23 Jan 2021 11:28:58 +0800 Subject: [PATCH 2/2] Update JSDOC --- eslint-plugin-prettier.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eslint-plugin-prettier.js b/eslint-plugin-prettier.js index 7cfbef2f..5916b5cd 100644 --- a/eslint-plugin-prettier.js +++ b/eslint-plugin-prettier.js @@ -32,9 +32,9 @@ let prettier; // ------------------------------------------------------------------------------ /** - * Reports difference. - * @param {RuleContext} context - The ESLint rule context. - * @param {Difference} difference - The difference object. + * Reports a difference. + * @param {import('eslint').Rule.RuleContext} context - The ESLint rule context. + * @param {import('prettier-linter-helpers').Difference} difference - The difference object. * @returns {void} */ function reportDifference(context, difference) { @@ -100,8 +100,8 @@ module.exports = { } ], messages: { - [DELETE]: 'Delete `{{ deleteText }}`', [INSERT]: 'Insert `{{ insertText }}`', + [DELETE]: 'Delete `{{ deleteText }}`', [REPLACE]: 'Replace `{{ deleteText }}` with `{{ insertText }}`' } },