2.3.15
Patch Changes
-
#9019
043b67cThanks @dyc3! - Added the lint rulenoNestedPromises. This rule detects nested.then()or.catch()calls that could be refactored into flat promise chains.// Invalid: nested promise that can be flattened doThing().then(function () { return doOtherThing().then(console.log); }); // Valid: flat promise chain doThing() .then(() => doOtherThing()) .then(console.log);
The rule intelligently allows nesting when the inner callback references variables from the outer scope, as these cases cannot be safely flattened.
-
#9029
6ebf6c6Thanks @ff1451! - Added the nursery rulenoUselessReturn. The rule reports redundantreturn;statements that don't affect the function's control flow.// Invalid: return at end of function is redundant function foo() { doSomething(); return; }
-
#9017
8bac2daThanks @mdevils! - Reverted a behavior change inuseExhaustiveDependenciesthat was accidentally included as part of the #8802 fix. The change made method calls on objects (e.g.,props.data.forEach(...)) report only the object (props.data) as a missing dependency instead of the full member expression. This behavior change will be reconsidered separately. -
#9005
c8dbbbeThanks @corvid-agent! - Fixed #8790: ThenoAssignInExpressionsrule no longer reports a false positive when an assignment is used as the expression body of an arrow function (e.g.,const f = b => a += b). -
#8519
ccdc602Thanks @ruidosujeira! - Fixed #8518, where globally excluded files in a monorepo were still being processed when using"extends": "//".When a package-level configuration extends the root configuration with
"extends": "//", glob patterns (such as those infiles.includes) are now correctly resolved relative to the project root directory, instead of the current workspace directory. -
#9033
0628e0aThanks @mdevils! - Fixed #8967. useExhaustiveDependencies no longer reports false positives for variables destructured from a rest pattern. -
#9023
8ef9d1dThanks @siketyan! - Fixed #9020: Whenjavascript.jsxRuntimeis set toreactClassic,noUnusedImportsanduseImportTyperules now allow importing theReactidentifier from a package other thanreact. This aligns the behavior withtsc(--jsx=react), which also allows importingReactfrom any package. -
#8646
16fd71dThanks @siketyan! - Fixed #8605: Text expressions in some template languages ({{ expr }}or{ expr }) at the top level of an HTML document no longer causes panicking. -
#8930
51c158eThanks @ANKANJAGTAP! - Fixed #8917
useExhaustiveDependencies now correctly detects JSX component identifiers as hook dependencies. -
#9009
7d229c7Thanks @Netail! - Fixed typo in noPositiveTabindex's quick fix text. -
#8758
8c789f1Thanks @Pranav2612000! - Updated the useJsxKeyInIterable rule to not run inside Map constructors -
#8977
bbe0e0cThanks @FrankFMY! - Fixed #4888.
noUnusedImports now addsexport {}when removing the last import in a TypeScript file to prevent it from becoming an ambient module. This does not apply to embedded scripts in Vue, Svelte, or Astro files, which are already in a module context. -
#9016
9d4cfa3Thanks @dyc3! - Added eslint migration metadata for the rules@typescript/no-var-requires,@typescript/keyword-spacing,@typescript/func-call-spacing,vue/keyword-spacing,vue/func-call-spacing, andunicorn/empty-brace-spaces, -
#8848
2cba2b3Thanks @LouisLau-art! - Fixed #8845. NowuseGenericFontNamesdoesn't trigger whenfontis declared inside the@supportsat-rule. -
#8997
a5f3212Thanks @mldangelo! - Fixed #8476.
useAwaitThenable no longer reports false positives forawaiton call expressions whose return type cannot be resolved (e.g., cross-module function calls to Node.js builtins or npm packages). -
#8978
cc7a478Thanks @FrankFMY! - Fixed #8645.
useAwait no longer reportsasyncgenerator functions that useyield*, sinceyield*in an async generator delegates to anAsyncIterableand requires theasyncmodifier.
What's Changed
- docs: fix website sync by @dyc3 in #8957
- chore(deps): update rust crate git2 to v0.20.4 [security] by @renovate[bot] in #8965
- fix: jsx dependency detection in useexhaustivedependencies (#8917) by @ANKANJAGTAP in #8930
- chore(doc): update formatter contributing doc by @tidefield in #8972
- fix(useAwait): treat yield* as async operation in async generators by @FrankFMY in #8978
- fix(css): ignore @supports queries in useGenericFontNames rule by @LouisLau-art in #8848
- fix(html/parser): distinguish interpolations inside and outside tags by @siketyan in #8646
- chore(deps): update rust:1.93.0-bookworm docker digest to d0a4aa3 by @renovate[bot] in #8999
- chore(deps): update rust:1.93.0-bullseye docker digest to 3ebcc2d by @renovate[bot] in #9000
- fix(codegen): remove duplicate preamble in generated analyzer files by @mldangelo in #8993
- chore(deps): update rust crate anyhow to 1.0.101 by @renovate[bot] in #9004
- chore(deps): update rust crate bpaf to 0.9.23 by @renovate[bot] in #9006
- chore(deps): update rust crate insta to 1.46.3 by @renovate[bot] in #9007
- chore(deps): update dependency tombi to v0.7.27 by @renovate[bot] in #9002
- chore(deps): update github-actions by @renovate[bot] in #9003
- chore(deps): update dependency @types/node to v24.10.11 by @renovate[bot] in #9001
- fix(js_analyze): typo in noPositiveTabindex's action suggestion by @Netail in #9009
- fix(useAwaitThenable): treat unresolved call expressions as uninferred by @mldangelo in #8997
- fix(linter): allow assignment in arrow function expression body by @corvid-agent in #9005
- feat(migrate): some more migration metadata by @dyc3 in #9016
- fix(linter):
useExhaustiveDependenciesrevert object method call behavior change, fixes #8958 by @mdevils in #9017 - fix(linter): add
export {}when noUnusedImports removes last import in TypeScript by @FrankFMY in #8977 - fix(useJsxKeyInIterable): ignore rule in Map constructor by @Pranav2612000 in #8758
- docs: correct default value for
useEditorconfigschema setting by @lgaspari in #9025 - fix(lint): remove import source check from is_global_react_import() by @siketyan in #9023
- chore: upgrade CVE'ed crates, remove unmaintaned crates by @ematipico in #9032
- feat(lint/js): add
noNestedPromisesby @dyc3 in #9019 - fix: resolve glob patterns relative to project root when extending by @ruidosujeira in #8519
- feat(lint): add nursery rule noUselessReturn by @ff1451 in #9029
- fix(linter):
useExhaustiveDependenciesproper rest parameters handling, fixes #8967 by @mdevils in #9033 - ci: release by @github-actions[bot] in #8973
New Contributors
- @ANKANJAGTAP made their first contribution in #8930
- @FrankFMY made their first contribution in #8978
- @LouisLau-art made their first contribution in #8848
- @corvid-agent made their first contribution in #9005
- @Pranav2612000 made their first contribution in #8758
- @lgaspari made their first contribution in #9025
- @ff1451 made their first contribution in #9029
Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.3.14...@biomejs/biome@2.3.15