Журнал змін
Version 2.4.0 Latest
Minor Changes
-
#8964
0353fa0Thanks @dyc3! - Addedignoreoption to theuseHookAtTopLevelrule.You can now specify function names that should not be treated as hooks, even if they follow the
use*naming convention.Example configuration:
{"linter": {"rules": {"correctness": {"useHookAtTopLevel": {"options": {"ignore": ["useDebounce", "useCustomUtility"]}}}}}} -
#8769
d0358b0Thanks @rahuld109! - Added the ruleuseAnchorContentfor HTML to enforce that anchor elements have accessible content for screen readers. The rule flags empty anchors, anchors with only whitespace, and anchors where all content is hidden witharia-hidden. Anchors witharia-labelortitleattributes providing a non-empty accessible name are considered valid. -
#8742
6340ce6Thanks @rahuld109! - Added the ruleuseMediaCaptionto the HTML language. Enforces thataudioandvideoelements have atrackelement withkind="captions"for accessibility. Muted videos are allowed without captions. -
#8621
d11130bThanks @Netail! - Added support for multiple reporters, and the ability to save reporters on arbitrary files.Combine two reporters in CI
If you run Biome on GitHub, take advantage of the reporter and still see the errors in console, you can now use both reporters:
Terminal window biome ci --reporter=default --reporter=githubSave reporter output to a file
With the new
--reporter-fileCLI option, it’s now possible to save the output of all reporters to a file. The file is a path, so you can pass a relative or an absolute path:Terminal window biome ci --reporter=rdjson --reporter-file=/etc/tmp/report.jsonbiome ci --reporter=summary --reporter-file=./reports/file.txtYou can combine these two features. For example, have the
defaultreporter written on terminal, and therdjsonreporter written on file:Terminal window biome ci --reporter=default --reporter=rdjson --reporter-file=/etc/tmp/report.jsonThe
--reporterand--reporter-fileflags must appear next to each other, otherwise an error is thrown. -
#8399
ab88099Thanks @ematipico! - The Biome CSS parser is now able to parse Vue SFC syntax such as:slottedand:deep. These pseudo functions are only correctly parsed when the CSS is defined inside.vuecomponents. Otherwise, Biome will a emit a parse error.This capability is only available when
experimentalFullHtmlSupportedEnabledis set totrue. -
#8663
3dfea16Thanks @ematipico! - Added support for Cursor files. When Biome sees a Cursor JSON file, it will parse it with comments enabled and trailing commas enabled:$PROJECT/.cursor/%APPDATA%\Cursor\User\on Windows~/Library/Application Support/Cursor/User/on macOS~/.config/Cursor/User/on Linux
-
#8723
fe2c642Thanks @cbstns! - Added JSON as a target language for GritQL pattern matching. You can now write Grit plugins for JSON files.This enables users to write GritQL patterns that match against JSON files, useful for:
- Searching and transforming JSON configuration files
- Enforcing patterns in
package.jsonand other JSON configs - Writing custom lint rules for JSON using GritQL
Example patterns:
Match all key-value pairs:
language jsonpair(key = $k, value = $v)Match objects with specific structure:
language jsonJsonObjectValue()Supports both native Biome AST names (
JsonMember,JsonObjectValue) and TreeSitter-compatible names (pair,object,array) for compatibility with existing Grit patterns.For more details, see the GritQL documentation.
-
#8814
4d9c676Thanks @Netail! - Addedignoreoption tonoUnknownProperty. If an unknown property name matches any of the items provided inignore, a diagnostic won’t be emitted. -
#8631
4d8f19dThanks @Netail! - Add a new reporter--reporter=sarif, that emits diagnostics using the SARIF format. -
#8270
4f7909dThanks @lucasweng! - Added theuseIframeTitlelint rule for HTML. The rule enforces the usage of thetitleattribute for theiframeelement.Invalid:
<iframe></iframe> <iframe title=""></iframe>Valid:
<iframe title="title"></iframe> -
#8164
1d25856Thanks @ematipico! - Added a new assist actionuseSortedInterfaceMembersthat sorts TypeScript interface members, for readability.It includes an autofix.
Invalid example.
interface MixedMembers {z: string;a: number;(): void;y: boolean;}Valid example (after using the assist).
interface MixedMembers {a: number;y: boolean;z: string;(): void;} -
#8647
4c7c06fThanks @siketyan! - It’s now possible to provide the stacktrace for a fatal error. The stacktrace is only available when the environment variableRUST_BACKTRACE=1is set, either via the CLI or exported$PATH. This is useful when providing detailed information for debugging purposes:Terminal window RUST_BACKTRACE=1 biome lint -
#7961
a04c8dfThanks @siketyan! - The Biome Language Server now reports progress while scanning files and dependencies in the project. -
#8289
a9025d4Thanks @theshadow27! - Fixed #8024. The ruleuseIterableCallbackReturnnow supports acheckForEachoption. When set tofalse, the rule will skip checking forforEach()callbacks for returning values. -
#8690
e06e5d1Thanks @ematipico! - Added the ruleuseValidLangto the HTML language. -
#7847
e90b14fThanks @Jagget! - Added support forjsxFactoryandjsxFragmentFactory.Biome now respectsjsxFactoryandjsxFragmentFactorysettings fromtsconfig.jsonwhen using the classic JSX runtime, preventing false positive noUnusedImports errors for custom JSX libraries like Preact.tsconfig.json {compilerOptions: {jsx: "react",jsxFactory: "h",jsxFragmentFactory: "Fragment",},}Component.jsx import { h, Fragment } from "preact";function App() {return <div>Hello</div>;} -
#8071
7f5bcf4Thanks @ematipico! - Added new CLI options to the commandslsp-proxyandstartthat allow to control the Biome file watcher.--watcher-kindControls how the Biome file watcher should behave. By default, Biome chooses the best watcher strategy for the current OS, however sometimes this could result in some issues, such as folders locked.
The option accepts the current values:
recommended: the default option, which chooses the best watcher for the current platform.polling: uses the polling strategy.none: it doesn’t enable the watcher. When the watcher is disabled, changes to files aren’t recorded anymore by Biome. This might have repercussions on some lint rules that might rely on updated types or updated paths.
The environment variable
BIOME_WATCHER_KINDcan be used as alias.--watcher-polling-intervalThe polling interval in milliseconds. This is only applicable when using the
pollingwatcher. It defaults to2000milliseconds.The environment variable
BIOME_WATCHER_POLLING_INTERVALcan be used as alias. -
#8262
4186b83Thanks @lucasweng! - Added theuseHtmlLanglint rule for HTML. The rule enforces that thehtmlelement has alangattribute.Invalid:
<html></html><html lang></html><html lang=""></html>Valid:
<html lang="en"></html> -
#8376
1a9334cThanks @siketyan! - Added support for formatting and linting embedded GraphQL snippets in JavaScript.For example, the following snippets are now formatted:
import gql from "graphql-tag";const PeopleCountQuery = gql`query PeopleCount {allPeople {totalCount}}`;import { graphql } from "./graphql";const PeopleCountQuery = graphql(`query PeopleCount {allPeople {totalCount}}`);This feature is experimental and must be enabled explicitly in the configuration:
{"javascript": {"experimentalEmbeddedSnippetsEnabled": true}} -
#7799
54682aaThanks @PaulRBerg! - AddedgroupByNestingoption to theuseSortedKeysassist. When enabled, object keys are grouped by their value’s nesting depth before sorting alphabetically.Simple values (primitives, single-line arrays, and single-line objects) are sorted first, followed by nested values (multi-line arrays and multi-line objects).
Example
To enable this option, configure it in your
biome.json:{"linter": {"rules": {"source": {"useSortedKeys": {"options": {"groupByNesting": true}}}}}}With this option, the following unsorted object:
const object = {name: "Sample",details: {description: "nested",},id: 123,};Will be sorted as:
const object = {id: 123,name: "Sample",details: {description: "nested",},}; -
#8641
1dc8dc2Thanks @tt-a1i! - Added thenoAutofocuslint rule for HTML. This rule enforces that theautofocusattribute is not used on elements, as it can cause usability issues for sighted and non-sighted users. The rule allowsautofocusinsidedialogelements or elements with thepopoverattribute, as these are modal contexts where autofocus is expected. -
#8501
8eb3f19Thanks @tt-a1i! - AddednoPositiveTabindexto HTML. This rule prevents the usage of positive integers on thetabindexattribute, which can disrupt natural keyboard navigation order. -
#8661
b36ff03Thanks @tt-a1i! - Added theuseAltTextlint rule for HTML. This rule enforces that elements requiring alternative text (<img>,<area>,<input type="image">,<object>) provide meaningful information for screen reader users viaalt,title(for objects),aria-label, oraria-labelledbyattributes. Elements witharia-hidden="true"are exempt. -
#7749
1c59333Thanks @andogq! - Implements #1984. UpdateduseHookAtTopLevelto better catch invalid hook usage.This rule is now capable of finding invalid hook usage in more locations. A diagnostic will now be generated if:
- A hook is used at the module level (top of the file, outside any function).
- A hook is used within a function or method which is not a hook or component, unless it is a function expression (such as arrow functions commonly used in tests).
Invalid:
// Invalid: hooks cannot be called at the module level.useHook();// Invalid: hooks must be called from another hook or component.function notAHook() {useHook();}Valid:
// Valid: hooks may be called from function expressions, such as in tests.test("my hook", () => {renderHook(() => useHook());renderHook(function () {return useHook();});}); -
#8307
789b0e7Thanks @mehm8128! - Added theuseValidAriaRolelint rule for HTML. The rule enforces that elements with ARIA roles must use a valid, non-abstract ARIA role. -
#8814
4d9c676Thanks @Netail! - Addedignoreoption tonoUnknownFunction. If an unknown function name matches any of the items provided inignore, a diagnostic won’t be emitted. -
#8814
4d9c676Thanks @Netail! - Addedignoreoption tonoUnknownPseudoClass. If an unknown pseudo-class name matches any of the items provided inignore, a diagnostic won’t be emitted. -
#8623
dc1f94eThanks @mldangelo! - Added thenoDuplicateClassesassist action to detect and remove duplicate CSS classes.For JSX files: Supports
class,classNameattributes and utility functions likeclsx,cn,cva.For HTML files: Checks
classattributes. This is the first assist action for HTML.// Before<div class="flex p-4 flex" />;// After<div class="flex p-4" />; -
#8399
ab88099Thanks @ematipico! - Improved the CSS parser for CSS modules. Biome now automatically enables CSS modules parsing for*.module.cssfiles.If your codebase has only
*.module.cssfiles, you can remove the parser feature as follows, because now Biome does it for you:{"css": {"parser": {"cssModules": true}}} -
#8399
ab88099Thanks @ematipico! - Added support for parsing:globaland:localinside.astro,.svelteand.vuefiles, in<style>portion of the file.This capability is only available when
experimentalFullHtmlSupportedEnabledis set totrue. -
#9011
e014336Thanks @ematipico! - Promoted 21 nursery rules to stable groups.Correctness
Promoted the following rules to the
correctnessgroup:noUnresolvedImports. The rule reports imports that cannot be resolved. The default rule severity is set toerror.noVueReservedProps. The rule reports Vue reserved props usage. The default rule severity is set toerror.noVueReservedKeys. The rule reports Vue reserved keys usage. The default rule severity is set toerror.noVueDataObjectDeclaration. The rule reports Vue 2 data declared as an object instead of a function. The default rule severity is set towarn.noNextAsyncClientComponent. The rule reports async Next.js client components. The default rule severity is set towarn.noVueDuplicateKeys. The rule reports duplicate keys in Vue component options. The default rule severity is set toerror.noVueSetupPropsReactivityLoss. The rule reports destructuring of props in Vue 3 setup which causes reactivity loss. The default rule severity is set toerror.useQwikMethodUsage. The rule enforces correct Qwik framework method usage. The default rule severity is set toerror.useQwikValidLexicalScope. The rule enforces valid lexical scope in Qwik framework. The default rule severity is set toerror.
Suspicious
Promoted the following rules to the
suspiciousgroup:noImportCycles. The rule reports circular imports. The default rule severity is set towarn.noDeprecatedImports. The rule reports imports of deprecated symbols. The default rule severity is set towarn.noReactForwardRef. The rule reports usage ofReact.forwardRef. The default rule severity is set towarn.noUnusedExpressions. The rule reports expressions that are never used. The default rule severity is set towarn.noEmptySource. The rule reports empty source files. The default rule severity is set towarn.useDeprecatedDate. The rule enforces use of GraphQL@deprecateddirective with date. The default rule severity is set towarn.noDuplicateDependencies. The rule reports duplicate dependencies in package.json. The default rule severity is set towarn.
Complexity
Promoted the following rules to the
complexitygroup:noUselessUndefined. The rule reports uselessundefinedinitialization and returns. The default rule severity is set toinfo.useMaxParams. The rule enforces a maximum number of function parameters. The default rule severity is set towarn.noUselessCatchBinding. The rule reports useless catch binding parameters. The default rule severity is set toinfo.
Style
Promoted the following rules to the
stylegroup:useConsistentArrowReturn. The rule enforces consistent return in arrow functions. The default rule severity is set toinfo.noJsxLiterals. The rule reports literal strings in JSX. The default rule severity is set toinfo.
-
#8695
d8f0309Thanks @ematipico! - Added support for the top-level suppression commentbiome-ignore-all format: <explanation>.When the comment
biome-ignore-all format: <explanation>is placed at the beginning of the document, Biome won’t format the code.The feature works for all supported languages. In the following JavaScript snippet, the code isn’t formatted and will stay as is.
// biome-ignore-all format: generatedconst a = [];const a = [];const a = []; -
#8255
da85e3cThanks @ryan-m-walker! - Added support for the typedattrfunction. Addresses issue #6183.Example
.btn {width: attr(data-size type(<length> | <percentage>), 0px);} -
#8165
e0b3f62Thanks @lucasweng! - Added thenoAccessKeylint rule for HTML. The rule enforces that theaccesskeyattribute is not used on any HTML element, as it can conflict with keyboard commands used by screen readers and keyboard-only users.Invalid:
<input type="submit" accesskey="s" value="Submit" /><a href="https://webaim.org/" accesskey="w">WebAIM.org</a><button accesskey="n">Next</button>Valid:
<input type="submit" value="Submit" /><a href="https://webaim.org/">WebAIM.org</a><button>Next</button> -
#8278
7207effThanks @ematipico! - Added a feature that allows editors to inject a Biome configuration to the Biome Language Server without affecting the configuration of the project.If you have a Biome extension that is compatible with your preferred LSP-ready editor, you can map
inlineConfig. The configuration will be merged with the configuration of the project (or the default configuration):For example, with the Zed editor, you would have the following configuration, which will format all files using four spaces as indentation style:
.zed/settings.json {lsp: {biome: {settings: {inline_config: {formatter: {indentStyle: "space",indentWidth: 4,},},},},},} -
#8368
8aa5f5bThanks @Bertie690! - Added 2 options fromtypescript-eslint(ignoreDifferentlyNamedParametersandignoreDifferentJsDoc) touseUnifiedTypeSignatures.Each option makes the rule ignore overload signatures whose parameter names or JSDoc comments differ.
Examples
Valid code with
ignoreDifferentlyNamedParametersset totrue:function cook(scoops: IceCreamScoop[]): void;function cook(cakeType: string): void;Valid code with
ignoreDifferentJsDocset totrue:/** Does objs have "cow" inside it? */function hasCow(objs: string[]): boolean;/** @deprecated - convert to array */function hasCow(objs: string): boolean; -
#8562
361350eThanks @dyc3! - Added the rule profiler behind the--profile-rulescli flag. You can now see a report of which lint rules took the longest to execute. -
#8234
e2e6e66Thanks @ongyuxing! - Updated the CSS properties ordering to align withstylelint-config-recess-orderv7.4.0.It adds support for:
- Containment properties
- Font synthesis properties
- Ruby properties
- Color adjustment properties
- View transitions properties
- Shapes properties
- Motion path properties
- etc.
For the complete list of changes, see: https://github.com/stormwarning/stylelint-config-recess-order/compare/v6.0.0…v7.4.0.
-
#8814
4d9c676Thanks @Netail! - Addedignoreoption tonoUnknownPseudoElement. If an unknown pseudo-element name matches any of the items provided inignore, a diagnostic won’t be emitted. -
#8663
3dfea16Thanks @ematipico! - Added the ability to load the configuration from new known paths. Biome now attempts to load the configuration files from the following locations:$XDG_CONFIG_HOMEor$HOME/.config/biomeon Linux/Users/$USER/Library/Application Support/biomeon macOSC:\Users\$USER\AppData\Roaming\biome\configon Windows
The priority how Biome will attempt to load the configuration files is the following:
- project folder (working directory)
- parent folders
- config home
$XDG_CONFIG_HOMEor$HOME/.config/biomeon Linux/Users/$USER/Library/Application Support/biomeon macOSC:\Users\$USER\AppData\Roaming\biome\configon Windows
-
#7973
bc0e8b4Thanks @siketyan! - Added support for formatting and linting embedded CSS snippets in JavaScript.For example, the following snippets are now formatted and linted:
import styled from "styled-components";const Foo = styled.div`display: flex;color: red;`;import styled from "@emotion/styled";const Foo = styled(Box)`display: flex;color: red;`;import { css } from "@emotion/react";const style = css`display: flex;color: red;`;However, snippets with interpolations are not supported yet. For example, the following snippet isn’t formatted:
import styled from "@emotion/styled";const Foo = styled.div<{ color: string }>`display: flex;color: ${(props) => props.color};`;This feature is experimental and must be enabled explicitly in the configuration:
{"javascript": {"experimentalEmbeddedSnippetsEnabled": true}} -
#8381
50c3513Thanks @mehm8128! - Added theuseAriaPropsForRolelint rule for HTML. The rule enforces that elements with ARIA roles must have all required ARIA attributes for that role. -
#7762
5901d79Thanks @dyc3! - Added theextensionMappingsoption touseImportExtensions. This allows users to specify custom file extensions for different module types.For example, if you want to ban all
.tsimports in favor of.jsimports, you can now do so with this option:{"options": {"extensionMappings": {"ts": "js"}}} -
#8532
01bccc8Thanks @jonaylor89! - Added--onlyand--skipoptions tobiome checkandbiome ci, covering both lint diagnostics and assist actions. Biome now lets you run or exclude specific lint rules, assist actions, group or rules and actions, or domains when running these commands.Examples:
Terminal window biome check --only=suspicious/noDebugger src/**/*.jsbiome ci --skip=project src/** -
#8666
7733f90Thanks @ematipico! - Added the rulenoRedundantAltto HTML. The rule enforces that theimgelementaltattribute does not contain the words “image”, “picture”, or “photo”. -
#8287
a248e88Thanks @mehm8128! - Added thenoDistractingElementslint rule for HTML. The rule enforces that no distracting elements like<marquee>or<blink>are used. -
#8564
adcce82Thanks @ematipico! - Added the new linter domaintypes. This is a domain that enables all rules that require the type inference engine.As opposed to the
projectdomain, which only enables rules that require the module graph to function.The following nursery rules have been moved to the
typesdomain:useArraySortCompareuseAwaitThenableuseFinduseRegexpExecnoUnnecessaryConditionsnoMisusedPromisesnoFloatingPromises
-
#8556
47a79f1Thanks @mehm8128! - Added two new behaviors to thenoSvgWithoutTitlerule.- Support for
graphics-documentandgraphics-symbolroles. - Support for multiple role specifications.
- Support for
-
#8663
3dfea16Thanks @ematipico! - Added the ability to load the hidden files.biome.jsonand.biome.jsonc. This is the order how Biome will attempt the configuration file is:biome.jsonbiome.jsonc.biome.json.biome.jsonc
-
#8334
ae8ac8eThanks @ematipico! - Added the formatter optiontrailingNewline.When set to
false, the formatter will remove the trailing newline at the end of formatted files. The default value istrue, which preserves the current behavior of adding a trailing newline.This option is available globally and for each language-specific formatter configuration:
{"formatter": {"trailingNewline": false},"javascript": {"formatter": {"trailingNewline": true}}}The following CLI flags have been added. They accept
trueorfalseas value:--formatter-trailing-newline--javascript-formatter-trailing-newline--json-formatter-trailing-newline--graphql-formatter-trailing-newline--css-formatter-trailing-newline--html-formatter-trailing-newline
-
#8854
1469968Thanks @ematipico! - Formatting is now applied when applying safe/unsafe fixes viabiome check. -
#8642
46f33a7Thanks @ematipico! - Improved the rulenoUnusedVariablesin Svelte files, by correctly detecting variables defined in the JavaScript blocks, and used inside the templates. -
#8839
79b38aaThanks @ryan-m-walker! - Added support for parsing and formatting the CSS@functionat-rule from the CSS Mixins Module Level 1 specification. Addresses issue #8184.@function --transparent(--color <color>, --alpha <number>: 0.5) returns<color> {result: oklch(from var(--color) l c h / var(--alpha));} -
#8412
73f4f53Thanks @mehm8128! - Added thenoSvgWithoutTitlelint rule to HTML. The rule enforces the usage of thetitleelement for thesvgelement. -
#8243
4291ff3Thanks @ashnewmanjones! - Added theuseButtonTypelint rule for HTML. The rule enforces that thetypeattribute is present and valid on all button elements.Invalid:
<button>Do something</button><button type="incorrectType">Do something</button><button type>Do something</button><button type />Valid:
<button type="button">Do something</button><button type="reset">Do something</button><button type="submit" />
Patch Changes
-
#8898
7e48bd4Thanks @ematipico! - Added e18e ESLint plugin as a recognized rule source. Six Biome rules now reference their e18e equivalents:useAtIndex,useExponentiationOperator,noPrototypeBuiltins,useDateNow,useSpread, anduseObjectSpread. -
#8719
a215408Thanks @ematipico! - Added proper parsing and formatting for Svelte directives when thehtml.experimentalFullSupportEnabledis set totrue. -
#8071
7f5bcf4Thanks @ematipico! - Revamped the logging options for all Biome commands. Now the commandsformat,lint,check,ci,search,lsp-proxyandstartaccept the following CLI options.Some options might have been present before, but they were inconsistent. Plus, all new options have an environment variable as aliases.
--log-fileOptional path/file to redirect log messages to. This option is applicable only to the CLI. If omitted, logs are printed to stdout.
Environment variable alias:
BIOME_LOG_FILE--log-prefix-nameAllows changing the prefix applied to the file name of the logs. This option is applicable only to the daemon.
Environment variable alias:
BIOME_LOG_PREFIX_NAME--log-pathAllows changing the folder where logs are stored. This option is applicable only to the daemon.
Environment variable alias:
BIOME_LOG_PATH--log-levelThe level of logging. In order, from the most verbose to the least verbose:
debug,info,warn,errorThe value
nonewon’t show any logging.Environment variable alias:
BIOME_LOG_LEVEL--log-kindWhat the log should look like.
Environment variable alias:
BIOME_LOG_KINDReduce dumping of LSP logs
When you use a Biome editor extension, Biome’s Daemon dumps its logs using the
debuglevel. If you want to reduce the quantity of these logs, you can now customize it:Terminal window BIOME_LOG_LEVEL=info biome lsp-proxy -
#8663
3dfea16Thanks @ematipico! - Fixed #901. Biome now allows trailing commas in inside Zedsettings.jsonand VSCodesettings.json. -
#8669
683f50dThanks @tt-a1i! - Fixed #8628:useComponentExportOnlyModulesnow allows components referenced as object property values in exported expressions. This fixes false positives for TanStack Router patterns.export const Route = createFileRoute('/')({component: HomeComponent,})function HomeComponent() { ... } // no longer reported as "should be exported" -
#9060
0e47f5aThanks @dyc3! - Fixed #9057: Incorrect diagnostic spans for suppression comments and other raw diagnostics in HTML-ish files (Vue, Svelte, Astro). Previously, diagnostics like “unused suppression” pointed to the wrong location in the document due to the diagnostic offset not being applied. -
#9028
5ac2ad6Thanks @LouisLau-art! - Fixed #9024: Biome no longer reports<hr role="presentation">undernoInteractiveElementToNoninteractiveRole. -
#9072
8656fc0Thanks @dyc3! - Fixed #9068: ThenoVueDuplicateKeysrule now correctly handlestoRefs(props)patterns and no longer produces false positives when destructuring props, particularly in<script setup>blocks. -
#9049
c0ab6ddThanks @ematipico! - Fixed #7138. Now the Biome language server correctly handles theconfigurationPathsetting coming from the editor extension. -
#8556
47a79f1Thanks @mehm8128! - Fixed thenoSvgWithoutTitlerule not to recursively traversetitleelements. -
#8894
6bf1b09Thanks @ematipico! - Added proper parsing for spread attributes{...props}in Svelte and Astro files. -
#8833
375792eThanks @dyc3! - Fixed #4927, #6407: The HTML formatter will now correctly break a block-like element if it has more than 2 children, and at least one of them is another block-like element.<div>a<div>b</div> c</div><div>a<div>b</div>c</div> -
#8854
1469968Thanks @ematipico! - Fixed#7912, where Biome incorrectly added a leading newline to the code contained inside the Astro frontmatter. -
#8806
cb112ceThanks @dyc3! - Major Breaking Changes to the HTML formatter onlyThe HTML formatter (which is still experimental) has been completely overhauled from the ground up to more closely resemble Prettier’s formatting. If you have opted in to the HTML formatter, you may see large formatting diffs for your HTML, Vue, Svelte, and Astro files.
This overhaul fixes several issues (#5150, #6625, #8437) around whitespace sensitivity that were causing incorrect formatting in certain scenarios that were difficult or impossible to fully address before.
-
#8700
0f5a05bThanks @ematipico! - Improved the rulesuseConst,noUnusedImports,useImportTypesandnoUnusedVariablesinside Vue, Svelte and Astro files whenexperimentalFullSupportEnabledis set totrue.Now variables and components that are imported or defined inside the files won’t trigger false positives.
Until now, we suggested disabling these rules with an override. Now the rules are more stable; however, you might still experience a few false positives. Those are probably issues caused by our parser.
If you use
experimentalFullSupportEnabled, you can remove the following override:{"overrides": [{"includes": ["**/*.svelte", "**/*.astro", "**/*.vue"],"linter": {"rules": {"style": {"useConst": "off","useImportType": "off"},"correctness": {"noUnusedVariables": "off","noUnusedImports": "off"}}}}]} -
#8485
bf02ba6Thanks @ematipico! - Fixed an issue where some info diagnostics weren’t tracked by the final summary. -
#8846
5701eadThanks @dyc3! - Fixed #8692: Biome now accepts Vue’sv-bind()function in CSS when Vue CSS modules parsing is enabled. -
#9012
18cdd45Thanks @kiroushi! - Fixed plugin diagnostics showing incorrect line numbers in Vue, Astro, and Svelte files. Plugin diagnostics now correctly account for the template/frontmatter offset, pointing to the right location in the<script>block.
Copyright (c) 2023-present Biome Developers and Contributors.