Skip to content

Commit

Permalink
Simplify report logic (#380)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Jan 31, 2021
1 parent 3ea4242 commit d993f24
Showing 1 changed file with 22 additions and 85 deletions.
107 changes: 22 additions & 85 deletions eslint-plugin-prettier.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,71 +32,26 @@ let prettier;
// ------------------------------------------------------------------------------

/**
* Reports an "Insert ..." issue where text must be inserted.
* @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.
* 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 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)
});
}

Expand Down Expand Up @@ -143,7 +98,12 @@ module.exports = {
},
additionalProperties: true
}
]
],
messages: {
[INSERT]: 'Insert `{{ insertText }}`',
[DELETE]: 'Delete `{{ deleteText }}`',
[REPLACE]: 'Replace `{{ deleteText }}` with `{{ insertText }}`'
}
},
create(context) {
const usePrettierrc =
Expand Down Expand Up @@ -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);
}
}
}
};
Expand Down

0 comments on commit d993f24

Please sign in to comment.