Skip to content

fix(oxlint/lsp): skip node_modules in oxlint config walker#21004

Merged
graphite-app[bot] merged 1 commit intomainfrom
copilot/fix-oxlint-lsp-config-walker
Apr 5, 2026
Merged

fix(oxlint/lsp): skip node_modules in oxlint config walker#21004
graphite-app[bot] merged 1 commit intomainfrom
copilot/fix-oxlint-lsp-config-walker

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 3, 2026

The LSP config walker (discover_configs_in_tree) descended into node_modules, picking up oxlint configs from dependencies and treating them as project configs. These should always be ignored.

Changes

  • apps/oxlint/src/config_loader.rs: Return WalkState::Skip in ConfigWalkCollector::visit when the entry is a node_modules directory, preventing descent entirely
  • Added NODE_MODULES_DIR constant
  • Added test_discover_configs_skips_node_modules to assert configs under node_modules/ are excluded while sibling nested configs are still discovered

@Sysix Sysix changed the title fix(lsp): skip node_modules in oxlint config walker fix(oxlint/lsp): skip node_modules in oxlint config walker Apr 3, 2026
@github-actions github-actions bot added A-linter Area - Linter A-cli Area - CLI C-bug Category - Bug labels Apr 3, 2026
@Sysix Sysix requested a review from Copilot April 3, 2026 17:39
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Prevents the oxlint LSP config discovery walk (discover_configs_in_tree) from descending into node_modules, avoiding accidental discovery of oxlint configs shipped inside dependencies.

Changes:

  • Added an early-return WalkState::Skip in the parallel walker visitor when encountering a node_modules directory.
  • Introduced a NODE_MODULES_DIR constant for the directory name.
  • Added a unit test ensuring configs under node_modules/ are excluded while legitimate nested configs are still discovered.

@Sysix Sysix marked this pull request as ready for review April 3, 2026 17:43
@Sysix Sysix requested a review from camc314 as a code owner April 3, 2026 17:43
Copy link
Copy Markdown
Contributor

@camc314 camc314 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Sysix should we respect --no-ignore here? and search node_modules when it's provided?

Ah wait this is for the LSp

@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label Apr 5, 2026
Copy link
Copy Markdown
Contributor

camc314 commented Apr 5, 2026

Merge activity

The LSP config walker (`discover_configs_in_tree`) descended into `node_modules`, picking up oxlint configs from dependencies and treating them as project configs. These should always be ignored.

## Changes

- **`apps/oxlint/src/config_loader.rs`**: Return `WalkState::Skip` in `ConfigWalkCollector::visit` when the entry is a `node_modules` directory, preventing descent entirely
- Added `NODE_MODULES_DIR` constant
- Added `test_discover_configs_skips_node_modules` to assert configs under `node_modules/` are excluded while sibling nested configs are still discovered
@graphite-app graphite-app bot force-pushed the copilot/fix-oxlint-lsp-config-walker branch from e46cf91 to 9446dcc Compare April 5, 2026 13:24
@graphite-app graphite-app bot merged commit 9446dcc into main Apr 5, 2026
24 checks passed
@graphite-app graphite-app bot deleted the copilot/fix-oxlint-lsp-config-walker branch April 5, 2026 13:29
@graphite-app graphite-app bot removed the 0-merge Merge with Graphite Merge Queue label Apr 5, 2026
leaysgur pushed a commit that referenced this pull request Apr 7, 2026
# Oxlint
### 💥 BREAKING CHANGES

- 22ce6af oxlint/lsp: [**BREAKING**] Show/fix safe suggestions by
default (#19816) (Sysix)

### 🚀 Features

- 7a7b7b8 oxlint/lsp: Add source.fixAllDangerous.oxc code action kind
(#20526) (bab)
- 9cfe57e linter/unicorn: Implement prefer-import-meta-properties rule
(#20662) (Irfan - ئىرفان)
- 1edb391 linter/eslint: Implement `no-restricted-exports` rule (#20592)
(Nicolas Le Cam)
- 0f12bcd linter/react: Implement `hook-use-state` rule (#20986) (Khaled
Labeb)
- 1513a9f oxlint/lsp: Show note field for lsp diagnostic (#20983)
(Sysix)
- 7fdf722 linter/unicorn: Implement `no-useless-iterator-to-array` rule
(#20945) (Mikhail Baev)
- 39c8f2c linter/jest: Implement padding-around-after-all-blocks
(#21034) (Sapphire)
- ac39e51 linter/eslint-vitest-plugin: Prefer importing vitest globals
(#20960) (Said Atrahouch)
- 0b84de1 oxlint: Support allow option for prefer-promise-reject-errors
(#20934) (camc314)
- 23db851 linter/consistent-return: Move rule from nursery to suspicious
(#20920) (camc314)
- 9a27e32 linter/no-unnecessary-type-conversion: Move rule from nursery
to suspicious (#20919) (camc314)
- 1ca7b58 linter/dot-notation: Move rule from nursery to style (#20918)
(camc314)
- 73ba81a linter/consistent-type-exports: Move rule from nursery to
style (#20917) (camc314)
- b9199b1 linter/unicorn: Implement switch-case-break-position (#20872)
(Mikhail Baev)
- 3435ff8 linter: Implements `prefer-snapshot-hint` rule in Jest and
Vitest (#20870) (Said Atrahouch)
- 98510d2 linter: Implement react/prefer-function-component (#19652)
(Connor Shea)
- 871f9d9 linter: Implement no-useless-assignment (#15466) (Zhaoting
Zhou)
- 0f01fbd linter: Implement eslint/object-shorthand (#17688) (yue)

### 🐛 Bug Fixes

- dd2df87 npm: Export package.json for oxlint and oxfmt (#20784) (kazuya
kawaguchi)
- 9bc77dd linter/no-unused-private-class-members: False positive with
await expr (#21067) (camc314)
- 60a57cd linter/const-comparisons: Detect equality contradictions
(#21065) (camc314)
- 2bb2be2 linter/no-array-index-key: False positive when index is passed
as function argument (#21012) (bab)
- 6492953 linter/no-this-in-sfc: Only flag `this` used as member
expression object (#20961) (bab)
- 9446dcc oxlint/lsp: Skip `node_modules` in oxlint config walker
(#21004) (copilot-swe-agent)
- af89923 linter/no-namespace: Support glob pattern matching against
basename (#21031) (bab)
- 64a1a7e oxlint: Don't search for nested config outside base config
(#21051) (Sysix)
- 3b953bc linter/button-has-type: Ignore `document.createElement` calls
(#21008) (Said Atrahouch)
- 8c36070 linter/unicorn: Add support for `Array.from()` for
`prefer-set-size` rule (#21016) (Mikhail Baev)
- c1a48f0 linter: Detect vitest import from vite-plus/test (#20976)
(Said Atrahouch)
- 5c32fd1 lsp: Prevent corrupted autofix output from overlapping text
edits (#19793) (Peter Wagenet)
- ca79960 linter/no-array-index-key: Move span to `key` property
(#20947) (camc314)
- 2098274 linter: Add suggestion for `jest/prefer-equality-matcher`
(#20925) (eryue0220)
- 6eb77ec linter: Allow default-import barrels in import/named (#20757)
(Bazyli Brzóska)
- 9c218ef linter/eslint-vitest-plugin: Remove pending fix status for
require-local-test-context-for-concurrent-snapshot (#20890) (Said
Atrahouch)

### ⚡ Performance

- fb52383 napi/parser, linter/plugins: Clear buffers and source texts
earlier (#21025) (overlookmotel)
- 3b7dec4 napi/parser, linter/plugins: Use `utf8Slice` for decoding
UTF-8 strings (#21022) (overlookmotel)
- 012c924 napi/parser, linter/plugins: Speed up decoding strings in raw
transfer (#21021) (overlookmotel)
- 55e1e9b napi/parser, linter/plugins: Initialize vars as 0 (#21020)
(overlookmotel)
- c25ef02 napi/parser, linter/plugins: Simplify branch condition in
`deserializeStr` (#21019) (overlookmotel)
- 9f494c3 napi/parser, linter/plugins: Raw transfer use
`String.fromCharCode` in string decoding (#21018) (overlookmotel)
- 0503a78 napi/parser, linter/plugins: Faster deserialization of `raw`
fields (#20923) (overlookmotel)
- a24f75e napi/parser: Optimize string deserialization for non-ASCII
sources (#20834) (Joshua Tuddenham)

### 📚 Documentation

- af72b80 oxlint: Fix typo for --tsconfig (#20889) (leaysgur)
- 70c53b1 linter: Highlight that tsconfig is not respected in type aware
linting (#20884) (camc314)
# Oxfmt
### 🚀 Features

- 35cf6e8 oxfmt: Add node version hint for ts config import failures
(#21046) (camc314)

### 🐛 Bug Fixes

- dd2df87 npm: Export package.json for oxlint and oxfmt (#20784) (kazuya
kawaguchi)
- 9d45511 oxfmt: Propagate file write errors instead of panicking
(#20997) (leaysgur)
- 139ddd9 formatter: Handle leading comment after array elision (#20987)
(leaysgur)
- 4216380 oxfmt: Support `.editorconfig` `tab_width` fallback (#20988)
(leaysgur)
- d10df39 formatter: Resolve pending space in fits measurer before
expanded-mode early exit (#20954) (Dunqing)
- f9ef1bd formatter: Avoid breaking after `=>` when arrow body has JSDoc
type cast (#20857) (bab)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-cli Area - CLI A-linter Area - Linter C-bug Category - Bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants