Skip to content

Comments

feat(editors): toggle client after vscode config changing#16162

Merged
camc314 merged 9 commits intooxc-project:mainfrom
liangmiQwQ:fix-vscode/stop-client-while-enabling-changes
Dec 2, 2025
Merged

feat(editors): toggle client after vscode config changing#16162
camc314 merged 9 commits intooxc-project:mainfrom
liangmiQwQ:fix-vscode/stop-client-while-enabling-changes

Conversation

@liangmiQwQ
Copy link
Contributor

Update the linter client enabling status after config changing

@liangmiQwQ liangmiQwQ requested a review from camc314 as a code owner November 26, 2025 13:36
@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 26, 2025

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 hot fixes, skip the queue and merge this PR next

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.

@github-actions github-actions bot added A-editor Area - Editor and Language Server C-enhancement Category - New feature or request labels Nov 26, 2025
@liangmiQwQ liangmiQwQ force-pushed the fix-vscode/stop-client-while-enabling-changes branch from bb7d187 to e0a08fe Compare November 26, 2025 13:46
@liangmiQwQ
Copy link
Contributor Author

Oh, the test failed, but I don't know if it is related to this change because the most errors are about the vscode commends and I didn't change them

@liangmiQwQ liangmiQwQ marked this pull request as draft November 26, 2025 13:52
@Sysix
Copy link
Member

Sysix commented Nov 26, 2025

@liangmiQwQ you are toggling the client even if another configuration is effected. You need to check it the key is effected, here an example with a lsp configuration:

public effectsConfigChange(event: ConfigurationChangeEvent): boolean {
if (event.affectsConfiguration(`${ConfigService.namespace}.configPath`, this.workspace)) {
return true;
}

@liangmiQwQ liangmiQwQ force-pushed the fix-vscode/stop-client-while-enabling-changes branch from e0a08fe to c19a1df Compare November 26, 2025 21:58
@liangmiQwQ
Copy link
Contributor Author

Updated! Thanks for the guidance. but I'm not sure if it changes its behavior because toggleClient actually just updates the client state based on the enabled settings in the vsconfig, so if we call it when other configs change, it has no effect to the client

As for the test, I tried locally on the main branch, and it seems to be failed as well, I guess there are something different between the test snapshot and the oxfmt latest output, anyway this is outside the scope of this PR.

Details
> [email protected] test /Users/liangmi/code/voidzero/oxc/editors/vscode
> cross-env TEST=true pnpm run compile && vscode-test


> [email protected] compile /Users/liangmi/code/voidzero/oxc/editors/vscode
> rolldown -c rolldown.config.ts

✔ Validated version: 1.106.3
✔ Found existing install in /Users/liangmi/code/voidzero/oxc/editors/vscode/.vscode-test/vscode-darwin-arm64-1.106.3
[main 2025-11-26T22:07:55.097Z] update#setState disabled
[main 2025-11-26T22:07:55.097Z] update#ctor - updates are disabled by the environment
ChatSessionStore: Migrating 0 chat sessions from storage service to file system
Started local extension host with pid 61935.
Loading development extension at /Users/liangmi/code/voidzero/oxc/editors/vscode
MCP Registry configured: https://api.mcp.github.com
Settings Sync: Account status changed from uninitialized to unavailable

  runExecutable
    ✔ should create Node.js executable for .js files
    ✔ should create Node.js executable for .cjs files
    ✔ should create Node.js executable for .mjs files
    ✔ should create binary executable for non-Node files
    ✔ should use shell on Windows for binary executables
    ✔ should prepend nodePath to PATH
  E2E Server Linter
    ✔ simple debugger statement (275ms)
    ✔ file extension astro (single folder workspace) (278ms)
    ✔ file extension cjs (single folder workspace) (281ms)
    ✔ file extension cts (single folder workspace) (443ms)
    ✔ file extension js (single folder workspace) (284ms)
    ✔ file extension jsx (single folder workspace) (292ms)
    ✔ file extension mjs (single folder workspace) (315ms)
    ✔ file extension mts (single folder workspace) (313ms)
    ✔ file extension svelte (single folder workspace) (411ms)
    ✔ file extension ts (single folder workspace) (436ms)
    ✔ file extension tsx (single folder workspace) (353ms)
    ✔ file extension vue (single folder workspace) (359ms)
    1) detects diagnostics on run (single folder workspace)
    ✔ empty oxlint configuration behaves like default configuration (779ms)
    ✔ setting rule to error, will report the diagnostic as error (941ms)
    ✔ auto detect changing `fixKind` with fixAll command (1129ms)
    2) nested configs severity
    - changing config from `extends` will revalidate the diagnostics
    3) changing oxc.tsConfigPath will revalidate the diagnostics (single folder workspace)
    - changing oxc.typeAware will revalidate the tsgolint diagnostics
  E2E Server Formatter
    ✔ formats code with `oxc.fmt.experimental` (718ms)
    ✔ formats code with `oxc.fmt.configPath` (602ms)
  E2E Diagnostics
    4) simple debugger statement
    5) file extension astro (single folder workspace)
    6) file extension cjs (single folder workspace)
    7) file extension cts (single folder workspace)
    ✔ file extension js (single folder workspace) (322ms)
    8) file extension jsx (single folder workspace)
    9) file extension mjs (single folder workspace)
    10) file extension mts (single folder workspace)
    11) file extension svelte (single folder workspace)
    12) file extension ts (single folder workspace)
    13) file extension tsx (single folder workspace)
    14) file extension vue (single folder workspace)
    15) detects diagnostics on run (single folder workspace)
    ✔ empty oxlint configuration behaves like default configuration (559ms)
    ✔ setting rule to error, will report the diagnostic as error (941ms)
    ✔ auto detect changing `fix_kind` flag with fixAll command (1103ms)
    16) nested configs severity
    - changing config from `extends` will revalidate the diagnostics
    17) changing oxc.tsConfigPath will revalidate the diagnostics (single folder workspace)
    18) changing oxc.typeAware will revalidate the tsgolint diagnostics (single folder workspace)
    19) formats code with `oxc.fmt.experimental`
    ✔ formats code with `oxc.fmt.configPath` (656ms)
  commands
    ✔ listed commands (single folder workspace)
    ✔ oxc.showOutputChannel (single folder workspace) (506ms)
    ✔ oxc.toggleEnable (single folder workspace) (1074ms)
    ✔ oxc.fixAll (76ms)
  code actions
    20) listed code actions (single folder workspace)
    21) code action `source.fixAll.oxc` on editor.codeActionsOnSave
    ✔ code action `source.fixAll.oxc` ignores "ignore this rule for this line/file" (2580ms)
    ✔ changing configuration flag "fix_kind" will reveal more code actions (593ms)
    ✔ changing configuration "unusedDisableDirectives" will reveal more code actions (577ms)
  WorkspaceConfig
    ✔ default values on initialization
    ✔ deprecated values are respected
    ✔ updating values updates the workspace configuration (136ms)
    ✔ toLanguageServerConfig method (132ms)
    ✔ toOxlintConfig method (121ms)
    ✔ toOxfmtConfig method (46ms)
  VSCodeConfig
    ✔ default values on initialization (single folder workspace)
    ✔ deprecated values are respected (single folder workspace)
    ✔ updating values updates the workspace configuration (single folder workspace) (77ms)
  validateSafeBinaryPath
    ✔ should return true for valid binary paths
    ✔ should accept case variations of oxc_language_server
    ✔ should reject paths with directory traversal
    ✔ should reject paths with malicious characters
  ConfigService
    getUserServerBinPath
      ✔ resolves relative server path with workspace folder (single folder workspace)
      ✔ returns undefined for unsafe server path (single folder workspace)
      ✔ returns backslashes path on Windows (single folder workspace)
  51 passing (41s)
  3 pending
  21 failing
  1) E2E Server Linter
       detects diagnostics on run (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

1 !== 0

      + expected - actual

      -1
      +0
      
        at Context.<anonymous> (out/e2e_server_linter.spec.js:1:1921)

  2) E2E Server Linter
       nested configs severity:

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

