Skip to content

fix(vscode): stop the oxc language server from crashing on startup - #2245

Merged
leaysgur merged 3 commits into
voidzero-dev:mainfrom
jong-kyung:fix/vscode-oxc-lsp-crash
Jul 28, 2026
Merged

fix(vscode): stop the oxc language server from crashing on startup#2245
leaysgur merged 3 commits into
voidzero-dev:mainfrom
jong-kyung:fix/vscode-oxc-lsp-crash

Conversation

@jong-kyung

Copy link
Copy Markdown
Collaborator

Summary

The oxc language server crashes on startup in this repo, so there is no linting or formatting for the session.

Screenshot 2026-07-25 at 9 08 04 PM

Nested config search is on by default, so the server evaluates every vite.config.ts in the workspace inside its own Node process — including the PTY snapshot fixtures, one of which crashes Node on purpose (fixtures/migration_config_process_crash_isolated).

Pin the root config and disable nested search in .vscode/settings.json, mirroring the vitest.configSearchPatternExclude entry already there for the same fixtures.

@netlify

netlify Bot commented Jul 25, 2026

Copy link
Copy Markdown

Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit 29d46e8
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a676d75802dce0008386d3b

@jong-kyung jong-kyung self-assigned this Jul 25, 2026
@jong-kyung
jong-kyung force-pushed the fix/vscode-oxc-lsp-crash branch from e6545f6 to d45fd6e Compare July 25, 2026 13:27
Nested config search evaluates every vite.config.ts in the workspace inside the
language server's own Node process. That includes the PTY snapshot fixtures, one
of which deliberately crashes Node from an uncaughtException handler, so the
server died on startup and VS Code stopped restarting it after five attempts.
The root config's lint.ignorePatterns does not apply here — it filters lint
targets, not config discovery — so pin the root config and disable nested search.
@jong-kyung
jong-kyung force-pushed the fix/vscode-oxc-lsp-crash branch from d45fd6e to 3d60243 Compare July 25, 2026 13:27
@leaysgur

leaysgur commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

This might be trickier than expected. 👀

First, specifying configPath is equivalent to setting disableNestedConfig, so there's no need to specify both.

Second, I think this applies to oxfmt as well, so we might also need to specify oxc.fmt.configPath|disableNestedConfig?

And for oxfmt, I need to implement disableNestedConfig for LSP…!


NOTE: If I remember correctly, this .vscode/settings.json file is only referenced when the workspace is set to the directory containing .vscode.

In other words, if a subdirectory other than the root is opened as the workspace, this setting won't be referenced.
If there happens to be the problematic fixture under that directory, it'll still result in an error.

In normal use cases, users wouldn't leave a misconfigured file lying around, so this is mostly just an inconvenience for us, but anyway...

@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@leaysgur Thanks for the review! I didn't realize the two options do the same thing — in that case I'll keep just disableNestedConfig. As for opening a sub-directory as the workspace as you said we can't prevent that, but it doesn't seem like a common use case, so I think adding only disableNestedConfig is enough for now 🤔

Bonus: with only disableNestedConfig enabled, I'm not seeing any errors from either oxlint or oxfmt.

Setting oxc.configPath already disables nested config search, so specifying
both is redundant. The root vite.config.ts is discovered automatically, so
keep only oxc.disableNestedConfig.
@liangmiQwQ

liangmiQwQ commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Once we find a solution that works for both Oxlint and Oxfmt, would it make sense for vp migrate and vp create to include it in the generated editor settings as well?

It now only includes Oxfmt's

'oxc.fmt.configPath': './vite.config.ts',

That said, I personally still hope #997 can get supported 😃

@leaysgur leaysgur left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think adding only disableNestedConfig is enough for now 🤔

I agree. 👍🏻

Bonus: with only disableNestedConfig enabled, I'm not seeing any errors from either oxlint or oxfmt.

I recall this is because the two tools have different strategies for loading config, with Oxlint loading them eagerly. Therefore, I believe that Oxfmt would also error if it encountered a corrupted config lazily.

I don't think this will be a problem at the moment, but I'll go ahead and implement oxc.fmt.disableNestedConfig.

@leaysgur

Copy link
Copy Markdown
Contributor

would it make sense for vp migrate and vp create to include it in the generated editor settings as well?

I think so too. At least, it seems that we should fix the inconsistency between two tools. 😓

graphite-app Bot pushed a commit to oxc-project/oxc that referenced this pull request Jul 27, 2026
Refs: voidzero-dev/vite-plus#2245

(I had assumed Oxlint didn't have an option for LSP either, but that wasn't the case.)
@leaysgur

Copy link
Copy Markdown
Contributor

NOTE:

Anyway, let's merge this PR for now. We can add fmt.disableNestedConfig if needed.

@leaysgur
leaysgur merged commit d0af21d into voidzero-dev:main Jul 28, 2026
42 checks passed
@jong-kyung
jong-kyung deleted the fix/vscode-oxc-lsp-crash branch July 28, 2026 00:38
wan9chi added a commit that referenced this pull request Jul 31, 2026
Release vite-plus v0.2.7: Clearer commands and smoother setup.

This release makes built-in and package-script collisions easier to
navigate, adds concurrency control to `vp pack`, and smooths migrations
and package-manager setup.

### Highlights

- Guide users to `vpr <name>` when a built-in shares a name with a
`package.json` script, preserve the exact command alias they typed, and
avoid duplicate notes from task-spawned tools
([#2262](#2262),
[#2259](#2259),
[vite-task#570](voidzero-dev/vite-task#570)), by
@wan9chi
- Add `--concurrency` to `vp pack` to limit parallel Rolldown builds,
and update tsdown `0.22.13` -> `0.22.14` and Vite DevTools `0.4.2` ->
`0.4.5` ([#2233](#2233)),
by @voidzero-guard[bot]
- Add read-only Svelte rune globals to migrated Oxlint overrides,
preventing false `no-undef` errors
([#2192](#2192)), by
@naokihaba
- Install package managers from npm tarballs with nonstandard top-level
directories, fixing Yarn 1.22.19 installation
([#2264](#2264)), by
@TheAlexLichter

### Fixes & Enhancements

- Preserve machine-readable command output by sending informational CLI
notes to stderr
([#2265](#2265)), by
@wan9chi
- Prevent the Oxc language server from crashing when contributors open
the Vite+ workspace in VS Code
([#2245](#2245)), by
@jong-kyung

### Docs

- Document the full procedure for removing Vite+ commit hooks
([#2218](#2218)), by
@TheAlexLichter
- Document per-process and per-machine ways to disable Vite+ commit
hooks without uninstalling them
([#2230](#2230)), by
@TheAlexLichter
- Clarify when to use built-in `vp` commands versus package scripts
through `vp run` or `vpr`, including migration and agent guidance
([#2255](#2255)), by
@wan9chi
- Document GitLab CI/CD setup with the reusable `setup-vp` template
([#2258](#2258)), by
@naokihaba

### Chore

- Run Semgrep security scans on pull requests and pushes to `main`
([#2223](#2223)), by
@Boshen
- Re-enable Vitest browser-mode CLI snapshot coverage on every supported
platform ([#2275](#2275)),
by @wan9chi
- Stabilize Windows CLI snapshot tests for interrupted installs and
browser port fallback
([#2282](#2282)), by
@wan9chi
- Replace deprecated shared JavaScript and TypeScript VS Code settings
with their current `js/ts.*` names
([#2246](#2246)), by
@jong-kyung

### Bundled Versions

| Tool | Version | Source |
| --------------- | ---------- |
-----------------------------------------------------------------------
|
| vite | `8.1.5` |
[`5e7fe12`](vitejs/vite@5e7fe12)
|
| rolldown | `1.2.0` |
[`03e1e34`](rolldown/rolldown@03e1e34)
|
| tsdown | `0.22.14` | [npm](https://npmx.dev/package/tsdown/v/0.22.14)
|
| vitest | `4.1.10` | [npm](https://npmx.dev/package/vitest/v/4.1.10) |
| oxlint | `1.75.0` | [npm](https://npmx.dev/package/oxlint/v/1.75.0) |
| oxlint-tsgolint | `7.0.2001` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2001) |
| oxfmt | `0.60.0` | [npm](https://npmx.dev/package/oxfmt/v/0.60.0) |

### Upgrade

```bash
vp upgrade
```

**Full Changelog**:
v0.2.6...v0.2.7

---

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: wan9chi <dk4rest@gmail.com>
fengmk2 added a commit that referenced this pull request Aug 6, 2026
We'd better wait for oxc-project/oxc-vscode to ship
`oxc.fmt.disableNestedConfig` to replace `'oxc.fmt.configPath':
'./vite.config.ts'` there? /cc @Sysix

Follow-up to #2245

---------

Co-authored-by: MK (fengmk2) <fengmk2@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants