Skip to content

feat(linter): Improve the oxlint config generated by --init.#20632

Merged
graphite-app[bot] merged 1 commit intomainfrom
better-init
Mar 25, 2026
Merged

feat(linter): Improve the oxlint config generated by --init.#20632
graphite-app[bot] merged 1 commit intomainfrom
better-init

Conversation

@connorshea
Copy link
Copy Markdown
Member

Motivated by #20614, and my own opinion for the last while that the init flag produced a config that was far too verbose.

AI Disclosure: Generated the change with Claude Code, fully reviewed, guided, and tested by me.

Before:

{
  "plugins": null,
  "categories": {},
  "rules": {},
  "settings": {
    "jsx-a11y": {
      "polymorphicPropName": null,
      "components": {},
      "attributes": {}
    },
    "next": {
      "rootDir": []
    },
    "react": {
      "formComponents": [],
      "linkComponents": [],
      "version": null,
      "componentWrapperFunctions": []
    },
    "jsdoc": {
      "ignorePrivate": false,
      "ignoreInternal": false,
      "ignoreReplacesDocs": true,
      "overrideReplacesDocs": true,
      "augmentsExtendsReplacesDocs": false,
      "implementsReplacesDocs": false,
      "exemptDestructuredRootsFromChecks": false,
      "tagNamePreference": {}
    },
    "vitest": {
      "typecheck": false
    }
  },
  "env": {
    "builtin": true
  },
  "globals": {},
  "ignorePatterns": []
}

After this PR:

{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": [
    "typescript",
    "unicorn",
    "oxc"
  ],
  "categories": {
    "correctness": "error"
  },
  "rules": {},
  "env": {
    "builtin": true
  }
}

Also adds a snapshot test for the output of the --init flag, to ensure that we'll know if we change it in the future.

I realize this technically is also a change in that correctness defaults to warn in oxlint with no config file, but I think that's a bad default so I changed it :) We can change it back if we really want to.

When running the snapshot tests I also got a warning about the old insta format being used for one of the snaps, so I force-regen'd them all, which is the reason for a few misc changes in this PR.

@github-actions github-actions bot added A-linter Area - Linter A-cli Area - CLI A-formatter Area - Formatter C-enhancement Category - New feature or request labels Mar 22, 2026
@johnpyp
Copy link
Copy Markdown

johnpyp commented Mar 22, 2026

Could this also default to jsonc, and include comments for anything unclear? (builtin: true would be an example of a place where a comment would be good imo)

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.

nice!

@camc314 camc314 self-assigned this Mar 25, 2026
@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label Mar 25, 2026
Copy link
Copy Markdown
Contributor

camc314 commented Mar 25, 2026

Merge activity

Motivated by #20614, and my own opinion for the last while that the init flag produced a config that was far too verbose.

AI Disclosure: Generated the change with Claude Code, fully reviewed, guided, and tested by me.

Before:

```jsonc
{
  "plugins": null,
  "categories": {},
  "rules": {},
  "settings": {
    "jsx-a11y": {
      "polymorphicPropName": null,
      "components": {},
      "attributes": {}
    },
    "next": {
      "rootDir": []
    },
    "react": {
      "formComponents": [],
      "linkComponents": [],
      "version": null,
      "componentWrapperFunctions": []
    },
    "jsdoc": {
      "ignorePrivate": false,
      "ignoreInternal": false,
      "ignoreReplacesDocs": true,
      "overrideReplacesDocs": true,
      "augmentsExtendsReplacesDocs": false,
      "implementsReplacesDocs": false,
      "exemptDestructuredRootsFromChecks": false,
      "tagNamePreference": {}
    },
    "vitest": {
      "typecheck": false
    }
  },
  "env": {
    "builtin": true
  },
  "globals": {},
  "ignorePatterns": []
}
```

After this PR:

```jsonc
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": [
    "typescript",
    "unicorn",
    "oxc"
  ],
  "categories": {
    "correctness": "error"
  },
  "rules": {},
  "env": {
    "builtin": true
  }
}
```

Also adds a snapshot test for the output of the `--init` flag, to ensure that we'll know if we change it in the future.

I realize this _technically_ is also a change in that correctness defaults to `warn` in oxlint with no config file, but I think that's a bad default so I changed it :) We can change it back if we really want to.

When running the snapshot tests I also got a warning about the old insta format being used for one of the snaps, so I force-regen'd them all, which is the reason for a few misc changes in this PR.
@graphite-app graphite-app bot merged commit f44adfa into main Mar 25, 2026
24 checks passed
@graphite-app graphite-app bot deleted the better-init branch March 25, 2026 22:32
@graphite-app graphite-app bot removed the 0-merge Merge with Graphite Merge Queue label Mar 25, 2026
graphite-app bot pushed a commit that referenced this pull request Mar 30, 2026
# Oxlint
### 💥 BREAKING CHANGES