1 !== 0

      + expected - actual

      -1
      +0
      
        at Context.<anonymous> (out/e2e_server_linter.spec.js:1:4614)

  3) E2E Server Linter
       changing oxc.tsConfigPath will revalidate the diagnostics (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server_linter.spec.js:1:5808)

  4) E2E Diagnostics
       simple debugger statement:

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:945)

  5) E2E Diagnostics
       file extension astro (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  6) E2E Diagnostics
       file extension cjs (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  7) E2E Diagnostics
       file extension cts (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  8) E2E Diagnostics
       file extension jsx (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  9) E2E Diagnostics
       file extension mjs (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  10) E2E Diagnostics
       file extension mts (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  11) E2E Diagnostics
       file extension svelte (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  12) E2E Diagnostics
       file extension ts (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  13) E2E Diagnostics
       file extension tsx (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  14) E2E Diagnostics
       file extension vue (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

0 !== 1

      + expected - actual

      -0
      +1
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:1633)

  15) E2E Diagnostics
       detects diagnostics on run (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

1 !== 0

      + expected - actual

      -1
      +0
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:2035)

  16) E2E Diagnostics
       nested configs severity:
     TypeError: Cannot read properties of undefined (reading 'code')
        at Context.<anonymous> (out/e2e_server.spec.js:1:4771)

  17) E2E Diagnostics
       changing oxc.tsConfigPath will revalidate the diagnostics (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:

1 !== 0

      + expected - actual

      -1
      +0
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:6073)

  18) E2E Diagnostics
       changing oxc.typeAware will revalidate the tsgolint diagnostics (single folder workspace):

      AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:

  i((await t.getDiagnostics(`index.ts`)).length!=0)

      + expected - actual

      -false
      +true
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:6895)

  19) E2E Diagnostics
       formats code with `oxc.fmt.experimental`:

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected

+ 'class X { foo() { return 42; } }\n'
- 'class X {\n  foo() {\n    return 42;\n  }\n}\n'

      + expected - actual

      -class X { foo() { return 42; } }
      +class X {
      +  foo() {
      +    return 42;
      +  }
      +}
      
        at Context.<anonymous> (out/e2e_server.spec.js:1:7458)

  20) code actions
       listed code actions (single folder workspace):

      AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected
... Skipped lines

  [
    {
      isPreferred: true,
      title: 'Remove the debugger statement'
    },
...
      isPreferred: false,
+     title: 'Disable no-debugger for this file'
-     title: 'Disable no-debugger for this whole file'
    }
  ]

      + expected - actual

           "title": "Disable no-debugger for this line"
         }
         {
           "isPreferred": false
      -    "title": "Disable no-debugger for this file"
      +    "title": "Disable no-debugger for this whole file"
         }
       ]
      
        at Context.<anonymous> (out/code_actions.spec.js:1:987)

  21) code actions
       code action `source.fixAll.oxc` on editor.codeActionsOnSave:

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
... Skipped lines

  ' export function processChanges(changeHistory, maxChangesToShow) {\n' +
    '  if (!changeHistory || !changeHistory.changes) {\n' +
    '      return [];\n' +
    '  }\n' +
    '\n' +
...
    '      switch (op) {\n' +
