Skip to content

All versions since 2.3.3

2.3.3

Patch Changes

  • #7907 57bd662 Thanks @ematipico! - Fixed #7839. Now the Biome parser correctly parses the Astro frontmatter even when a triple fence is inside quotes.

  • #7934 a35c496 Thanks @alissonlauffer! - Fixed #7919: The HTML parser now correctly handles Unicode BOM (Byte Order Mark) characters at the beginning of HTML files, ensuring proper parsing and tokenization.

  • #7869 c80361d Thanks @matanshavit! - Fixed #7864: Biome now preserves component tag name casing in Svelte, Astro, and Vue files.

  • #7926 69cecec Thanks @matanshavit! - Added the rule noParametersOnlyUsedInRecursion.

    This rule detects function parameters that are exclusively used in recursive calls and can be removed to simplify the function signature since they are effectively unused.

    function factorial(n, acc) {
    if (n === 0) return 1;
    return factorial(n - 1, acc); // acc is only used here
    }

    Fixes #6484.

  • #7774 2509b91 Thanks @dibashthapa! - Fixed #7657: Added the new rule no-unknown-property from ESLint

  • #7918 7165d06 Thanks @dyc3! - Fixed #7913: The CSS parser, with tailwindDirectives enabled, will now correctly handle @slot.

  • #7959 ffae203 Thanks @siketyan! - Fixed the Biome Language Server so it no longer returns an internal error when the formatter is disabled in the configuration.

2.3.4 Latest

Patch Changes

  • #7989 4855c4a Thanks @alissonlauffer! - Fixed a regression in Astro frontmatter parsing where comments inside quoted strings were incorrectly detected as actual comments. This caused the parser to prematurely terminate frontmatter parsing when encountering strings like const test = "//";. For example, the following Astro frontmatter now parses correctly:

    ---
    const test = "// not a real comment";
    ---
  • #7968 0b28f5f Thanks @denbezrukov! - Refactored formatter to use strict Token element for better performance. The new Token variant is optimized for static, ASCII-only text (keywords, operators, punctuation) with the following constraints:

    • ASCII only (no Unicode characters)
    • No newlines (\n, \r)
    • No tab characters (\t)

    This enables faster printing and fitting logic by using bulk string operations (push_str, len()) instead of character-by-character iteration with Unicode width calculations.

  • #7941 19b8280 Thanks @Conaclos! - Fixed #7943. Rules’ options are now properly merged with the inherited options from a shared configuration.

    This means that you can now override a specific option from a rule without resetting the other options to their default.

    Given the following shared configuration:

    {
    "linter": {
    "rules": {
    "style": {
    "useNamingConvention": {
    "level": "on",
    "options": {
    "strictCase": false,
    "conventions": [
    {
    "selector": { "kind": "variable", "scope": "global" },
    "formats": ["CONSTANT_CASE"]
    }
    ]
    }
    }
    }
    }
    }
    }

    And the user configuration that extends this shared configuration:

    {
    "extends": ["shared.json"],
    "linter": {
    "rules": {
    "style": {
    "useNamingConvention": {
    "level": "on",
    "options": { "strictCase": true }
    }
    }
    }
    }
    }

    The obtained merged configuration is now as follows:

    {
    "extends": ["shared.json"],
    "linter": {
    "rules": {
    "style": {
    "useNamingConvention": {
    "level": "on",
    "options": {
    "strictCase": true,
    "conventions": [
    {
    "selector": { "kind": "variable", "scope": "global" },
    "formats": ["CONSTANT_CASE"]
    }
    ]
    }
    }
    }
    }
    }
    }
  • #7969 425963d Thanks @ematipico! - Added support for the Svelte syntax {@debug}. The Biome HTML parser is now able to parse and format the blocks:

    {@debug foo,bar, something}
    {@debug foo, bar, something}
  • #7986 3256f82 Thanks @lisiur! - Fixed #7981. Now Biome correctly detects and parses lang='tsx' and lang='jsx' languages when used inside in .vue files, when .experimentalFullSupportEnabled is enabled.

  • #7921 547c2da Thanks @dyc3! - Fixed #7854: The CSS parser, with tailwindDirectives enabled, will now parse @source inline("underline");.

  • #7856 c9e20c3 Thanks @Netail! - Added the nursery rule noContinue. Disallowing the usage of the continue statement, structured control flow statements such as if should be used instead.

    Invalid:

    let sum = 0,
    i;
    for (i = 0; i < 10; i++) {
    if (i >= 5) {
    continue;
    }
    sum += i;
    }

    Valid:

    let sum = 0,
    i;
    for (i = 0; i < 10; i++) {
    if (i < 5) {
    sum += i;
    }
    }