Update: remove suggestion if it didn't provide a fix (fixes #13723) #13772
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Prerequisites checklist
What is the purpose of this pull request? (put an "X" next to an item)
[ ] Documentation update
[X] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofixing to a rule
[ ] Add a CLI option
[ ] Add something to the core
[ ] Other, please explain:
fixes #13723
Marked this change as an "Update", because it can cause some existing tests in plugins to fail.
What changes did you make? (Give an overview)
Modified
ReportTranslator
to automatically remove the whole suggestion instance from the linting output if the suggestion'sfix
function returnednull
or an empty array/sequence.Context:
This change prevents invalid lint messages.
ESLint API defines
Suggestion#fix
as a mandatory field in a LintMessage. This means that all suggestions produced by the linting must include fixes. Integrations, following the spec, expect that this property exists and has a validEditInfo
value. For example, VSCode crashes if it isnull
.ReportTranslator
already throws if thefix
property in a suggestion object provided by the rule isn't afunction
, but it wasn't checking the value returned from that function.It's still allowed to
return null
orreturn []
fromfix()
, or yield nothing from*fix()
, as an indicator that suggestion's fix cannot be applied. This is a commonly used pattern in auto-fixfix
functions (e.g., when it finds out that some comments in the code are interfering with the fix).After this change, instead of creating an invalid suggestion object with
fix: null
, the whole suggestion will be removed from the final output. If there are multiple suggestions for the same error, only those that didn't provide a fix will be removed.Is there anything you'd like reviewers to focus on?