+   "          case 'add':\n" +
-   "          case 'add': {\n" +
    '              // Special handling for references\n' +
    '              if (path.match(/^\\/references\\/\\d+$/)) {\n' +
    "                  if (value && typeof value === 'object' && 'key' in value) {\n" +
    '                      summaryItems.push({\n' +
    "                          label: 'References.' + value.key,\n" +
...
    '              break;\n' +
-   '          }\n' +
    '\n' +
+   "          case 'remove':\n" +
-   "          case 'remove': {\n" +
    '              summaryItems.push({\n' +
    '                  label: displayPath,\n' +
    "                  displayValue: <span className='text-red-600 font-medium'>Removed</span>\n" +
    '              });\n' +
    '              break;\n' +
-   '          }\n' +
    '\n' +
+   "          case 'replace':\n" +
-   "          case 'replace': {\n" +
    '              // Skip version changes as we display them separately\n' +
    "              if (path === '/version') return;\n" +
    '\n' +
    '              summaryItems.push({\n' +
    '                  label: displayPath,\n' +
...
    '              break;\n' +
-   '          }\n' +
    '\n' +
+   '          default:\n' +
-   '          default: {\n' +
    '              summaryItems.push({\n' +
    '                  label: displayPath,\n' +
    "                  displayValue: <span className='text-gray-600'>{op}</span>\n" +
    '              });\n' +
-   '          }\n' +
    '      }\n' +
    '  });\n' +
    '\n' +
    '  // Add metadata about more changes\n' +
    '  summaryItems.moreChangesCount = Math.max(0, totalChanges - maxChangesToShow);\n' +

      + expected - actual

             processedPaths.add(displayPath);
       
             // Handle different operation types
             switch (op) {
      -          case 'add':
      +          case 'add': {
                     // Special handling for references
                     if (path.match(/^\/references\/\d+$/)) {
                         if (value && typeof value === 'object' && 'key' in value) {
                             summaryItems.push({
--
                             displayValue: <span className='text-green-600 font-medium'>Added</span>
                         });
                     }
                     break;
      +          }
       
      -          case 'remove':
      +          case 'remove': {
                     summaryItems.push({
                         label: displayPath,
                         displayValue: <span className='text-red-600 font-medium'>Removed</span>
                     });
                     break;
      +          }
       
      -          case 'replace':
      +          case 'replace': {
                     // Skip version changes as we display them separately
                     if (path === '/version') return;
       
                     summaryItems.push({
                         label: displayPath,
                         displayValue: <span className='text-blue-600 font-medium'>Updated</span>
                     });
                     break;
      +          }
       
      -          default:
      +          default: {
                     summaryItems.push({
                         label: displayPath,
                         displayValue: <span className='text-gray-600'>{op}</span>
                     });
      +          }
             }
         });
       
         // Add metadata about more changes
      
        at Context.<anonymous> (out/code_actions.spec.js:1:1899)

21 tests failed.

@liangmiQwQ liangmiQwQ marked this pull request as ready for review November 26, 2025 22:24
@liangmiQwQ liangmiQwQ force-pushed the fix-vscode/stop-client-while-enabling-changes branch from ad6be59 to df8cf2f Compare November 27, 2025 13:38
@liangmiQwQ liangmiQwQ marked this pull request as draft November 27, 2025 13:45
@liangmiQwQ liangmiQwQ marked this pull request as ready for review November 27, 2025 22:12
@liangmiQwQ liangmiQwQ marked this pull request as draft November 27, 2025 22:23
@liangmiQwQ liangmiQwQ marked this pull request as ready for review November 28, 2025 13:40
@liangmiQwQ liangmiQwQ requested a review from Sysix November 28, 2025 13:46
Copy link
Member

@Sysix Sysix 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 merged commit 2d6bb85 into oxc-project:main Dec 2, 2025
19 checks passed
@liangmiQwQ liangmiQwQ deleted the fix-vscode/stop-client-while-enabling-changes branch December 2, 2025 21:49
overlookmotel pushed a commit that referenced this pull request Dec 8, 2025
# Oxlint
### 🚀 Features

- 5c62c16 linter/plugins: Allow JS plugins to access `globals` (#16512)
(Arsh)
- ba7bd51 linter: Implement no-useless-return rule (#16388) (FMP1783)
- fa605df linter: Fix `arrow-body-style` automatically (#16252) (Hamir
Mahal)
- 7584938 linter/plugins: Add ESLint compat mode to `RuleTester`
(#16538) (overlookmotel)
- b38c2d0 linter/plugins: Add `SourceCode#lineStartIndices` getter
(#16510) (overlookmotel)
- ba93ffc linter/plugins: Add `SourceCode#tokensAndComments` getter
(#16503) (overlookmotel)
- d2ca540 linter/plugins: Add `SourceCode#isESTree` property (#16499)
(overlookmotel)
- 9001234 linter: Add fix support for tsgolint diagnostics (#16344)
(camc314)
- 2d6bb85 editors: Toggle client after vscode config changing (#16162)
(Liang Mi)
- 0ec454c linter/plugins: Merge default options into options (#16358)
(overlookmotel)

### 🐛 Bug Fixes

- a806d74 linter: Use import type for ESTree in visitor.d.ts (#16472)
(camc314)
- 8933c84 linter: Fix jest/expect-expect rule docs. (#16550)
(connorshea)
- 1c08879 linter: Fix false positive in no-invalid-fetch-options for
conditional expressions (#16570) (camc314)
- 1a69b06 linter: Junit support for multiple files/errors/diagnostics
(#16568) (Shrey Sudhir)
- a7d435b linter/sort-keys: Preserve multi-line formatting in autofix
(#16563) (camc314)
- fd84dcc linter/plugins: `RuleTester` parser catch fatal errors
(#16558) (overlookmotel)
- ab4deb0 linter/plugins: Improve safety of options merging (#16549)
(overlookmotel)
- a58c76a linter: Fix the `react/jsx-fragments` rule config to take a
string argument (#16175) (connorshea)
- f7751cc linter/plugins: Fix TS types for `RuleTester` (#16546)
(overlookmotel)
- 6d33320 linter/plugins: Prevent user modifying the default config
(#16545) (overlookmotel)
- b4483c5 linter/plugins: Add config support skeleton to `RuleTester`
(#16537) (overlookmotel)
- 3a49158 linter/plugins: Improve TS types for tokens (#16502)
(overlookmotel)
- 0c14531 oxlint/lsp: Revalidate all known files after internal restart
(#16407) (Sysix)
- 2d3217e linter/plugins: Remove panics from `lint_file` and
`setup_configs` (#16453) (overlookmotel)
- 655341b linter/oxc: Not emit error when the threshold is zero and we
haven't detected a barrel file (#16455) (Said Atrahouch)
- b9f359f linter/no-var: Expand fix span to prevent conflicts with other
rules (#16445) (camc314)
- c6778f3 linter: Preserve original quote style in no-hex-escape fixer
(#16410) (camc314)
- 3ad913b linter: Improve rule docs page autofix description (#16281)
(Hamir Mahal)
- 0b7e00c linter: Handle keyword unary expressions in yoda rule fix
(#16402) (camc314)
- 5fd3096 lsp: Skip (un)registering file watcher when not dynamic
watchers are supported (#16406) (Sysix)
- 804144f lsp: Respect `null` as invalid settings for
`workspace/didChangeConfiguration` (#16361) (Sysix)
- 723a7e5 linter: Prevent invalid BigInt literal fix for exponential
notation (#16401) (camc314)
- 2589fb1 linter: Fix prefer_expect_resolves fixer for member
expressions (#16393) (camc314)
- 428c7cd linter: Wrap logical expressions in parentheses when fixing
no-extra-boolean-cast (#16363) (camc314)
- 3903567 linter: Skip prefer-string-raw in type annotations and .d.ts
files (#16382) (camc314)
- d490daa linter/func-names: Use centralized reserved keyword check and
fix ancestor traversal (#16362) (camc314)
- d846c53 tsgolint: Use `expect` when sending diagnostics (#16341)
(camc314)
- 114665d lsp: Watch for files when workspace folder is added &
`workspace/configuration` is not supported (#16307) (Sysix)
- f5d0ebb linter/func-names: Avoid suggesting reserved keywords as
function names (#16352) (camc314)
- d268135 linter/no-console-spaces: Preserve escape sequences in fixer
output (#16349) (camc314)
- b02c21a linter/valid-title: Preserve escape sequences in fixer output
(#16348) (camc314)
- 2373b76 linter/no-untyped-mock-factory: Fix fixer producing invalid
syntax when newline exists after opening paren (#16351) (camc314)

### ⚡ Performance

- 67cfa58 lsp: Avoid some clones (#16519) (Sysix)
- 2a09665 oxlint/lsp: Store only `LinterCodeAction` instead of the
complete `DiagnosticReport` (#16516) (Sysix)
- 0ca9754 lsp: Avoid `Uri` to `String` and back to `Uri` conversion
(#16470) (Sysix)
- 2736636 lsp: Avoid cloning when revalidating diagnostics (#16469)
(Sysix)
- 793b989 linter/plugins: Move result-processing work off main JS thread
(#16456) (overlookmotel)
- 44dff7b linter/plugins: Skip serialization overhead when no errors
(#16443) (overlookmotel)
- 1aa2409 linter/plugins: Do not remove `messageId` field from
`DiagnosticReport` before sending to Rust (#16442) (overlookmotel)
- 5017db8 linter/plugins: Reduce calls to `Path::to_string_lossy`
(#16429) (overlookmotel)
- 194e357 linter: Use `SmallVec` for rule options (#16400) (Copilot)
- e31b2bd linter: Only clone config if required (#16350) (overlookmotel)
- 3026086 linter: Avoid cloning rule options (#16338) (overlookmotel)

### 📚 Documentation

- fef77af linter: Fix `jsx-a11y/img-redundant-alt` configuration option
names. (#16552) (connorshea)
- c0766df linter: Add config option docs for `unicorn/filename-case`
rule. (#16280) (connorshea)
- e24aabd linter/plugins: Correct comment (#16559) (overlookmotel)
- 514c724 linter: Fix the name of the IIFEs config option in
eslint/max-lines-per-function (#16554) (connorshea)
- 4d94438 linter/rules: Correct arrow body style options in
documentation (#16509) (GRK)
- 6bac4ec linter: Pull configuration struct doc comment when rendering
config docs (#16288) (connorshea)
- 8c85e08 linter/plugins: Add TODO comment (#16511) (overlookmotel)
- a9b9298 linter/plugins: Add JSDoc comments to `SourceCode` properties
(#16497) (overlookmotel)
- 467cc1a linter/plugins: Improve comment on error branch (#16464)
(overlookmotel)
- 041b119 linter: Add config option docs to `jest/consistent-test-it`
rule. (#16286) (connorshea)

### 🛡️ Security

- d90ef9f deps: Update dependency rolldown to v1.0.0-beta.53 (#16428)
(renovate[bot])
# Oxfmt
### 🚀 Features

- 3184f17 oxfmt: Pass filepath field to prettier formatting (#16591)
(Yuji Sugiura)
- 7bb3304 oxfmt: Pass populated config to prettier formatting (#16584)
(leaysgur)
- 69f84d2 oxfmt: Pass raw config to prettier formatting (#16582)
(leaysgur)
- a83a2ec oxfmt: Expose `setupConfig(configJSON: string)` napi callback
(#16579) (leaysgur)
- 930533f formatter: Convert single `\r` to `\n` in string and add a
debug assertion to ensure that there is no `\r` in the text (#16531)
(Dunqing)
- af76b0e oxfmt: Support formatting HTML, YAML, GraphQL, Handlerbars,
Markdown, CSS files (#16524) (leaysgur)
- 66b64ef oxfmt: Support formatting JSON files (#16523) (leaysgur)
- 4767926 oxfmt: Prepare non-js/ts file support with prettier (#16480)
(leaysgur)
- 2b4ce5d oxfmt: Use dedicated `format_by_xxx_formatter` method by
`SourceType` (#16417) (leaysgur)
- 0867d2f oxfmt: Set up JS `formatFile()` function for Rust via napi
(#16415) (leaysgur)
- b6feb66 oxfmt: Rename `embedded.ts` with preparing `formatFile()`
function (#16414) (leaysgur)
- 80e6999 formatter: Add debug assertion to ensure that there is no
empty content is passed in (#16475) (Dunqing)
- 7374856 formatter/sort-imports: Support `options.internalPattern`
(#16372) (leaysgur)
- dd2cb62 oxfmt: Not error on explicit `--write` flag used (#16376)
(leaysgur)

### 🐛 Bug Fixes

- 40b0134 formatter: Incorrect formatting of `useImperativeHandle` hook
(#16533) (Dunqing)
- 75393e7 formatter: Incorrect handling of `CRLF` for multiline block
comment (#16528) (Dunqing)
- ee0756b formatter: JSX text wrapping incorrect 2 (#16320) (Dunqing)
- 36308b8 formatter: Fix indent for new expression with type cast
(#16380) (leaysgur)

### ⚡ Performance

- 6f16a8f formatter: Avoid using an indent with a empty content (#16474)
(Dunqing)
- 201c98f formatter: Early return when no comments need to be printed
(#16432) (Dunqing)

Co-authored-by: Boshen <[email protected]>
Copilot AI pushed a commit that referenced this pull request Dec 10, 2025
# Oxlint
### 🚀 Features

- 5c62c16 linter/plugins: Allow JS plugins to access `globals` (#16512)
(Arsh)
- ba7bd51 linter: Implement no-useless-return rule (#16388) (FMP1783)
- fa605df linter: Fix `arrow-body-style` automatically (#16252) (Hamir
Mahal)
- 7584938 linter/plugins: Add ESLint compat mode to `RuleTester`
(#16538) (overlookmotel)
- b38c2d0 linter/plugins: Add `SourceCode#lineStartIndices` getter
(#16510) (overlookmotel)
- ba93ffc linter/plugins: Add `SourceCode#tokensAndComments` getter
(#16503) (overlookmotel)
- d2ca540 linter/plugins: Add `SourceCode#isESTree` property (#16499)
(overlookmotel)
- 9001234 linter: Add fix support for tsgolint diagnostics (#16344)
(camc314)
- 2d6bb85 editors: Toggle client after vscode config changing (#16162)
(Liang Mi)
- 0ec454c linter/plugins: Merge default options into options (#16358)
(overlookmotel)

### 🐛 Bug Fixes

- a806d74 linter: Use import type for ESTree in visitor.d.ts (#16472)
(camc314)
- 8933c84 linter: Fix jest/expect-expect rule docs. (#16550)
(connorshea)
- 1c08879 linter: Fix false positive in no-invalid-fetch-options for
conditional expressions (#16570) (camc314)
- 1a69b06 linter: Junit support for multiple files/errors/diagnostics
(#16568) (Shrey Sudhir)
- a7d435b linter/sort-keys: Preserve multi-line formatting in autofix
(#16563) (camc314)
- fd84dcc linter/plugins: `RuleTester` parser catch fatal errors
(#16558) (overlookmotel)
- ab4deb0 linter/plugins: Improve safety of options merging (#16549)
(overlookmotel)
- a58c76a linter: Fix the `react/jsx-fragments` rule config to take a
string argument (#16175) (connorshea)
- f7751cc linter/plugins: Fix TS types for `RuleTester` (#16546)
(overlookmotel)
- 6d33320 linter/plugins: Prevent user modifying the default config
(#16545) (overlookmotel)
- b4483c5 linter/plugins: Add config support skeleton to `RuleTester`
(#16537) (overlookmotel)
- 3a49158 linter/plugins: Improve TS types for tokens (#16502)
(overlookmotel)
- 0c14531 oxlint/lsp: Revalidate all known files after internal restart
(#16407) (Sysix)
- 2d3217e linter/plugins: Remove panics from `lint_file` and
`setup_configs` (#16453) (overlookmotel)
- 655341b linter/oxc: Not emit error when the threshold is zero and we
haven't detected a barrel file (#16455) (Said Atrahouch)
- b9f359f linter/no-var: Expand fix span to prevent conflicts with other
rules (#16445) (camc314)
- c6778f3 linter: Preserve original quote style in no-hex-escape fixer
(#16410) (camc314)
- 3ad913b linter: Improve rule docs page autofix description (#16281)
(Hamir Mahal)
- 0b7e00c linter: Handle keyword unary expressions in yoda rule fix
(#16402) (camc314)
- 5fd3096 lsp: Skip (un)registering file watcher when not dynamic
watchers are supported (#16406) (Sysix)
- 804144f lsp: Respect `null` as invalid settings for
`workspace/didChangeConfiguration` (#16361) (Sysix)
- 723a7e5 linter: Prevent invalid BigInt literal fix for exponential
notation (#16401) (camc314)
- 2589fb1 linter: Fix prefer_expect_resolves fixer for member
expressions (#16393) (camc314)
- 428c7cd linter: Wrap logical expressions in parentheses when fixing
no-extra-boolean-cast (#16363) (camc314)
- 3903567 linter: Skip prefer-string-raw in type annotations and .d.ts
files (#16382) (camc314)
- d490daa linter/func-names: Use centralized reserved keyword check and
fix ancestor traversal (#16362) (camc314)
- d846c53 tsgolint: Use `expect` when sending diagnostics (#16341)
(camc314)
- 114665d lsp: Watch for files when workspace folder is added &
`workspace/configuration` is not supported (#16307) (Sysix)
- f5d0ebb linter/func-names: Avoid suggesting reserved keywords as
function names (#16352) (camc314)
- d268135 linter/no-console-spaces: Preserve escape sequences in fixer
output (#16349) (camc314)
- b02c21a linter/valid-title: Preserve escape sequences in fixer output
(#16348) (camc314)
- 2373b76 linter/no-untyped-mock-factory: Fix fixer producing invalid
syntax when newline exists after opening paren (#16351) (camc314)

### ⚡ Performance

- 67cfa58 lsp: Avoid some clones (#16519) (Sysix)
- 2a09665 oxlint/lsp: Store only `LinterCodeAction` instead of the
complete `DiagnosticReport` (#16516) (Sysix)
- 0ca9754 lsp: Avoid `Uri` to `String` and back to `Uri` conversion
(#16470) (Sysix)
- 2736636 lsp: Avoid cloning when revalidating diagnostics (#16469)
(Sysix)
- 793b989 linter/plugins: Move result-processing work off main JS thread
(#16456) (overlookmotel)
- 44dff7b linter/plugins: Skip serialization overhead when no errors
(#16443) (overlookmotel)
- 1aa2409 linter/plugins: Do not remove `messageId` field from
`DiagnosticReport` before sending to Rust (#16442) (overlookmotel)
- 5017db8 linter/plugins: Reduce calls to `Path::to_string_lossy`
(#16429) (overlookmotel)
- 194e357 linter: Use `SmallVec` for rule options (#16400) (Copilot)
- e31b2bd linter: Only clone config if required (#16350) (overlookmotel)
- 3026086 linter: Avoid cloning rule options (#16338) (overlookmotel)

### 📚 Documentation

- fef77af linter: Fix `jsx-a11y/img-redundant-alt` configuration option
names. (#16552) (connorshea)
- c0766df linter: Add config option docs for `unicorn/filename-case`
rule. (#16280) (connorshea)
- e24aabd linter/plugins: Correct comment (#16559) (overlookmotel)
- 514c724 linter: Fix the name of the IIFEs config option in
eslint/max-lines-per-function (#16554) (connorshea)
- 4d94438 linter/rules: Correct arrow body style options in
documentation (#16509) (GRK)
- 6bac4ec linter: Pull configuration struct doc comment when rendering
config docs (#16288) (connorshea)
- 8c85e08 linter/plugins: Add TODO comment (#16511) (overlookmotel)
- a9b9298 linter/plugins: Add JSDoc comments to `SourceCode` properties
(#16497) (overlookmotel)
- 467cc1a linter/plugins: Improve comment on error branch (#16464)
(overlookmotel)
- 041b119 linter: Add config option docs to `jest/consistent-test-it`
rule. (#16286) (connorshea)

### 🛡️ Security

- d90ef9f deps: Update dependency rolldown to v1.0.0-beta.53 (#16428)
(renovate[bot])
# Oxfmt
### 🚀 Features

- 3184f17 oxfmt: Pass filepath field to prettier formatting (#16591)
(Yuji Sugiura)
- 7bb3304 oxfmt: Pass populated config to prettier formatting (#16584)
(leaysgur)
- 69f84d2 oxfmt: Pass raw config to prettier formatting (#16582)
(leaysgur)
- a83a2ec oxfmt: Expose `setupConfig(configJSON: string)` napi callback
(#16579) (leaysgur)
- 930533f formatter: Convert single `\r` to `\n` in string and add a
debug assertion to ensure that there is no `\r` in the text (#16531)
(Dunqing)
- af76b0e oxfmt: Support formatting HTML, YAML, GraphQL, Handlerbars,
Markdown, CSS files (#16524) (leaysgur)
- 66b64ef oxfmt: Support formatting JSON files (#16523) (leaysgur)
- 4767926 oxfmt: Prepare non-js/ts file support with prettier (#16480)
(leaysgur)
- 2b4ce5d oxfmt: Use dedicated `format_by_xxx_formatter` method by
`SourceType` (#16417) (leaysgur)
- 0867d2f oxfmt: Set up JS `formatFile()` function for Rust via napi
(#16415) (leaysgur)
- b6feb66 oxfmt: Rename `embedded.ts` with preparing `formatFile()`
function (#16414) (leaysgur)
- 80e6999 formatter: Add debug assertion to ensure that there is no
empty content is passed in (#16475) (Dunqing)
- 7374856 formatter/sort-imports: Support `options.internalPattern`
(#16372) (leaysgur)
- dd2cb62 oxfmt: Not error on explicit `--write` flag used (#16376)
(leaysgur)

### 🐛 Bug Fixes

- 40b0134 formatter: Incorrect formatting of `useImperativeHandle` hook
(#16533) (Dunqing)
- 75393e7 formatter: Incorrect handling of `CRLF` for multiline block
comment (#16528) (Dunqing)
- ee0756b formatter: JSX text wrapping incorrect 2 (#16320) (Dunqing)
- 36308b8 formatter: Fix indent for new expression with type cast
(#16380) (leaysgur)

### ⚡ Performance

- 6f16a8f formatter: Avoid using an indent with a empty content (#16474)
(Dunqing)
- 201c98f formatter: Early return when no comments need to be printed
(#16432) (Dunqing)

Co-authored-by: Boshen <[email protected]>
taearls pushed a commit to taearls/oxc that referenced this pull request Dec 11, 2025
…t#16162)

Update the linter client enabling status after config changing

---------

Co-authored-by: Cameron <[email protected]>
taearls pushed a commit to taearls/oxc that referenced this pull request Dec 11, 2025
# Oxlint
### 🚀 Features

- 5c62c16 linter/plugins: Allow JS plugins to access `globals` (oxc-project#16512)
(Arsh)
- ba7bd51 linter: Implement no-useless-return rule (oxc-project#16388) (FMP1783)
- fa605df linter: Fix `arrow-body-style` automatically (oxc-project#16252) (Hamir
Mahal)
- 7584938 linter/plugins: Add ESLint compat mode to `RuleTester`
(oxc-project#16538) (overlookmotel)
- b38c2d0 linter/plugins: Add `SourceCode#lineStartIndices` getter
(oxc-project#16510) (overlookmotel)
- ba93ffc linter/plugins: Add `SourceCode#tokensAndComments` getter
(oxc-project#16503) (overlookmotel)
- d2ca540 linter/plugins: Add `SourceCode#isESTree` property (oxc-project#16499)
(overlookmotel)
- 9001234 linter: Add fix support for tsgolint diagnostics (oxc-project#16344)
(camc314)
- 2d6bb85 editors: Toggle client after vscode config changing (oxc-project#16162)
(Liang Mi)
- 0ec454c linter/plugins: Merge default options into options (oxc-project#16358)
(overlookmotel)

### 🐛 Bug Fixes

- a806d74 linter: Use import type for ESTree in visitor.d.ts (oxc-project#16472)
(camc314)
- 8933c84 linter: Fix jest/expect-expect rule docs. (oxc-project#16550)
(connorshea)
- 1c08879 linter: Fix false positive in no-invalid-fetch-options for
conditional expressions (oxc-project#16570) (camc314)
- 1a69b06 linter: Junit support for multiple files/errors/diagnostics
(oxc-project#16568) (Shrey Sudhir)
- a7d435b linter/sort-keys: Preserve multi-line formatting in autofix
(oxc-project#16563) (camc314)
- fd84dcc linter/plugins: `RuleTester` parser catch fatal errors
(oxc-project#16558) (overlookmotel)
- ab4deb0 linter/plugins: Improve safety of options merging (oxc-project#16549)
(overlookmotel)
- a58c76a linter: Fix the `react/jsx-fragments` rule config to take a
string argument (oxc-project#16175) (connorshea)
- f7751cc linter/plugins: Fix TS types for `RuleTester` (oxc-project#16546)
(overlookmotel)
- 6d33320 linter/plugins: Prevent user modifying the default config
(oxc-project#16545) (overlookmotel)
- b4483c5 linter/plugins: Add config support skeleton to `RuleTester`
(oxc-project#16537) (overlookmotel)
- 3a49158 linter/plugins: Improve TS types for tokens (oxc-project#16502)
(overlookmotel)
- 0c14531 oxlint/lsp: Revalidate all known files after internal restart
(oxc-project#16407) (Sysix)
- 2d3217e linter/plugins: Remove panics from `lint_file` and
`setup_configs` (oxc-project#16453) (overlookmotel)
- 655341b linter/oxc: Not emit error when the threshold is zero and we
haven't detected a barrel file (oxc-project#16455) (Said Atrahouch)
- b9f359f linter/no-var: Expand fix span to prevent conflicts with other
rules (oxc-project#16445) (camc314)
- c6778f3 linter: Preserve original quote style in no-hex-escape fixer
(oxc-project#16410) (camc314)
- 3ad913b linter: Improve rule docs page autofix description (oxc-project#16281)
(Hamir Mahal)
- 0b7e00c linter: Handle keyword unary expressions in yoda rule fix
(oxc-project#16402) (camc314)
- 5fd3096 lsp: Skip (un)registering file watcher when not dynamic
watchers are supported (oxc-project#16406) (Sysix)
- 804144f lsp: Respect `null` as invalid settings for
`workspace/didChangeConfiguration` (oxc-project#16361) (Sysix)
- 723a7e5 linter: Prevent invalid BigInt literal fix for exponential
notation (oxc-project#16401) (camc314)
- 2589fb1 linter: Fix prefer_expect_resolves fixer for member
expressions (oxc-project#16393) (camc314)
- 428c7cd linter: Wrap logical expressions in parentheses when fixing
no-extra-boolean-cast (oxc-project#16363) (camc314)
- 3903567 linter: Skip prefer-string-raw in type annotations and .d.ts
files (oxc-project#16382) (camc314)
- d490daa linter/func-names: Use centralized reserved keyword check and
fix ancestor traversal (oxc-project#16362) (camc314)
- d846c53 tsgolint: Use `expect` when sending diagnostics (oxc-project#16341)
(camc314)
- 114665d lsp: Watch for files when workspace folder is added &
`workspace/configuration` is not supported (oxc-project#16307) (Sysix)
- f5d0ebb linter/func-names: Avoid suggesting reserved keywords as
function names (oxc-project#16352) (camc314)
- d268135 linter/no-console-spaces: Preserve escape sequences in fixer
output (oxc-project#16349) (camc314)
- b02c21a linter/valid-title: Preserve escape sequences in fixer output
(oxc-project#16348) (camc314)
- 2373b76 linter/no-untyped-mock-factory: Fix fixer producing invalid
syntax when newline exists after opening paren (oxc-project#16351) (camc314)

### ⚡ Performance

- 67cfa58 lsp: Avoid some clones (oxc-project#16519) (Sysix)
- 2a09665 oxlint/lsp: Store only `LinterCodeAction` instead of the
complete `DiagnosticReport` (oxc-project#16516) (Sysix)
- 0ca9754 lsp: Avoid `Uri` to `String` and back to `Uri` conversion
(oxc-project#16470) (Sysix)
- 2736636 lsp: Avoid cloning when revalidating diagnostics (oxc-project#16469)
(Sysix)
- 793b989 linter/plugins: Move result-processing work off main JS thread
(oxc-project#16456) (overlookmotel)
- 44dff7b linter/plugins: Skip serialization overhead when no errors
(oxc-project#16443) (overlookmotel)
- 1aa2409 linter/plugins: Do not remove `messageId` field from
`DiagnosticReport` before sending to Rust (oxc-project#16442) (overlookmotel)
- 5017db8 linter/plugins: Reduce calls to `Path::to_string_lossy`
(oxc-project#16429) (overlookmotel)
- 194e357 linter: Use `SmallVec` for rule options (oxc-project#16400) (Copilot)
- e31b2bd linter: Only clone config if required (oxc-project#16350) (overlookmotel)
- 3026086 linter: Avoid cloning rule options (oxc-project#16338) (overlookmotel)

### 📚 Documentation

- fef77af linter: Fix `jsx-a11y/img-redundant-alt` configuration option
names. (oxc-project#16552) (connorshea)
- c0766df linter: Add config option docs for `unicorn/filename-case`
rule. (oxc-project#16280) (connorshea)
- e24aabd linter/plugins: Correct comment (oxc-project#16559) (overlookmotel)
- 514c724 linter: Fix the name of the IIFEs config option in
eslint/max-lines-per-function (oxc-project#16554) (connorshea)
- 4d94438 linter/rules: Correct arrow body style options in
documentation (oxc-project#16509) (GRK)
- 6bac4ec linter: Pull configuration struct doc comment when rendering
config docs (oxc-project#16288) (connorshea)
- 8c85e08 linter/plugins: Add TODO comment (oxc-project#16511) (overlookmotel)
- a9b9298 linter/plugins: Add JSDoc comments to `SourceCode` properties
(oxc-project#16497) (overlookmotel)
- 467cc1a linter/plugins: Improve comment on error branch (oxc-project#16464)
(overlookmotel)
- 041b119 linter: Add config option docs to `jest/consistent-test-it`
rule. (oxc-project#16286) (connorshea)

### 🛡️ Security

- d90ef9f deps: Update dependency rolldown to v1.0.0-beta.53 (oxc-project#16428)
(renovate[bot])
# Oxfmt
### 🚀 Features

- 3184f17 oxfmt: Pass filepath field to prettier formatting (oxc-project#16591)
(Yuji Sugiura)
- 7bb3304 oxfmt: Pass populated config to prettier formatting (oxc-project#16584)
(leaysgur)
- 69f84d2 oxfmt: Pass raw config to prettier formatting (oxc-project#16582)
(leaysgur)
- a83a2ec oxfmt: Expose `setupConfig(configJSON: string)` napi callback
(oxc-project#16579) (leaysgur)
- 930533f formatter: Convert single `\r` to `\n` in string and add a
debug assertion to ensure that there is no `\r` in the text (oxc-project#16531)
(Dunqing)
- af76b0e oxfmt: Support formatting HTML, YAML, GraphQL, Handlerbars,
Markdown, CSS files (oxc-project#16524) (leaysgur)
- 66b64ef oxfmt: Support formatting JSON files (oxc-project#16523) (leaysgur)
- 4767926 oxfmt: Prepare non-js/ts file support with prettier (oxc-project#16480)
(leaysgur)
- 2b4ce5d oxfmt: Use dedicated `format_by_xxx_formatter` method by
`SourceType` (oxc-project#16417) (leaysgur)
- 0867d2f oxfmt: Set up JS `formatFile()` function for Rust via napi
(oxc-project#16415) (leaysgur)
- b6feb66 oxfmt: Rename `embedded.ts` with preparing `formatFile()`
function (oxc-project#16414) (leaysgur)
- 80e6999 formatter: Add debug assertion to ensure that there is no
empty content is passed in (oxc-project#16475) (Dunqing)
- 7374856 formatter/sort-imports: Support `options.internalPattern`
(oxc-project#16372) (leaysgur)
- dd2cb62 oxfmt: Not error on explicit `--write` flag used (oxc-project#16376)
(leaysgur)

### 🐛 Bug Fixes

- 40b0134 formatter: Incorrect formatting of `useImperativeHandle` hook
(oxc-project#16533) (Dunqing)
- 75393e7 formatter: Incorrect handling of `CRLF` for multiline block
comment (oxc-project#16528) (Dunqing)
- ee0756b formatter: JSX text wrapping incorrect 2 (oxc-project#16320) (Dunqing)
- 36308b8 formatter: Fix indent for new expression with type cast
(oxc-project#16380) (leaysgur)

### ⚡ Performance

- 6f16a8f formatter: Avoid using an indent with a empty content (oxc-project#16474)
(Dunqing)
- 201c98f formatter: Early return when no comments need to be printed
(oxc-project#16432) (Dunqing)

Co-authored-by: Boshen <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-editor Area - Editor and Language Server C-enhancement Category - New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants