feat(linter): implement import/newline-after-import rule#19142
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds the import/newline-after-import lint rule to oxc_linter, mirroring the behavior of eslint-plugin-import’s newline-after-import, including autofix support and snapshot-based tests.
Changes:
- Implement
import/newline-after-importwith support forcount,exactCount, andconsiderComments, plus fixes for missing blank lines. - Add comprehensive rule tests (pass/fail/fix) and update the corresponding snapshot output.
- Register the new rule in the linter rule module list and generated rule wiring (enum + runner impls).
Reviewed changes
Copilot reviewed 3 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| crates/oxc_linter/src/rules/import/newline_after_import.rs | New rule implementation + tests and fixer logic. |
| crates/oxc_linter/src/snapshots/import_newline_after_import.snap | Snapshot outputs for the new rule’s diagnostics/fixes. |
| crates/oxc_linter/src/rules.rs | Exposes the new rule module under import. |
| crates/oxc_linter/src/generated/rules_enum.rs | Registers the rule in the generated rule enum and metadata plumbing. |
| crates/oxc_linter/src/generated/rule_runner_impls.rs | Adds the generated RuleRunner impl for run-once execution. |
Merging this PR will not alter performance
Comparing Footnotes
|
8fde86e to
9e5e2cd
Compare
|
Any updates? |
|
@camc314 I've improved the performance, so please review it when you have a moment. The performance degradation in the local environment is kept within 3%. |
2f90c16 to
6c7a3eb
Compare
# Oxlint ### 🚀 Features - 1ae291e linter/no-underscore-dangle: Add `allowInUsingDeclarations` option (#22483) (吴杨帆) - 0440b0f linter/eslint: Implement `id-match` rule (#22379) (Vladislav Sayapin) - 65bf119 linter: Implement react no-object-type-as-default-prop (#22481) (uhyo) - 2a6ddce linter/eslint: Implement `no-implied-eval` rule (#22391) (Vladislav Sayapin) - d3a3c1d linter: Auto detect agents from CLI and transition to the agent output format (#22068) (Jovi De Croock) - 625758a linter/vitest: Implement padding-around-after-all-blocks rule (#21788) (kapobajza) - 37680b0 linter: Implement react no-unstable-nested-components (#22248) (Jovi De Croock) - d8d9c74 linter: Implement import/newline-after-import rule (#19142) (Ryuya Yanagi) ### 🐛 Bug Fixes - 3f59e03 linter: Only call rayon/miette/tracing inits once (#21899) (Matiss Janis Aboltins) - 602dfd6 linter/promise/no-return-wrap: Detect Promise calls in all branches (#22474) (zennnnnnn11) - e182aee linter: Allow dialogs and popovers for no_autofocus (#22289) (mehm8128) - 7ffb710 linter/jest/vitest: Jest/no-standalone-expect ignores additionalTestBlockFunctions option for jest/vitest hooks (#22477) (kapobajza) - c6f2d3f linter: Add more expression support for iframe-has-title (#22460) (mehm8128) - 5747ff1 linter: Avoid enabling jest with vitest plugin (#22499) (camc314) - 863984f linter/no-find-dom-node: Run on all files (#22479) (bab) ### ⚡ Performance - 2afef79 linter: Optimize `no-loop-func` (#22491) (camchenry) - 4c9ca72 oxlint: Align walker thread count with rayon pool (#22494) (Boshen) ### 📚 Documentation - f7967c7 linter/id-match: Clarify `onlyDeclarations` config docs (#22523) (camc314) - 1e0c97f linter: Fix closing code block in documentation for `padding-around-after-all-blocks` rule. (#22513) (connorshea) - a9049fd linter: Exclude directly provide autoFocus to dialog pattern (#22510) (mehm8128) # Oxfmt ### 🐛 Bug Fixes - 8ee946f formatter/sort_imports: Use label to classify lines (#22512) (leaysgur) - 8c1da44 formatter: Normalize destructuring keys in DCR (#22478) (camc314)
Implemented the
import/newline-after-importrule.Related issues
#1117
Disclose AI usage
This PR was written with assistance from Codex.