Skip to content

feat(linter): add .oxlintrc.jsonc config file support#19870

Merged
camc314 merged 11 commits intooxc-project:mainfrom
shinmc:feat/oxlintrc-jsonc-support
Mar 3, 2026
Merged

feat(linter): add .oxlintrc.jsonc config file support#19870
camc314 merged 11 commits intooxc-project:mainfrom
shinmc:feat/oxlintrc-jsonc-support

Conversation

@shinmc
Copy link
Contributor

@shinmc shinmc commented Mar 1, 2026

Summary

  • Teach config discovery to recognize .oxlintrc.jsonc alongside .oxlintrc.json
  • JSONC parsing already works via json_strip_comments::strip() in Oxlintrc::from_file(), so this is purely a filename discovery change
  • Prefer .json over .jsonc when both exist in the same directory (matches oxfmt behavior)
  • Add .oxlintrc.jsonc to LSP file watch patterns
  • Update CLI help text, error messages, and diagnostic notes to mention .jsonc

Changes

File Change
apps/oxlint/src/lib.rs Add DEFAULT_JSONC_OXLINTRC_NAME constant
apps/oxlint/src/config_loader.rs Update discovery functions (find_configs_in_directory, to_discovered_config, try_load_config_from_dir, load_many) + add tests
apps/oxlint/src/lsp/server_linter.rs Add .jsonc to watch patterns and extended path filter + update tests
apps/oxlint/src/command/lint.rs Update CLI help text
apps/oxlint/src/lint.rs Update fallback error message

Test plan

  • cargo check -p oxlint — compiles cleanly
  • cargo test -p oxlint -- test_jsonc_config_discovery — new test: .oxlintrc.jsonc is discovered and loaded
  • cargo test -p oxlint -- test_json_preferred_over_jsonc — new test: .json preferred when both exist
  • cargo test -p oxlint -- test_watchers — all 10 watcher tests pass with updated pattern counts

Closes #19729

@shinmc shinmc requested a review from camc314 as a code owner March 1, 2026 10:14
@github-actions github-actions bot added A-linter Area - Linter A-cli Area - CLI C-enhancement Category - New feature or request labels Mar 1, 2026
@shinmc shinmc changed the title feat(oxlint): add .oxlintrc.jsonc config file support feat(linter): add .oxlintrc.jsonc config file support Mar 1, 2026
Teach the config discovery layer to recognize `.oxlintrc.jsonc` alongside
`.oxlintrc.json`. The JSONC parsing already works via `json_strip_comments`,
so this is purely a filename discovery change.

- Add `DEFAULT_JSONC_OXLINTRC_NAME` constant
- Update `find_configs_in_directory`, `to_discovered_config`,
  `try_load_config_from_dir`, and `load_many` to handle `.jsonc`
- Prefer `.json` over `.jsonc` when both exist (matches oxfmt behavior)
- Add `.oxlintrc.jsonc` to LSP file watch patterns
- Update CLI help text, error messages, and diagnostic notes
- Add unit tests for JSONC discovery and `.json` preference

Closes oxc-project#19729
@camc314 camc314 force-pushed the feat/oxlintrc-jsonc-support branch from 07ef41c to 52f1fb2 Compare March 3, 2026 13:42
@github-actions github-actions bot added the A-linter-plugins Area - Linter JS plugins label Mar 3, 2026
Copy link
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 self-assigned this Mar 3, 2026
@camc314 camc314 merged commit 2488a68 into oxc-project:main Mar 3, 2026
18 checks passed
camc314 pushed a commit that referenced this pull request Mar 9, 2026
# Oxlint
### 🚀 Features

- e6b604f oxlint: Auto-enable gitlab formatter on GitLab (#20076)
(camc314)
- 2488a68 linter: Add .oxlintrc.jsonc config file support (#19870)
(Scott S.)
- 61bf388 linter: Add `options.reportUnusedDisableDirectives` to config
file (#19799) (Peter Wagenet)
- c92422b oxlint: Auto-enable github formatter on GitHub Actions
(#19944) (Boshen)
- 0337c6d linter: Implement typescript/no-unecessary-type-conversion
(#19955) (camc314)
- 2919313 linter: Introduce denyWarnings config options (#19926)
(camc314)
- a607119 linter: Introduce maxWarnings config option (#19777) (camc314)

### 🐛 Bug Fixes

- 0861d9a linter/plugins: Remove getters from `Context` (#20115)
(overlookmotel)
- 92cfb14 linter/plugins: Fix types for `walkProgram` and
`walkProgramWithCfg` (#20081) (overlookmotel)
- 10e211f oxlint/lsp: Send other code actions besides `source.fixAll` if
requested (#20042) (Sysix)
- 602daaa linter/plugins: Fix type definition for `VisitorObject`
(#20065) (overlookmotel)
- ee0491e apps,napi: Explicitly specify libs in tsconfigs (#20071)
(camc314)
- b6e9499 linter: Fix the logic for `unicorn/prefer-dom-node-remove` to
handle literal callees as well as arguments. (#20059) (connorshea)
- 3874ae1 linter: Update `unicorn/prefer-query-selector` to also catch
`getElementsByName()`. (#20060) (connorshea)
- 77c93fb linter: Handle array-type shorthand inside union members
(#20034) (camc314)
- 50eb160 linter/no-unused-vars: Allow unused type params in ambient
module blocks (#19615) (Don Isaac)
- 1dd0d21 linter/no-restricted-imports: Apply regex pattern checks to
side-effect imports (#20028) (camc314)
- 7f3d735 linter: Error when --type-check is used without --type-aware
(#20025) (camc314)
- eea201c unicorn/prefer-string-slice: Avoid unsafe autofix for
substr-to-slice (#20010) (camc314)
- 50359dc oxlint/lsp: Detect `reportUnusedDisableDirectives` from oxlint
config, change lsp `unusedDisableDirectives` default value to `None`
(#20011) (Sysix)
- 4bc84b1 linter/plugins: Allow `null` and `undefined` for
`rule.meta.fixable` (#20008) (overlookmotel)
- 753e27e linter/role-supports-aria-props: Add `aria-posinset` to
supported `option` ARIA properties (#20003) (JongKyung Lee)
- f57b2c9 linter/plugins: Fix return types of tokens methods (#19985)
(overlookmotel)
- 27ee4fc linter/no-loss-of-precision: Avoid double rounding for
negative exponents (#19999) (camc314)
- 77a94bb linter: Avoid no-loss-of-precision false positive for 3e-308
(#19992) (camc314)
- 6245c56 linter/no-unused-private-class-members: Treat logical lhs
access as usage (#19991) (camc314)
- 65891e3 linter: Avoid prefer-const false positive for mixed-scope
destructuring (#19982) (camc314)
- 89991fe linter: Avoid prefer-const false positive for operator
reassignments (#19975) (camc314)
- 87318e7 oxlint/lsp: Load js config with reforcing fs read (#19551)
(Sysix)
- d40a942 linter/no-useless-constructor: Mark fixer as suggestion
(#19961) (camc314)
- ccbd959 linter/prefer-code-point: Report String.fromCharCode member
references (#19931) (camc314)
- 14fbbfc linter: Add help text to oxc/no-rest-spread-properties rule
(#19900) (Subin Kim)

### ⚡ Performance

- 2baa5fb napi: Unify build-test profile to coverage for cache sharing
(#20090) (Boshen)
- 77f1c71 linter/plugins: Make tokens class instances (#19980)
(overlookmotel)
- 758b424 linter/plugins: Reduce memory copies for tokens (#19979)
(overlookmotel)
- 236847f linter/plugins: Cache token objects (#19978) (overlookmotel)
- 94b597a linter/plugins: Store tokens as a `Box<[Token]>` (#19969)
(overlookmotel)

### 📚 Documentation

- 2c0010a linter/plugins: Move comment about "bivariance hack" into
generated code (#20082) (overlookmotel)
- 7538f09 linter: Improve `import/extensions` and
`import/no-named-as-default` rule docs. (#20053) (connorshea)
- 1f909cf linter: Improve docs for
`unicorn/require-post-message-target-origin` rule. (#20061) (connorshea)
- 12ae35c oxlint/lsp: Remove outdated ToDo for `LintOptions.run`
(#20012) (Sysix)
- 3be73e6 linter/plugins: Fix JSDoc comments for tokens methods (#20004)
(overlookmotel)
- 48ef285 linter: Update `--config` docs (#19965) (camc314)
- 6ea49a0 linter: Fix some identation issues for the generated types
used in `oxlint.config.ts`. (#19942) (connorshea)
- 6c0e0b5 linter: Add oxlint.config.ts to the config docs. (#19941)
(connorshea)
- 160e423 linter: Add a note that the typeAware and typeCheck options
require oxlint-tsgolint (#19940) (connorshea)
- d54c275 linter: Improve rule docs for 27 unicorn rules (#19903)
(connorshea)
# Oxfmt
### 🚀 Features

- ee26215 oxfmt: Support css-in-js substitution (#20019) (leaysgur)
- 0f0ff51 oxfmt: Display default settings was used message in cli stats
(#19939) (leaysgur)
- 88815b8 oxfmt: Reintroduce stats line for write mode (#19938)
(leaysgur)

### 🐛 Bug Fixes

- ee0491e apps,napi: Explicitly specify libs in tsconfigs (#20071)
(camc314)
- 92f4490 oxfmt: Apply `is_ignored_dir` for glob paths too (#20056)
(leaysgur)
- 114f974 oxfmt/lsp: Prefer language_id over file extension when
formatting (#19977) (copilot-swe-agent)

### ⚡ Performance

- 2baa5fb napi: Unify build-test profile to coverage for cache sharing
(#20090) (Boshen)

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 A-linter-plugins Area - Linter JS plugins C-enhancement Category - New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

oxlint config: support .oxlintrc.jsonc

2 participants