Skip to content

fix(oxlint): don't search for nested config outside base config#21051

Merged
graphite-app[bot] merged 1 commit intomainfrom
04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd
Apr 5, 2026
Merged

fix(oxlint): don't search for nested config outside base config#21051
graphite-app[bot] merged 1 commit intomainfrom
04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd

Conversation

@Sysix
Copy link
Copy Markdown
Member

@Sysix Sysix commented Apr 4, 2026

Fixes #21030, Fixes #20904, Obsoletes #21041

Nested config search did include the configs outside the current working directory. Resolving the config did find first the nested config outside the cwd, before falling back to the base config.

Copy link
Copy Markdown
Member Author

Sysix commented Apr 4, 2026


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • 0-merge - adds this PR to the back of the merge queue
  • hotfix - for urgent changes, fast-track this PR to the front of the merge queue

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

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

This PR fixes oxlint nested config discovery so that configs located outside the current working directory (cwd) are not considered during nested config resolution, addressing reported cases where parent/out-of-tree configs incorrectly took precedence at lint time.

Changes:

  • Bound nested config ancestor-walk discovery to stop at cwd during CLI config loading.
  • Updated CLI nested-config snapshot expectation to reflect the corrected config resolution outcome.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
apps/oxlint/src/config_loader.rs Stops ancestor discovery at cwd when collecting nested configs for CLI runs.
apps/oxlint/src/snapshots/fixtures__cli__nested_config__package4-as-cwd_@oxlint.snap Updates expected CLI output for the nested-config fixture to match the new resolution behavior.

Comment thread apps/oxlint/src/config_loader.rs
Comment thread apps/oxlint/src/config_loader.rs
@Sysix Sysix force-pushed the 04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd branch from 28ca72d to 9b3c01f Compare April 4, 2026 19:34
Comment thread apps/oxlint/src/config_loader.rs Outdated
@Sysix Sysix force-pushed the 04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd branch 2 times, most recently from 2a7daca to 1bab5e0 Compare April 4, 2026 19:44
@Sysix Sysix requested a review from Copilot April 4, 2026 19:45
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

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

@Sysix Sysix marked this pull request as ready for review April 4, 2026 19:49
@Sysix Sysix requested a review from camc314 as a code owner April 4, 2026 19:49
@Sysix Sysix force-pushed the 04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd branch from 1bab5e0 to 69594fa Compare April 4, 2026 19:51
@Sysix Sysix changed the title fix(oxlint): don't search for nested config outside cwd fix(oxlint): don't search for nested config outside base config Apr 4, 2026
@alexkuz
Copy link
Copy Markdown

alexkuz commented Apr 4, 2026

Since you're fixing nested configs, would you mind looking at these tests?
(they are not the part of any PR currently)

alexkuz@99df23f

one of them is passing now but the other one (test_run_from_nested_dir_with_root_type_aware) is still failing.

@Sysix
Copy link
Copy Markdown
Member Author

Sysix commented Apr 4, 2026

@alexkuz I would expect it to fail. The "base" config is searching from the current cwd (which you defined as "nested"), or you pass it with --config <path>.
Looking it upwards beside the cwd, will create new problems.
What if you have a setup like:

- ~/.oxlintrc.json // home dir
- ~/project/.oxlintrc.json // project dir

And then you lint from ~/project, I would expect that the project config will still be the base config.
Feel free to create a new issue for this, specially because it effects the typeAware/Check option.

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.

Thank you! 🙏

@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

Fixes #21030, Fixes #20904, Obsoletes #21041

Nested config search did include the configs outside the current working directory. Resolving the config did find first the nested config outside the `cwd`, before falling back to the base config.
@graphite-app graphite-app Bot force-pushed the 04-04-test_oxlint_add_test_for_nested_config_with_cwd branch from e786c1b to 2113329 Compare April 5, 2026 11:49
@graphite-app graphite-app Bot force-pushed the 04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd branch from 69594fa to 64a1a7e Compare April 5, 2026 11:50
Base automatically changed from 04-04-test_oxlint_add_test_for_nested_config_with_cwd to main April 5, 2026 11:54
@graphite-app graphite-app Bot merged commit 64a1a7e into main Apr 5, 2026
25 checks passed
@graphite-app graphite-app Bot deleted the 04-04-fix_oxlint_don_t_search_for_nested_config_outside_cwd branch April 5, 2026 11:56
@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

5 participants