Skip to content

v0.10.0

Latest

Choose a tag to compare

@fansenze fansenze released this 31 Oct 04:52
· 1 commit to main since this release

Highlights

Lower memory usage and faster linting

Rslint limits concurrent TypeScript program loading and releases completed programs earlier. Benchmarks on a large monorepo showed roughly 55–65% lower peak RSS and 5–25% shorter lint times with the new scheduling, across native-only and mixed native/JavaScript rule runs.

The language server also avoids redundant program rebuilds for initial diagnostics, coalesces pending diagnostic work during rapid edits and file switching, and loads programs in parallel for Fix All.

What's Changed

Breaking Changes 🍭

Editor users must migrate to the Rstack extension

The standalone Rslint extension (rstack.rslint) is retired. Its final release only supports @rslint/core ^0.9.0 and will not start the language server with @rslint/core 0.10.0.

To keep editor diagnostics and fixes after upgrading, install the unified Rstack extension (rstack.rstack), uninstall rstack.rslint, and reload the window. Rstack is also available on Open VSX for Cursor, Trae, VSCodium, and other VS Code forks. Custom settings are not migrated automatically; use the settings migration table to move your rslint.* settings to Rstack.

  • feat(vscode): prepare the final standalone extension release by @fi3ework in #2427

Project service search now follows the invocation context

languageOptions.parserOptions.tsconfigRootDir now defaults to the invocation cwd for CLI/API and the nearest containing workspace folder for LSP, instead of the directory containing the Rslint config. Loading a parent config or selecting one with --config or API overrideConfigFile does not extend this boundary.

When using projectService, running from a subpackage can therefore stop discovering an ancestor tsconfig.json that was used in 0.9.5. Files without an applicable project are still linted, but type-aware rules are skipped. To retain ancestor project discovery, set languageOptions.parserOptions.tsconfigRootDir to an explicit absolute repository root, or run the CLI from that root. Relative project paths and config matching keep their existing bases.

  • fix: use invocation context for project service search by @fansenze in #2447

New Features 🎉

Performance 🚀

  • perf: release completed lint program references by @fansenze in #2406
  • perf: bound native lint working sets by @fansenze in #2416
  • perf(linter): bound program admission by unfinished shards by @fansenze in #2444
  • perf(linter): shorten Program lifetimes in batch lint by @fansenze in #2449
  • perf: reuse rule syntax and frozen path projections by @fansenze in #2454
  • perf: compact per-file rule context data by @fansenze in #2460
  • perf: schedule program loading through the shared lint pipeline by @fansenze in #2468
  • perf(lsp): speed up fix-all program loading by @fansenze in #2471
  • perf: cache package JSON transformations per program by @fansenze in #2473
  • perf(lsp): avoid redundant cold program rebuilds by @fansenze in #2474
  • perf(lsp): coalesce superseded diagnostic work by @fansenze in #2475
  • perf(lsp): share cold source identity queries per event by @fansenze in #2479

Bug Fixes 🐞

  • fix(tsgo): retain all external symbol names by @CPunisher in #2404
  • fix: respect explicit exports over star exports by @fansenze in #2415
  • fix: preserve module identity in import/no-duplicates by @fansenze in #2414
  • fix(import): preserve default-member warnings for ESM declarations by @fansenze in #2434
  • fix(config): derive gitignore boundaries from lint targets by @fansenze in #2436
  • fix: correct config fallback and API glob exclusions by @fansenze in #2445
  • fix(eslint-plugin): align ESTree metadata and isolate integration tests by @fansenze in #2455
  • fix(import): keep type-only specifiers type-only in no-duplicates autofix by @elecmonkey in #2453
  • fix(import): resolve non-TypeScript files in the typescript resolver to match eslint-import-resolver-typescript by @elecmonkey in #2448
  • fix: model ExportNamedDeclaration wrapper in no-restricted-syntax by @Olovyannikov in #2462
  • fix(lsp): retain only projects selected by open lint documents by @fansenze in #2465
  • fix: model ExportDefaultDeclaration wrapper in no-restricted-syntax by @Olovyannikov in #2463
  • fix: match export nodes consistently in no-restricted-syntax by @fansenze in #2467
  • fix(lsp): preserve editor BOM in cached programs by @fansenze in #2477

Refactor 🔨

  • refactor(tsgo): collect external declarations and expose symbol targets by @CPunisher in #2412

Document 📖

Other Changes

  • chore: enable recommended type-checked lint rules by @chenjiahan in #2421
  • chore: enable recommended import lint rules by @chenjiahan in #2422
  • chore: enable project service for repository linting by @chenjiahan in #2424
  • chore: enable recommended rstest lint rules by @chenjiahan in #2425
  • ci: connect Rslint to ecosystem CI by @fansenze in #2420
  • chore: simplify repository lint configuration by @chenjiahan in #2429
  • chore(deps): upgrade Rspress to 2.1.0-beta.1 by @SoonIter in #2435
  • ci: monitor native addon size by @elecmonkey in #2430
  • chore(deps): update dependency @types/node to ^26.6.5 by @renovate[bot] in #2437
  • ci(release): build and assemble matching runtime artifacts by @fansenze in #2440
  • chore(deps): update dependency eslint to ^10.13.0 by @renovate[bot] in #2438
  • chore(deps): update dependency @napi-rs/cli to ^3.10.8 by @renovate[bot] in #2417
  • chore(deps): update dependency eslint-plugin-playwright to ^2.12.1 by @renovate[bot] in #2456
  • chore(deps): update dependency eslint-plugin-security to ^4.2.0 by @renovate[bot] in #2457
  • chore(deps): update dependency globals to v17.13.0 by @renovate[bot] in #2459
  • ci: stop testing the retired standalone VS Code extension by @elecmonkey in #2480

New Contributors

Full Changelog: v0.9.5...v0.10.0