Skip to content

Releases: biomejs/biome

JavaScript APIs v6.0.0

12 Jun 12:06
c0b9832

Choose a tag to compare

6.0.0

Minor Changes

  • #8944 8cd3da1 Thanks @ash1day! - Added a new spanInBytesToSpanInCodeUnits helper function to convert byte-based spans from Biome diagnostics to UTF-16 code unit spans.

    Biome internally uses UTF-8 byte offsets for spans, but JavaScript strings use UTF-16 code units. This causes incorrect text extraction when using string.slice() with non-ASCII content. The new helper function correctly handles this conversion, including surrogate pairs and unpaired surrogates.

    import { spanInBytesToSpanInCodeUnits } from "@biomejs/js-api";
    
    const [start, end] = spanInBytesToSpanInCodeUnits(
      diagnostic.location.span,
      content,
    );
    const text = content.slice(start, end); // Correctly extracts the text

Patch Changes

  • Updated dependencies []:
    • @biomejs/wasm-web@2.5.0
    • @biomejs/wasm-bundler@2.5.0
    • @biomejs/wasm-nodejs@2.5.0

What's Changed

Read more

Biome CLI v2.5.0

12 Jun 12:09
c0b9832

Choose a tag to compare

2.5.0

Minor Changes

  • #9539 f0615fd Thanks @ematipico! - Added a new reporter called concise. When --reporter=concise is passed the commands format, lint, check and ci, the diagnostics are printed in a compact manner:

    ! index.ts:2:10: lint/correctness/noUnusedImports: Several of these imports are unused.
    ! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is unused.
    × index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable implicitly has the any type.
    × main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'. Consider to delete it or rename it.
    
  • #9495 2056b23 Thanks @aviraldua93! - Added the useKeyWithClickEvents a11y lint rule for HTML files (.html, .vue, .svelte, .astro). This is a port of the existing JSX rule. The rule enforces that elements with an onclick handler also have at least one keyboard event handler (onkeydown, onkeyup, or onkeypress) to ensure keyboard accessibility.

    Inherently keyboard-accessible elements (<a>, <button>, <input>, <select>, <textarea>, <option>) are excluded, as are elements hidden from assistive technologies (aria-hidden) or with role="presentation" / role="none".

    <!-- Invalid: no keyboard handler -->
    <div onclick="handleClick()">Click me</div>
    
    <!-- Valid: has keyboard handler -->
    <div onclick="handleClick()" onkeydown="handleKeyDown()">Click me</div>
    
    <!-- Valid: inherently keyboard-accessible -->
    <button onclick="handleClick()">Submit</button>
  • #9152 9ec8500 Thanks @ematipico! - Added new nursery lint rule noUndeclaredClasses for HTML, JSX, and SFC files (Vue, Astro, Svelte). The rule detects CSS class names used in class="..." (or className) attributes that are not defined in any <style> block or linked stylesheet reachable from the file.

    <!-- .typo is used but never defined -->
    <html>
      <head>
        <style>
          .button {
            color: blue;
          }
        </style>
      </head>
      <body>
        <div class="button typo"></div>
      </body>
    </html>
  • #9152 9ec8500 Thanks @ematipico! - Added new nursery lint rule noUnusedClasses for CSS. The rule detects CSS class selectors that are never referenced in any HTML or JSX file that imports the stylesheet. This is a project-domain rule that requires the module graph.

    /* styles.css — .ghost is never used in any importing file */
    .button {
      color: blue;
    }
    .ghost {
      color: red;
    }
    /* App.jsx */
    import "./styles.css";
    export default () => <div className="button" />;
  • #9546 6567efa Thanks @nhedger! - Added a biome upgrade command for standalone installations. It upgrades Homebrew installs with brew upgrade biome, updates manually installed binaries from the latest GitHub release, and tells npm users to upgrade with their package manager instead.

  • #9716 701767a Thanks @faizkhairi! - Added the HTML version of the useHeadingContent rule. The rule now enforces that heading elements (h1-h6) have content accessible to screen readers in HTML, Vue, Svelte, and Astro files.

    <!-- Invalid: empty heading -->
    <h1></h1>
    
    <!-- Invalid: heading hidden from screen readers -->
    <h1 aria-hidden="true">invisible content</h1>
    
    <!-- Valid: heading with text content -->
    <h1>heading</h1>
    
    <!-- Valid: heading with accessible name -->
    <h1 aria-label="Screen reader content"></h1>
  • #9582 f437ef8 Thanks @rahuld109! - Added the HTML version of the useKeyWithMouseEvents rule. The rule now enforces that onmouseover is accompanied by onfocus and onmouseout is accompanied by onblur in HTML, Vue, Svelte, and Astro files.

    <!-- Invalid: onmouseover without onfocus -->
    <div onmouseover="handleMouseOver()"></div>
    
    <!-- Valid: onmouseover paired with onfocus -->
    <div onmouseover="handleMouseOver()" onfocus="handleFocus()"></div>
  • #9275 1fdbcee Thanks @ff1451! - Added the new assist action useSortedTypeFields, which sorts the fields of GraphQL object types, interface types and input object types alphabetically, e.g. name, age, id becomes age, id, name.

  • #10561 78075b7 Thanks @Conaclos! - Added a new style option to useExportType,
    which enforces a style for exporting types.
    This is the same option as the one provided by useImportType.

  • #8987 d16e32b Thanks @DerTimonius! - Ported the useValidAnchor rule to HTML. This rule enforces that all anchors are valid and that they are navigable elements.

  • #9533 4d251d4 Thanks @ematipico! - The init command now prints the Biome logo.

  • #10069 0eb9310 Thanks @Netail! - Added the HTML lint rule noStaticElementInteractions, which enforces that static, visible elements (such as <div>) that have click handlers use the valid role attribute.

    Invalid:

    <div onclick="myFunction()"></div>
  • #9134 2a43488 Thanks @ematipico! - Added the assist action useSortedPackageJson.

    This action organizes package.json fields according to the same conventions as the popular sort-package-json tool.

  • #9309 7daa18b Thanks @Bertie690! - The allowDoubleNegation option has been added to noImplicitCoercions to allow ignoring double negations inside code.

    With the option enabled, the following example is considered valid and is ignored by the rule:

    const truthy = !!value;
  • #9700 894f3fb Thanks @ematipico! - The Biome Language server now supports the "go-to definition" feature.

    When the cursor of the mouse is hovering an entity (variable, CSS class, type, etc.), and the command CTRL + click is triggered, the editor jumps to where this entity is defined, if the language server can find it.

    Here's what Biome is able to resolve:

    • Variables and types used in JavaScript modules, defined in the same file or imported from another module.
    • JSX Components used in JavaScript modules, defined in the same file or imported from another module.
    • CSS classes used in JSX and HTML-ish files (Vue, Svelte and Astro), and defined in CSS files.
    • Components used in HTML-ish files and defined in other HTML-ish.
    • Variables used in HTML-ish files and defined in the same file or imported from another module (JavaScript or HTML-ish).
  • #10070 bae0710 Thanks @Conaclos! - Added the :STYLE: group matcher for organizeImports that matches style imports.

    For example, the following configuration...

    {
      "assist": {
        "actions": {
          "source": {
            "organizeImports": {
              "level": "on",
              "opt...
Read more

Biome CLI v2.4.16

27 May 13:43
5f4ea56

Choose a tag to compare

2.4.16

Patch Changes

  • #10329 ef764d5 Thanks @Conaclos! - Fixed an issue where diagnostics showed an incorrect location in Astro files.

  • #10363 50aa415 Thanks @dyc3! - Fixed HTML formatting for a case where comments could cause the formatter to split up a closing tag, which would cause the resulting HTML to be syntactically invalid.

    Input:

    <span
      ><!-- 1
    --><span>a</span
      ><!-- 2
    --><span>b</span
      ><!-- 3
    --></span>

    Output:

      <span
    	  ><!-- 1
    - --> <span>a</span<!-- 2
    - --> ><span>b</span><!-- 3
    + --><span>a</span><!-- 2
    + --><span>b</span><!-- 3
      --></span
      >
  • #10465 0c718da Thanks @dfedoryshchev! - Fixed diagnostics emitted by the noUntrustedLicenses rule.

  • #10358 05c2617 Thanks @dyc3! - Fixed #10356: biome rage --linter now displays rules enabled through linter domains in the enabled rules list.

  • #10300 950247c Thanks @dyc3! - Fixed #10265: Svelte function bindings such as bind:value={get, set} are now parsed more precisely, so noCommaOperator won't emit false positives for that syntax anymore.

  • #9786 e71f584 Thanks @MeGaNeKoS! - Fixed #8480: useDestructuring now provides variableDeclarator and assignmentExpression options to control which contexts enforce destructuring, matching ESLint's prefer-destructuring configuration. Both default to {array: true, object: true}. The diagnostic for object destructuring in assignment expressions now instructs users to wrap the assignment in parentheses.

  • #10425 1948b72 Thanks @sjh9714! - Fixed #10244: The useOptionalChain rule now detects negated guard inequality chains like !foo || foo.bar !== "x".

  • #10442 001f94f Thanks @ematipico! - Fixed #10411: noMisusedPromises no longer causes a stack overflow when a nested function returns an object with shorthand properties that shadow destructured variables from an outer scope.

  • #10318 9b1577f Thanks @dyc3! - Added support for formatter.trailingCommas in overrides. This option was previously available in the top-level formatter configuration but missing from formatter overrides.

  • #10319 2e37709 Thanks @dyc3! - Fixed Vue and Svelte formatting for standalone interpolations in inline elements. Biome now preserves existing newlines in cases like:

    - <span> {{ value }} </span>
    + <span>
    +   {{ value }}
    + </span>
  • #10365 0a58eb0 Thanks @Netail! - Fixed #10361: noUnusedFunctionParameters now mentions the parameter name in the diagnostic.

  • #10439 df6b867 Thanks @denbezrukov! - Fixed CSS and SCSS formatting for comments around declaration colons so comments between property names, colons, and values stay at the same boundary as Prettier.

     .selector {
    -  color: /* red, */
    -    blue;
    +  color: /* red, */ blue;
     }
  • #10344 b30208c Thanks @siketyan! - Fixed #10123: Corrected the noReactNativeDeepImports source rule to point to the proper upstream rule, so users can migrate from the original rule correctly.

  • #10328 b59133f Thanks @dyc3! - Fixed #10309: Biome no longer adds newlines to Astro frontmatter when linter or assist --write mode is enabled.

What's Changed

  • fix(format/html/vue): preserve newlines around standalone interpolations by @dyc3 in #10319
  • refactor(css_parser): remove allow_css_ratio from SCSS expression parsing functions by @denbezrukov in #10325
  • fix(astro): display diagnostic advices with the correct location by @Conaclos in #10329
  • fix: trim astro frontmatter content before processing it by @dyc3 in #10328
  • fix(config): support trailingCommas in overrides by @dyc3 in #10318
  • chore(deps): update rust:1.95.0-bullseye docker digest to b26cecc by @renovate[bot] in #10334
  • chore(deps): update rust:1.95.0-trixie docker digest to 5b1e348 by @renovate[bot] in #10335
  • chore(deps): update dependency @types/node to v24.12.3 by @renovate[bot] in #10336
  • chore(deps): update dependency tombi to v0.10.6 by @renovate[bot] in #10337
  • feat(css_parser): support for SCSS @include ... using clauses by @denbezrukov in #10327
  • chore(deps): update github-actions by @renovate[bot] in #10338
  • chore(deps): update pnpm to v10.33.4 by @renovate[bot] in #10339
  • chore(deps): update rust crate filetime to 0.2.28 by @renovate[bot] in #10340
  • chore(deps): update dependency @changesets/changelog-github to v0.7.0 by @renovate[bot] in #10342
  • feat(parse/tailwind): differentiate between number and non-number values by @dyc3 in #10332
  • chore(deps): update rust crate rayon to 1.12.0 by @renovate[bot] in #10343
  • fix(markdown_parser): parse tab-indented siblings by @jfmcdowell in #10333
  • fix(lint/js): correct the rule source of noReactNativeDeepImports by @siketyan in #10344
  • fix(markdown_parser): column-aware tab handling around block containers by @jfmcdowell in #10345
  • chore: update pnpm to the lateset by @ematipico in #10348
  • chore: fix renovate config by @dyc3 in #10352
  • feat(css_parser): support SCSS interpolated selector by @denbezrukov in #10351
  • feat(useDestructuring): add options for assignment/declaration and improve diagnostic for bare object assignments by @MeGaNeKoS in #9786
  • chore: remove benchmark from repository by @ematipico in #10355
  • fix(rage): print rules enabled by domains by @dyc3 in #10358
  • feat(css): support SCSS interpolation in attribute selectors by @denbezrukov in #10357
  • fix(js_analyze): noUnusedFunctionParameters mention parameter name by @Netail in #10365
  • feat(parse/html): parse svelte function bindings more precisely by @dyc3 in #10300
  • feat(css_formatter): add support for formatting SCSS keyframes selectors by @denbezrukov in #10362
  • fix: yaml linting panic fixes by @jjroush in #10287
  • feat(css_parser): add support for SCSS interpolated dashed identifiers and properties by @denbezrukov in #10367
  • fix(markdown_parser): handle ordered sublist continuation b...
Read more

Biome CLI v2.4.15

09 May 17:09
9dd3271

Choose a tag to compare

2.4.15

Patch Changes

  • #9394 ba3480e Thanks @dyc3! - Added the nursery rule useTestHooksInOrder in the test domain. The rule enforces that Jest/Vitest lifecycle hooks (beforeAll, beforeEach, afterEach, afterAll) are declared in the order they execute, making test setup and teardown easier to reason about.

  • #10254 e0a54cc Thanks @dyc3! - Added a new nursery rule useVueNextTickPromise, which enforces Promise syntax when using Vue nextTick.

    For example, the following snippet triggers the rule:

    import { nextTick } from "vue";
    
    nextTick(() => {
      updateDom();
    });
  • #10219 64aee45 Thanks @dyc3! - Added a new nursery rule noVueVOnNumberValues, that disallows deprecated number modifiers on Vue v-on directives.

    For example, the following snippet triggers the rule:

    <input @keyup.13="submit" />
  • #10195 7b8d4e1 Thanks @dyc3! - Added the new nursery rule useVueValidVFor, which validates Vue v-for directives and reports invalid aliases, missing component keys, and keys that do not use iteration variables.

  • #10238 1110256 Thanks @dyc3! - Added the recommended nursery rule noVueImportCompilerMacros, which disallows importing Vue compiler macros such as defineProps from vue because they are automatically available.

  • #10201 1a08f89 Thanks @realknove! - Fixed #10193: style/useReadonlyClassProperties no longer reports class properties as readonly-able when they are assigned inside arrow callbacks nested in class property initializers.

  • #9574 3bd2b6a Thanks @Conaclos! - Fixed #9530. The diagnostics of organizeImports are now more detailed and more precise. They are also better at localizing where the issue is.

  • #10205 a704a6c Thanks @Conaclos! - Fixed #10185. `organizeImports now errors when it encounters an unknown predefined group.

    The following configuration is now reported as invalid because :INEXISTENT: is an unknown predefined group.

    {
      "assist": {
        "actions": {
          "source": {
            "organizeImports": { "options": { "groups": [":INEXISTENT:"] } }
          }
        }
      }
    }
  • #10052 b565bed Thanks @minseong0324! - Improved noMisleadingReturnType: it now flags union annotations whose extra variants are never returned, and suggests the narrower type (e.g. string | nullstring).

    These functions are now reported because null and number are included in the return annotations but never returned:

    function getUser(): string | null {
      return "hello";
    } // null is never returned
    function getCode(): string | number {
      return "hello";
    } // number is never returned
  • #10213 ac30057 Thanks @dyc3! - Fixed #9450: HTML and Vue element formatting now preserves child line breaks when an element contains another element child on its own line, instead of collapsing the child element onto the same line.

  • #10275 9ee6c03 Thanks @solithcy! - Fixed #10274: Svelte templates with missing expressions no longer parsed as HtmlBogusElement

  • #10143 56798a7 Thanks @minseong0324! - noMisleadingReturnType now detects misleading return type annotations when object literal properties are initialized with as const.

    This function is now reported because the return annotation widens a property initialized with as const:

    function f(): { value: string } {
      return { value: "text" as const };
    }
  • #10143 56798a7 Thanks @minseong0324! - noUselessTypeConversion now detects redundant conversions on object literal properties initialized with as const.

    This conversion is now reported because message.value is inferred as a string literal:

    const message = { value: "text" as const };
    String(message.value);
  • #9807 0ae5840 Thanks @dyc3! - Added the new nursery rule useThisInClassMethods, based on ESLint's class-methods-use-this.

    The rule now reports instance methods, getters, setters, and function-valued instance fields that do not use this, and biome migrate eslint preserves the supported ignoreMethods, ignoreOverrideMethods, and ignoreClassesWithImplements options.

    Invalid:

    class Foo {
      bar() {
        // does not use `this`, invalid
        console.log("Hello Biome");
      }
    }
  • #10258 e7b18f7 Thanks @ematipico! - Improved linter performance by narrowing the query nodes for several lint rules, reducing how often they are evaluated.

  • #10273 04e22a1 Thanks @dyc3! - Fixed #10271: The HTML parser now correctly parses of as text content when in text contexts.

  • #9838 83f7385 Thanks @dyc3! - Added the nursery rule noBaseToString, which reports stringification sites that fall back to Object's default "[object Object]" formatting. The rule also supports the ignoredTypeNames option.

  • #10143 56798a7 Thanks @minseong0324! - useExhaustiveSwitchCases now checks switch statements over object literal properties initialized with as const.

    This switch is now reported because status.kind is inferred as the string literal "ready" but no case handles it:

    const status = { kind: "ready" as const };
    switch (status.kind) {
    }
  • #10143 56798a7 Thanks @minseong0324! - useStringStartsEndsWith now detects string index comparisons on object literal properties initialized with as const.

    This comparison is now reported because message.value is inferred as a string literal:

    const message = { value: "hello" as const };
    message.value[0] === "h";

What's Changed

  • fix(markdown_parser): parse indented reference continuation by @jfmcdowell in #10192
  • fix(markdown_parser): parse quoted ordered list interrupts by @jfmcdowell in https://...
Read more

Biome CLI v2.4.14

01 May 19:24
46393e0

Choose a tag to compare

2.4.14

Patch Changes

  • #9393 491b171 Thanks @dyc3! - Added the nursery rule useTestHooksOnTop in the test domain. The rule flags lifecycle hooks (beforeEach, beforeAll, afterEach, afterAll) that appear after test cases in the same block, enforcing that hooks are defined before any test case.

  • #10157 eefc5ab Thanks @dyc3! - Fixed #7882: The HTML parser will now emit better diagnostics when it encounters a void element with a closing tag, such as <br></br>. Previously, the parser would emit multiple diagnostics with conflicting advice. Now it emits a single diagnostic that clearly states that void elements should not have closing tags.

  • #10054 0e9f569 Thanks @minseong0324! - noMisleadingReturnType no longer misses widening from concrete object types, class instances, object literals, tuples, functions, and regular expressions to : object.

    A function annotated : object returning an object literal:

    function f(): object {
      return { retry: true };
    }
  • #10116 53269eb Thanks @jiwon79! - Fixed #6201: noUselessEscapeInRegex no longer flags an escaped backslash followed by - as a useless escape. Patterns like /[\\-]/ are now considered valid because the second \ is the escaped backslash, not an unnecessary escape of the trailing dash.

  • #10092 33d8543 Thanks @Conaclos! - Fixed #9097: organizeImports no longer adds a blank line between a never-matched group and a matched group.

    Given the following organizeImports options:

    {
      "groups": [":NODE:", ":BLANK_LINE:", ":PACKAGE:", ":BLANK_LINE:", ":PATH:"]
    }

    The following code...

    // Comment
    import "package";
    import "./file.js";

    ...was organized as:

    +
      // Comment
      import "package";
    +
      import "./file.js";

    A blank line was added even though the group ':NODE:' doesn't match any imports here.
    :BLANK_LINE: between never-matched groups and matched groups are now ignored.
    The code is now organized as:

      // Comment
      import "package";
    +
      import "./file.js";
  • #10138 a10b6c1 Thanks @dyc3! - Fixed Vue v-for handling for noUndeclaredVariables and noUnusedVariables. Biome now recognizes variables declared by v-for directives and references to iterated values in Vue templates.

  • #10115 d428d76 Thanks @minseong0324! - noMisleadingReturnType no longer reports false positives when a union return type's boolean variant is covered by both true and false returns.

  • #9922 7acf1e0 Thanks @dyc3! - Added the new nursery rule noReactStringRefs, which disallows legacy React string refs such as ref="hello" and this.refs.hello.

    Biome also reports template-literal refs such as ref={`hello`}, so React code can consistently migrate to callback refs, createRef(), or useRef().

  • #10010 f3e76ab Thanks @dyc3! - Fixed a bug in the LSP file watcher registration so Biome now watches .biome.json and .biome.jsonc configuration files and reloads workspace settings when they change.

  • #10176 8a40ef8 Thanks @dyc3! - Fixed #10011: The noThisInStatic rule no longer reports this when it is used as the constructor target in new this(...), which is required for inherited static factory methods.

  • #10163 6867e96 Thanks @jiwon79! - Fixed #9884: The useSortedAttributes auto-fix no longer corrupts source code when both an outer JSX element and a nested JSX-valued attribute have unsorted attributes in the same pass. Multiple unsorted groups separated by spread or shorthand attributes within the same JSX element are now reported as a single diagnostic.

  • #10079 d29dd19 Thanks @Damix48! - Fixed false positive in noAssignInExpressions for Svelte {@const} blocks. Assignments in {@const name = value} are now correctly recognized as declarations rather than accidental assignments in expressions.

  • #10080 5d8fdac Thanks @Damix48! - Fixed parsing of closing parentheses in Svelte {#each} block key expressions. Biome now correctly parses method calls and other parenthesised expressions used as keys.

    For example, the following snippets are now parsed correctly:

    {#each numbers as number, index (number.toString())}
      <p>{number}</p>
    {/each}
    
    {#each numbers as number (key(number))}
      <p>{number}</p>
    {/each}
  • #10140 e7024b9 Thanks @solithcy! - Fixed #10135: Biome no longer crashes on missing Svelte template expressions.

    The following code snippet longer panics:

    {#if }
     <p>^ this would previously crash</p>
    {/if}
    {@const }
    <p>    ^ this would also crash</p>
  • #10111 7818009 Thanks @jiwon79! - Fixed #9997: noDuplicateSelectors no longer reports false positives for selectors inside @scope queries. Biome now treats @scope as a separate at-rule context, like @media, @supports, @container, and @starting-style.

    The following snippet is no longer flagged as a duplicate:

    .Example {
      padding: 0;
    }
    
    @scope (.theme-dark) {
      .Example {
        color: white;
      }
    }
  • #9926 d62b331 Thanks @dyc3! - Added the nursery lint rule useMathMinMax, which prefers Math.min() and Math.max() over equivalent ternary comparisons.

    For example, this code:

    const min = a < b ? a : b;

    is much more readable when rewritten as:

    const min = Math.min(a, b);
  • #10115 d428d76 Thanks @minseong0324! - useExhaustiveSwitchCases now flags missing true/false cases for boolean discriminants, including when boolean is a union variant.

  • #10125 a55a0b6 Thanks @bmish! - Fixed a resolver bug where packages that define a typed entry point through package.json's main field but omit types were ignored during type-aware resolution. Type-aware rules such as noFloatingPromises can now inspect imports from those packages.

  • [#10117](https://github.com/biomejs...

Read more

Biome CLI v2.4.13

23 Apr 15:42
e316150

Choose a tag to compare

2.4.13

Patch Changes

  • #9969 c5eb92b Thanks @officialasishkumar! - Added the nursery rule noUnnecessaryTemplateExpression, which disallows template literals that only contain string literal expressions. These can be replaced with a simpler string literal.

    For example, the following code triggers the rule:

    const a = `${"hello"}`; // can be 'hello'
    const b = `${"prefix"}_suffix`; // can be 'prefix_suffix'
    const c = `${"a"}${"b"}`; // can be 'ab'
  • #10037 f785e8c Thanks @minseong0324! - Fixed #9810: noMisleadingReturnType no longer reports false positives on a getter with a matching setter in the same namespace.

    class Store {
      get status(): string {
        if (Math.random() > 0.5) return "loading";
        return "idle";
      }
      set status(v: string) {}
    }
  • #10084 5e2f90c Thanks @jiwon79! - Fixed #10034: noUselessEscapeInRegex no longer flags escapes of ClassSetReservedPunctuator characters (&, !, #, %, ,, :, ;, <, =, >, @, `, ~) inside v-flag character classes as useless. These characters are reserved as individual code points in v-mode, so the escape is required.

    The following pattern is now considered valid:

    /[a-z\&]/v;
  • #10063 c9ffa16 Thanks @Netail! - Added extra rule sources from ESLint CSS. biome migrate eslint should do a bit better detecting rules in your eslint configurations.

  • #10035 946b50e Thanks @Netail! - Fixed #10032: useIframeSandbox now flags if there's no initializer value.

  • #9865 68fb8d4 Thanks @dyc3! - Added the new nursery rule useDomNodeTextContent, which prefers textContent over innerText for DOM node text access and destructuring.

    For example, the following snippet triggers the rule:

    const foo = node.innerText;
  • #10023 bd1e74f Thanks @ematipico! - Added a new nursery rule noReactNativeDeepImports that disallows deep imports from the react-native package. Internal paths like react-native/Libraries/... are not part of the public API and may change between versions.

    For example, the following code triggers the rule:

    import View from "react-native/Libraries/Components/View/View";
  • #9885 3dce737 Thanks @dyc3! - Added a new nursery rule useDomQuerySelector that prefers querySelector() and querySelectorAll() over older DOM query methods such as getElementById() and getElementsByClassName().

  • #9995 4da9caf Thanks @siketyan! - Fixed #9994: Biome now parses nested CSS rules correctly when declarations follow them inside embedded snippets.

  • #10009 b41cc5a Thanks @Jayllyz! - Fixed #10004: noComponentHookFactories no longer reports false positives for object methods and class methods.

  • #9988 eabf54a Thanks @Netail! - Tweaked the diagnostics range for useAltText, useButtonType, useHtmlLang, useIframeTitle, useValidAriaRole & useIfameSandbox to report on the opening tag instead of the full tag.

  • #10043 fc65902 Thanks @mujpao! - Fixed #10003: Biome no longer panics when parsing Svelte files containing {#}.

  • #9815 5cc83b1 Thanks @dyc3! - Added the new nursery rule noLoopFunc. When enabled, it warns when a function declared inside a loop captures outer variables that can change across iterations.

  • #9702 ef470ba Thanks @ryan-m-walker! - Added the nursery rule useRegexpTest that enforces RegExp.prototype.test() over String.prototype.match() and RegExp.prototype.exec() in boolean contexts. test() returns a boolean directly, avoiding unnecessary computation of match results.

    Invalid

    if ("hello world".match(/hello/)) {
    }

    Valid

    if (/hello/.test("hello world")) {
    }
  • #9743 245307d Thanks @leetdavid! - Fixed #2245: Svelte <script> tag language detection when the generics attribute contains > characters (e.g., <script lang="ts" generics="T extends Record<string, unknown>">). Biome now correctly recognizes TypeScript in such script blocks.

  • #10046 0707de7 Thanks @Conaclos! - Fixed #10038: organizeImports now sorts imports in TypeScript modules and declaration files.

      declare module "mymodule" {
    -  	import type { B } from "b";
      	import type { A } from "a";
    +  	import type { B } from "b";
      }
  • #10012 94ccca9 Thanks @ematipico! - Added the nursery rule noReactNativeLiteralColors, which disallows color literals inside React Native styles.

    The rule belongs to the reactNative domain. It reports properties whose name contains color and whose value is a string literal when they appear inside a StyleSheet.create(...) call or inside a JSX attribute whose name contains style.

    // Invalid
    const Hello = () => <Text style={{ backgroundColor: "#FFFFFF" }}>hi</Text>;
    
    const styles = StyleSheet.create({
      text: { color: "red" },
    });
    // Valid
    const red = "#f00";
    const styles = StyleSheet.create({
      text: { color: red },
    });
  • #10005 131019e Thanks @ematipico! - Added the nursery rule noReactNativeRawText, which disallows raw text outside of <Text> components in React Native.

    The rule belongs to the new reactNative domain.

    // Invalid
    <View>some text</View>
    <View>{'some text'}</View>
    // Valid
    <View>
      <Text>some text</Text>
    </View>

    Additional components can be allowlisted through the skip option:

    {
      "options": {
        "skip": ["Title"]
      }
    }
  • #9911 [1603f78](https:...

Read more

Biome CLI v2.4.12

14 Apr 18:22
baaacfc

Choose a tag to compare

2.4.12

Patch Changes

  • #9376 9701a33 Thanks @dyc3! - Added the nursery/noIdenticalTestTitle lint rule. This rule disallows using the same title for two describe blocks or two test cases at the same nesting level.

    describe("foo", () => {});
    describe("foo", () => {
      // invalid: same title as previous describe block
      test("baz", () => {});
      test("baz", () => {}); // invalid: same title as previous test case
    });
  • #9889 7ae83f2 Thanks @dyc3! - Improved the diagnostics for useForOf to better explain the problem, why it matters, and how to fix it.

  • #9916 27dd7b1 Thanks @Jayllyz! - Added a new nursery rule noComponentHookFactories, that disallows defining React components or custom hooks inside other functions.

    For example, the following snippets trigger the rule:

    function createComponent(label) {
      function MyComponent() {
        return <div>{label}</div>;
      }
      return MyComponent;
    }
    function Parent() {
      function Child() {
        return <div />;
      }
      return <Child />;
    }
  • #9980 098f1ff Thanks @ematipico! - Fixed #9941: Biome now emits a warning diagnostic when a file exceed the files.maxSize limit.

  • #9942 9956f1d Thanks @dyc3! - Fixed #9918: useConsistentTestIt no longer panics when applying fixes to chained calls such as test.for([])("x", () => {});.

  • #9891 4d9ac51 Thanks @dyc3! - Improved the noGlobalObjectCalls diagnostic to better explain why calling global objects like Math or JSON is invalid and how to fix it.

  • #9902 3f4d103 Thanks @ematipico! - Fixed #9901: the command lint --write is now idempotent when it's run against HTML-ish files that contains scripts and styles.

  • #9891 4d9ac51 Thanks @dyc3! - Improved the noMultiStr diagnostic to explain why escaped multiline strings are discouraged and what to use instead.

  • #9966 322675e Thanks @siketyan! - Fixed #9113: Biome now parses and formats @media and other conditional blocks correctly inside embedded CSS snippets.

  • #9835 f8d49d9 Thanks @bmish! - The noFloatingPromises rule now detects floating promises through cross-module generic wrapper functions. Previously, patterns like export const fn = trace(asyncFn) — where trace preserves the function signature via a generic <F>(fn: F): F — were invisible to the rule when the wrapper was defined in a different file.

  • #9981 02bd8dd Thanks @siketyan! - Fixed #9975: Biome now parses nested CSS selectors correctly inside embedded snippets without requiring an explicit &.

  • #9949 e0ba71d Thanks @Netail! - Added the nursery rule useIframeSandbox, which enforces the sandbox attribute for iframe tags.

    Invalid:

    <iframe></iframe>
  • #9913 d417803 Thanks @Netail! - Added the nursery rule noJsxNamespace, which disallows JSX namespace syntax.

    Invalid:

    <ns:testcomponent />
  • #9892 e75d70e Thanks @dyc3! - Improved the noSelfCompare diagnostic to better explain why comparing a value to itself is suspicious and what to use for NaN checks.

  • #9861 2cff700 Thanks @dyc3! - Added the new nursery rule useVarsOnTop, which requires var declarations to appear at the top of their containing scope.

    For example, the following code now triggers the rule:

    function f() {
      doSomething();
      var value = 1;
    }
  • #9892 e75d70e Thanks @dyc3! - Improved the noThenProperty diagnostic to better explain why exposing then can create thenable behavior and how to avoid it.

  • #9892 e75d70e Thanks @dyc3! - Improved the noShorthandPropertyOverrides diagnostic to explain why later shorthand declarations can unintentionally overwrite earlier longhand properties.

  • #9978 4847715 Thanks @mdevils! - Fixed #9744: useExhaustiveDependencies no longer reports false positives for variables obtained via object destructuring with computed keys, e.g. const { [KEY]: key1 } = props.

  • #9892 e75d70e Thanks @dyc3! - Improved the noRootType diagnostic to better explain that the reported root type is disallowed by project configuration and how to proceed.

  • #9927 7974ab7 Thanks @dyc3! - Added eslint-plugin-unicorn's no-nested-ternary as a rule source for noNestedTernary

  • #9873 19ff706 Thanks @minseong0324! - noMisleadingReturnType now checks class methods, object methods, and getters in addition to functions.

  • #9888 362b638 Thanks @dyc3! - Updated metadata for biome migrate eslint to better reflect which ESLint rules are redundant versus unsupported versus unimplemented.

  • #9892 e75d70e Thanks @dyc3! - Improved the noAutofocus diagnostic to better explain why autofocus harms accessibility outside allowed modal contexts.

  • #9982 d6bdf4a Thanks @dyc3! - Improved performance of noMagicNumbers.
    Biome now maps ESLint no-magic-numbers sources more accurately during biome migrate eslint.

  • #9889 7ae83f2 Thanks @dyc3! - Improved the diagnostics for [noConstantCondition](https://biomejs.dev/linter/rules/no-constant...

Read more

Biome CLI v2.4.11

09 Apr 16:39
a2933bf

Choose a tag to compare

2.4.11

Patch Changes

  • #9350 4af4a3a Thanks @dyc3! - Added the new nursery rule useConsistentTestIt in the test domain. The rule enforces consistent use of either it or test for test functions in Jest/Vitest suites, with separate control for top-level tests and tests inside describe blocks.

    Invalid:

    test("should fly", () => {}); // Top-level test using 'test' flagged, convert to 'it'
    
    describe("pig", () => {
      test("should fly", () => {}); // Test inside 'describe' using 'test' flagged, convert to 'it'
    });
  • #9429 a2f3f7e Thanks @ematipico! - Added the new nursery lint rule useExplicitReturnType. It reports TypeScript functions and methods that omit an explicit return type.

    function toString(x: any) {
      // rule triggered, it doesn't declare a return type
      return x.toString();
    }
  • #9828 9e40844 Thanks @ematipico! - Fixed #9484: the formatter no longer panics when formatting files that contain graphql tagged template literals combined with parenthesized expressions.

  • #9886 e7c681e Thanks @ematipico! - Fixed an issue where, occasionally, some bindings and references were not properly tracked, causing false positives from noUnusedVariables and noUndeclaredVariables in Svelte, Vue, and Astro files.

  • #9760 5b16d18 Thanks @myx0m0p! - Fixed #4093: the noDelete rule no longer triggers for delete process.env.FOO, since delete is the documented way to remove environment variables in Node.js.

  • #9799 2af8efd Thanks @minseong0324! - Added the rule noMisleadingReturnType. The rule detects when a function's return type annotation is wider than what the implementation actually returns.

    // Flagged: `: string` is wider than `"loading" | "idle"`
    function getStatus(b: boolean): string {
      if (b) return "loading";
      return "idle";
    }
  • #9880 7f67749 Thanks @dyc3! - Improved the diagnostics for useFind to better explain the problem, why it matters, and how to fix it.

  • #9755 bff7bdb Thanks @ematipico! - Improved performance of fix-all operations (--write). Biome is now smarter when it runs lint rules and assist actions. First, it runs only rules that have code fixes, and then runs the rest of the rules.

  • #8651 aafca2d Thanks @siketyan! - Add a new lint rule useDisposables for JavaScript, which detects disposable objects assigned to variables without using or await using syntax. Disposable objects that implement the Disposable or AsyncDisposable interface are intended to be disposed of after use. Not disposing them can lead to resource or memory leaks, depending on the implementation.

    Invalid:

    function createDisposable(): Disposable {
      return {
        [Symbol.dispose]() {
          // do something
        },
      };
    }
    
    const disposable = createDisposable();

    Valid:

    function createDisposable(): Disposable {
      return {
        [Symbol.dispose]() {
          // do something
        },
      };
    }
    
    using disposable = createDisposable();
  • #9788 53b8e57 Thanks @MeGaNeKoS! - Fixed #7760: Added support for CSS scroll-driven animation timeline-range-name keyframe selectors (cover, contain, entry, exit, entry-crossing, exit-crossing). Biome no longer reports parse errors on keyframes like entry 0% { ... } or exit 100% { ... }.

  • #9728 5085424 Thanks @mkosei! - Fixed #9696: Astro frontmatter now correctly parses regular expression literals like /\d{4}/.

  • #9261 16b6c49 Thanks @ematipico! - Fixed #8409: CSS formatter now correctly places comments after the colon in property declarations.

    Previously, comments that appeared after the colon in CSS property values were incorrectly moved before the property name:

    [lang]:lang(ja) {
    -  /* system-ui,*/ font-family:
    +  font-family: /* system-ui,*/
        Hiragino Sans,
        sans-serif;
    }
  • #9441 957ea4c Thanks @soconnor-seeq! - Fixed #1630: LSP project selection now prefers the most specific project root in nested workspaces.

  • #9878 de6210f Thanks @ematipico! - Fixed #9118: noUnusedImports no longer reports false positives for default imports used inside Svelte, Vue and Astro components.

  • #9879 ce7e2b7 Thanks @dyc3! - Fixed a parser diagnostic's message when vue syntax is disabled so that it no longer references the non-existant html.parser.vue option. This option will become available in 2.5.

  • #9880 7f67749 Thanks @dyc3! - Improved the diagnostics for useRegexpExec to better explain the problem, why it matters, and how to fix it.

  • #9846 b7134d9 Thanks @ematipico! - Fixed #9140: Biome now parses Astro's attribute shorthand inside .astro files. The following snippet no longer reports a parse error:

    ---
    const items = ['a', 'b'];
    ---
    <ul>
      {items.map((item) => <li {item}>row</li>)}
    </ul>
  • #9790 67df09d Thanks @dyc3! - Fixed #9781: Trailing comments after a top-level biome-ignore-all format suppression are now preserved instead of being dropped. This applies to JavaScript, CSS, HTML, JSONC, GraphQL, and Grit files.

  • #9745 d87073e Thanks @ematipico! - Fixed #9741: the LSP server now correctly returns the organizeImports code action when the client requests it via source.organizeImports.biome in the only filter. Previously, editors with codeAction/resolve support (e.g. Zed) received an empty response because the action was serialized with the wrong kind (source.biome.organizeImports instead of source.organizeImports.biome).

  • #9880 7f67749 Thanks @dyc3! - Improved the diagnostics for useArraySome to better explain the problem, why it matters, and how to fi...

Read more

Biome CLI v2.4.10

30 Mar 16:11
fcf216d

Choose a tag to compare

2.4.10

Patch Changes

  • #8838 f3a6a6b Thanks @baeseokjae! - Added new lint nursery rule noImpliedEval.

    The rule detects implied eval() usage through functions like setTimeout, setInterval, and setImmediate when called with string arguments.

    // Invalid
    setTimeout("alert('Hello');", 100);
    
    // Valid
    setTimeout(() => alert("Hello"), 100);
  • #9320 93c3b6c Thanks @taberoajorge! - Fixed #7664: noUnusedVariables no longer reports false positives for TypeScript namespace declarations that participate in declaration merging with an exported or used value declaration (const, function, or class) of the same name. The reverse direction is also handled: a value declaration merged with an exported namespace is no longer flagged.

  • #9630 1dd4a56 Thanks @raashish1601! - Fixed #9629: noNegationElse now keeps ternary branch comments attached to the correct branch when applying its fixer.

  • #9216 04243b0 Thanks @FrederickStempfle! - Fixed #9061: noProcessEnv now also detects process.env when process is imported from the "process" or "node:process" modules.

    Previously, only the global process object was flagged:

    import process from "node:process";
    // This was not flagged, but now it is:
    console.log(process.env.NODE_ENV);
  • #9692 61b7ec5 Thanks @mkosei! - Fixed Svelte #each destructuring parsing and formatting for nested patterns such as [key, { a, b }].

  • #9627 06a0f35 Thanks @ematipico! - Fixed #191: Improved the performance of how the Biome Language Server pulls code actions and diagnostics.

    Before, code actions were pulled and computed all at once in one request. This approach couldn't work in big files, and caused Biome to stale and have CPU usage spikes up to 100%.

    Now, code actions are pulled and computed lazily, and Biome won't choke anymore in big files.

  • #9643 5bfee36 Thanks @dyc3! - Fixed #9347: useVueValidVBind no longer reports valid object bindings like v-bind="props".

  • #9627 06a0f35 Thanks @ematipico! - Fixed assist diagnostics being invisible when using --diagnostic-level=error. Enforced assist violations (e.g. useSortedKeys) were filtered out before being promoted to errors, causing biome check to incorrectly return success.

  • #9695 9856a87 Thanks @dyc3! - Added the new nursery rule noUnsafePlusOperands, which reports + and += operations that use object-like, symbol, unknown, or never operands, or that mix number with bigint.

  • #9627 06a0f35 Thanks @ematipico! - Fixed duplicate parse errors in check and ci output. When a file had syntax errors, the same parse error was printed twice and the error count was inflated.

  • #9627 06a0f35 Thanks @ematipico! - Improved the performance of the commands lint and check when they are called with --write.

  • #9627 06a0f35 Thanks @ematipico! - Fixed --diagnostic-level not fully filtering diagnostics. Setting --diagnostic-level=error now correctly excludes warnings and infos from both the output and the summary counts.

  • #9623 13b3261 Thanks @ematipico! - Fixed #9258: --skip no longer causes suppressions/unused warnings for suppression comments targeting skipped rules or domains.

  • #9631 599dd04 Thanks @raashish1601! - Fixed #9625: experimentalEmbeddedSnippetsEnabled no longer crashes when a file mixes formatable CSS-in-JS templates with tagged templates that the embedded formatter can't currently delegate, such as a styled-components interpolation returning `css```.

What's Changed

  • feat(linter): add noImpliedEval rule by @baeseokjae in #8838
  • fix(linter): detect process.env when process is imported from module by @FrederickStempfle in #9216
  • fix(cli): skip with domains should not report by @ematipico in #9623
  • fix: avoid unresolved embedded CSS tag ranges by @raashish1601 in #9631
  • chore(deps): update dependency happy-dom to v20.8.8 [security] by @renovate[bot] in #9628
  • fix(cli): improve code actions filtering by @ematipico in #9627
  • fix(lint): preserve ternary branch comments in noNegationElse by @raashish1601 in #9630
  • fix(markdown-parser): incorrect inline link R_PAREN token range by @jfmcdowell in #9642
  • fix(useVueValidVBind): don't flag missing arguments by @dyc3 in #9643
  • chore(deps): update rust crate terminal_size to 0.4.4 by @raashish1601 in #9646
  • test(markdown-parser): add criterion benchmarks and CI workflow by @jfmcdowell in #9657
  • chore(deps): update dependency happy-dom to v20.8.9 [security] by @renovate[bot] in #9694
  • chore(Cargo.toml): clean up, compile insta in opt-level=3 by @Conaclos in #9698
  • fix(lint): handle namespace declaration merging in noUnusedVariables by @taberoajorge in #9320
  • feat(md/fmt): links, codeblocks by @ematipico in #9699
  • fix(html): support nested svelte each destructuring by @mkosei in #9692
  • feat(lint/js): add noUnsafePlusOperands by @dyc3 in #9695
  • chore(deps): update rust crate papaya to 0.2.4 by @renovate[bot] in #9707
  • chore(deps): update rust crate rustc-hash to 2.1.2 by @renovate[bot] in #9710
  • chore(deps): update rust crate boa_engine to 0.21.1 by @renovate[bot] in #9706
  • chore(deps): update dependency tombi to v0.9.8 by @renovate[bot] in #9705
  • chore(deps): update dependency rust to v1.94.1 by @renovate[bot] in #9704
  • chore(deps): update dependency dprint to v0.53.1 by @renovate[bot] in #9703
  • chore(deps): update rust crate quickcheck_macros to 1.2.0 by @renovate[bot] in #9601
  • chore: update sponsors by @ematipico in #9714
  • ci: release by @github-actions[bot] in #9622

New Contributors

Full Changelog: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.9...@biomejs/biome@2.4.10

Biome CLI v2.4.9

25 Mar 12:38
ad37526

Choose a tag to compare

2.4.9

Patch Changes

  • #9315 085d324 Thanks @ematipico! - Added a new nursery CSS rule noDuplicateSelectors, that disallows duplicate selector lists within the same at-rule context.

    For example, the following snippet triggers the rule because the second selector and the first selector are the same:

    /* First selector */
    .x .y .z {
    }
    
    /* Second selector */
    .x {
      .y {
        .z {
        }
      }
    }
  • #9567 b7ab931 Thanks @ematipico! - Fixed #7211: useOptionalChain now detects negated logical OR chains. The following code is now considered invalid:

    !foo || !foo.bar;
  • #8670 607ebf9 Thanks @tt-a1i! - Fixed #8345: useAdjacentOverloadSignatures no longer reports false positives for static and instance methods with the same name. Static methods and instance methods are now treated as separate overload groups.

    class Kek {
      static kek(): number {
        return 0;
      }
      another(): string {
        return "";
      }
      kek(): number {
        return 1;
      } // no longer reported as non-adjacent
    }
  • #9476 97b80a8 Thanks @masterkain! - Fixed #9475: Fixed a panic when Biome analyzed ambient TypeScript modules containing class constructor, getter, or setter signatures that reference local type aliases. Biome now handles these declarations without crashing during semantic analysis.

  • #9553 0cd5298 Thanks @dyc3! - Fixed a bug where enabling the rules of a whole group, would enable rules that belonged to a domain under the same group.

    For example, linter.rules.correctness = "error" no longer enables React- or Qwik-specific correctness rules unless linter.domains.react, linter.domains.qwik, or an explicit rule config also enables them, or their relative dependencies are installed.

  • #9586 4cafb71 Thanks @dyc3! - Fixed #8828: Grit patterns using export { $foo } from $source now match named re-exports in JavaScript and TypeScript files.

  • #9550 d4e3d6e Thanks @dyc3! - Fixed #9548: Biome now parses conditional expressions whose consequent is an arrow function returning a parenthesized object expression.

  • #8696 a7c19cc Thanks @Faizanq! - Fixed #8685 where noUselessLoneBlockStatements would remove empty blocks containing comments. The rule now preserves these blocks since comments may contain important information like TODOs or commented-out code.

  • #9557 6671ac5 Thanks @datalek! - Fixed #9557: Biome's LSP server no longer crashes on startup when used with editors that don't send workspaceFolders during initialization. This affected any LSP client that only sends rootUri, which is valid per the LSP specification.

  • #9455 1710cf1 Thanks @omar-y-abdi! - Fixed #9174: useExpect now correctly rejects asymmetric matchers in Vitest or Jest like expect.stringContaining(), expect.objectContaining(), and utilities like expect.extend() that are not valid assertions. Previously these constructs caused false negatives, allowing tests without real assertions to pass the lint rule.

  • #9584 956e367 Thanks @ematipico! - Fixed a bug where Vue directive attribute values like v-bind:class="{'dynamic': true}" were incorrectly parsed as JavaScript statements instead of expressions. Object literals inside directive values like :class, v-if, and v-html are now correctly parsed as expressions, preventing spurious parse errors.

  • #9474 e168494 Thanks @ematipico! - Added the new nursery rule noUntrustedLicenses. This rule disallows dependencies that ship with invalid licenses or licenses that don't meet the criteria of your project/organisation.

    The rule has the following options:

    • allow: a list of licenses that can be allowed. Useful to bypass possible invalid licenses from downstream dependencies.
    • deny: a list of licenses that should trigger the rule. Useful to deny licenses that don't fit your project/organisation.
      When both deny and allow are provided, deny takes precedence.
    • requireOsiApproved: whether the licenses need to be approved by the Open Source Initiative.
    • requireFsfLibre: whether the licenses need to be approved by the Free Software Foundation.
  • #9544 723798b Thanks @ViniciusDev26! - Added an unsafe fix to useConsistentMethodSignatures that automatically converts between method-style and property-style signatures.

  • #9555 8a3647b Thanks @ematipico! - Fixed #188: the Biome Language Server no longer panics when open files change abruptly, such as during git branch checkouts.

  • #9605 f65c637 Thanks @ematipico! - Fixed #9589. Now Biome correctly parses object expressions inside props and directives. The following code doesn't emit errors anymore:

    <style is:global define:vars={{ bgLight: light }}>
    <Component name={{ first, name }} />
  • #9565 ccb249e Thanks @eyupcanakman! - Fixed #9505: noUselessStringConcat no longer reports tagged template literals as useless string concatenations. Tagged templates invoke a function and can return non-string values, so combining them with + is not equivalent to a single template literal.

  • #9534 4d050df Thanks @Netail! - Added the nursery rule noInlineStyles. The rule disallows the use of inline style attributes in HTML and the style prop in JSX, including React.createElement calls. Inline styles make code harder to maintain and can interfere with Content Security Policy.

  • #9611 cddaa44 Thanks @gaauwe! - Fixed a regression where Biome LSP could misread editor settings sent through workspace/didChangeConfiguration when the payload was wrapped in a top-level biome key. This caused requireConfiguration and related settings to be ignored in some editors.

What's Changed

  • fix(linter): differentiate static/instance methods in useAdjacentOverloadSignatures by @tt-a1i in #8670
  • fix(parse/js): fix a case where valid js was being interpretted as ts by @dyc3 in htt...
Read more