fix: remove unnecessary semicolon from fixes #19857
Merged
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 autofix to a rule
[ ] Add a CLI option
[ ] Add something to the core
[ ] Other, please explain:
Tell us about your environment (
npx eslint --env-info
):Node version: v24.2.0
npm version: v11.3.0
Local ESLint version: v9.24.0 - v9.29.0
Global ESLint version:
Operating System: darwin 24.5.0
What parser are you using (place an "X" next to just one item)?
[X]
Default (Espree)
[ ]
@typescript-eslint/parser
[ ]
@babel/eslint-parser
[ ]
vue-eslint-parser
[ ]
@angular-eslint/template-parser
[ ]
Other
Please show your full configuration:
Configuration
What did you do? Please include the actual source code causing the issue.
Playground Link
What did you expect to happen?
The autofix for the above code should not introduce a semicolon between the let declaration and the following statement, i.e. the fixed code should look like this:
What actually happened? Please include the actual, raw output from ESLint.
The autofixed code includes an additional semicolon:
What changes did you make? (Give an overview)
This pull requests affects autofixes and suggestions provided by
no-array-constructor
andno-object-constructor
. In some cases, mostly related to TypeScript syntax, the rules would previously insert an unnecessary semicolon before the fixed code. The logic to determine if a semicolon is necessary resides in theneedsPrecedingSemicolon
function in lib/rules/utils/ast-utils.js. This function was updated to handle cases where an expression statement is predeced by:This change affects autofixes and suggestions provided by
no-array-constructor
andno-object-constructor
.These are some examples of code where the mentioned rules will no longer add a semicolon before an array or object literal that replaces
new Array()
ornew Object()
:Playground Link
More examples for code that will no longer have a semicolon added before the next statement can be found in the unit tests for
no-array-constructor
:eslint/tests/lib/rules/no-array-constructor.js
Lines 990 to 1006 in 0d3d4bd
Is there anything you'd like reviewers to focus on?