- c0ebbce linter: [**BREAKING**] Report error on unknown builtin rule (#20464) (camc314)

### 🚀 Features

- 04f85e5 linter/no-unused-vars: Add safe-fix option for import fixes (#20839) (Marcell Toth)
- 32a3706 linter/eslint-vitest-plugin: Implements `require-test-timeout` rule (#20806) (Said Atrahouch)
- ae03653 linter: Implement suggestion for `eslint/no-useless-computed-key` rule (#20805) (Mikhail Baev)
- 6624513 linter/prefer-string-starts-ends-with: Move rule from nursery to style (#20797) (camc314)
- 58941f8 linter/prefer-readonly: Move rule from nursery to style (#20796) (camc314)
- 8837ffd linter/prefer-regexp-exec: Move rule from nursery to style (#20795) (camc314)
- 7e88871 linter/prefer-find: Move rule out of nursery (#20794) (camc314)
- ca6e5bc linter/vitest: Implement prefer-called-exactly-once-with (#17562) (Said Atrahouch)
- e80c0bf linter/eslint-plugin-vitest: Implement `require-mock-type-parameters` (#20785) (Said Atrahouch)
- cec8b8f linter/vitest: Implement require-awaited-expect-poll rule (#20702) (Said Atrahouch)
- d8e9d01 linter/eslint-plugin-vitest: Set `prefer-to-have-been-called-times` compatible with jest (#20703) (Said Atrahouch)
- caf8231 linter: Enhance import plugin diagnostics with help messages (#20766) (离谱)
- f44adfa linter: Improve the oxlint config generated by `--init`. (#20632) (connorshea)
- 43f4827 linter: Add help text to jest and promise diagnostics (#20640) (kszongic)
- 16516de linter: Enhance types for `DummyRule` (#20751) (camc314)
- 27374e8 linter: Add hint about node version when ts config fail to import (#20570) (camc314)
- 8e34150 linter/eslint-plugin-vitest: Sync rule with JS implementation (#20679) (Said Atrahouch)

### 🐛 Bug Fixes

- df057d5 linter/no-noninteractive-tabindex: Add missing composite widget … (#20860) (bab)
- bb34073 linter: Mark vitest/valid-title as a compatible jest rules (#20463) (Nicolas Le Cam)
- bd2c76b linter: Handle shadowed locals in no-restricted-globals (#20811) (Ulrich Stark)
- 62e39be linter: Sort nested object keys in fix of `eslint/sort-keys` in one pass (#20838) (Ulrich Stark)
- 3ef37da oxlint/lsp: Error on unknown command (#20841) (Sysix)
- ab1070d oxlint/cli: Skip parsing base config again for nested config search (#20809) (Sysix)
- 2be3728 oxlint/lsp: Skip parsing base config again for nested config search (#20808) (Sysix)
- 6171217 oxlint: Respect `NO_COLOR` env for `format=stylish` (#20804) (Sysix)
- d89ae8f linter/plugins: Patch `WeakMap` to emulate `WeakMap`s keyed by `sourceCode` (#20799) (overlookmotel)
- c610666 linter/no-shadow: Respect env settings when builtinGlobals is enabled (#20429) (vvnikita74)
- 6bb502f linter/no-invalid-void-type: Allow void generic args in heritage clauses (#20780) (camc314)
- 365bb7d linter: Skip typed nested literals in explicit-module-boundary-types (#20776) (camc314)
- 0aa1ff0 linter/plugins: Ensure `after` hook is always called in ESLint compat mode (#20721) (overlookmotel)
- 31145a9 linter/plugins: Fire `after` hook after CFG events in ESLint compat (#20720) (overlookmotel)
- c09a5ab diagnostics: Skip minified fallback for single-line reporters (#20716) (camc314)
- e4dc9a1 linter: Isolate `--init` config writes from parallel tests (#20717) (camc314)
- 7e394ec linter: Clarify empty replacement fixer help text (#20698) (camc314)
- d15a99c linter/jsx-curly-brace-presence: Flag empty string literals (#20690) (camc314)

### 📚 Documentation

- c722495 linter: Update JS Plugins + LS references (#20843) (camc314)
- e1f9748 linter/jsdoc/require-property: Fix typo (#20792) (Benjaming61001)
- be3dcc1 linter: Add note about node version + custom TS plugin (#19381) (camc314)
# Oxfmt
### 🚀 Features

- 6ef440a oxfmt: Support bool for object style options (#20853) (leaysgur)
- 23050fa oxfmt: Support markdown-in-js substitution (#20683) (leaysgur)
- 4087295 oxfmt: Support angular-in-js substitution (#20676) (leaysgur)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-cli Area - CLI A-formatter Area - Formatter A-linter Area - Linter C-enhancement Category - New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants