Releases: biomejs/biome
CLI v1.9.1-nightly.12688b6
Analyzer
CLI
Bug fixes
Configuration
Editors
Formatter
JavaScript APIs
Linter
Bug fixes
- useSemanticElements: ignore
alert
andalertdialog
roles (3858). Controbuted by @Conaclos
Parser
What's Changed
Other changes
- chore: fix docs comments by @tiaoxizhan in #3857
- feat(parser/html): correctly parse void elements by @dyc3 in #3854
- fix: update eslint-plugin-solid docs position by @JamBalaya56562 in #3866
- chore: add more logs for #3839 by @dyc3 in #3880
New Contributors
- @tiaoxizhan made their first contribution in #3857
- @JamBalaya56562 made their first contribution in #3866
Full Changelog: cli/v1.9.0...cli/v1.9.1-nightly.12688b6
CLI v1.9.0
Analyzer
- Implement the semantic model for CSS. Contributed by @togami2864
CLI
New features
-
Add
--graphql-linter-enabled
option, to control whether the linter should be enabled or not for GraphQL files. Contributed by @ematipico -
New EXPERIMENTAL
search
command. The search command allows you to search a Biome project using GritQL syntax.GritQL is a powerful language that lets you do structural searches on your codebase. This means that trivia such as whitespace or even the type of strings quotes used will be ignored in your search query. It also has many features for querying the structure of your code, making it much more elegant for searching code than regular expressions.
While we believe this command may already be useful to users in some situations (especially when integrated in the IDE extensions!), we also had an ulterior motive for adding this command: We intend to utilize GritQL for our plugin efforts, and by allowing our users to try it out in a first iteration, we hope to gain insight in the type of queries you want to do, as well as the bugs we need to focus on.
For now, the
search
command is explicitly marked as EXPERIMENTAL, since many bugs remain. Keep this in mind when you try it out, and please let us know your issues!Note: GritQL escapes code snippets using backticks, but most shells interpret backticks as command invocations. To avoid this, it's best to put single quotes around your Grit queries.
biome search '`console.log($message)`' # find all `console.log` invocations
Contributed by @arendjr and @BackupMiles
-
The option
--max-diagnostics
now accept anone
value, which lifts the limit of diagnostics shown. Contributed by @ematipico-
Add a new reporter
--reporter=gitlab
, that emits diagnostics for using the GitLab Code Quality report.[ { "description": "Use === instead of ==. == is only allowed when comparing against `null`", "check_name": "lint/suspicious/noDoubleEquals", "fingerprint": "6143155163249580709", "severity": "critical", "location": { "path": "main.ts", "lines": { "begin": 4 } } } ]
Contributed by @NiclasvanEyk
-
-
Add new options to the
lsp-proxy
andstart
commands:--log-path
: a directory where to store the daemon logs. The commands also accepts the environment variableBIOME_LOG_PATH
.--log-prefix-name
: a prefix that's added to the file name of the logs. It defaults toserver.log
. The commands also accepts the environment variableBIOME_LOG_PREFIX_NAME
.
Enhancements
-
When a
--reporter
is provided, and it's different from the default one, the value provided by via--max-diagnostics
is ignored and the limit is lifted. Contributed by @ematipico -
biome init
now generates a new config file with more options set.
This change intends to improve discoverability of the options and to set the more commonly used options to their default values.
Contributed by @Conaclos -
The
--verbose
flag now reports the list of files that were evaluated, and the list of files that were fixed.
The evaluated files are the those files that can be handled by Biome, files that are ignored, don't have an extension or have an extension that Biome can't evaluate are excluded by this list.
The fixed files are those files that were handled by Biome and changed. Files that stays the same after the process are excluded from this list.VERBOSE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ℹ Files processed: - biome/biome.json - biome/packages/@biomejs/cli-win32-arm64/package.json - biome/packages/tailwindcss-config-analyzer/package.json VERBOSE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ℹ Files fixed: - biome/biome/packages/tailwindcss-config-analyzer/src/generate-tailwind-preset.ts
Contributed by @ematipico
-
Allow passing
nursery
to the--only
and--skip
filters.The
--only
option allows you to run a given rule or rule group.
The--skip
option allows you to skip the execution of a given group or a given rule.Previously, it was not possible to pass
nursery
.
This restriction is now removed, as it may make sense to skip the nursery rules that a project has enabled.Contributed by @Conaclos
-
The CLI now returns an error code when calling a command in
stdin
mode, and the contents of the files aren't fixed. For example, the following example will result in an error code of1
because thelint
command triggers some lint rules:echo "let x = 1" | biome lint --stdin-file-path=stdin.js
Contributed by @ematipico
Bug fixes
-
biome lint --write
now takes--only
and--skip
into account (#3470). Contributed by @Conaclos -
Fix #3368, now the reporter
github
tracks the diagnostics that belong to formatting and organize imports. Contributed by @ematipico -
Fix #3545, display a warning, 'Avoid using unnecessary Fragment,' when a Fragment contains only one child element that is placed on a new line. Contributed by @satojin219
-
Migrating from Prettier or ESLint no longer overwrite the
overrides
field from the configuration (#3544). Contributed by @Conaclos -
Fix JSX expressions for
noAriaHiddenOnFocusable
(#3708). Contributed by @anthonyshew -
Fix edge case for
<canvas>
elements that userole="img"
(#3728). Contributed by @anthonyshew -
Fix #3633, where diagnostics where incorrectly printed if the code has errors. Contributed by @ematipico
-
Allow
aria-label
on heading to preventuseHeadingContent
diagnostic (#3767). Contributed by @anthonyshew -
Fix edge case #3791 for rule
noFocusedTests
being used with non-string-like expressions (#3793). Contributed by @h-a-n-a -
Fix optional ARIA properties for
role="separator"
inuseAriaPropsForRole
(#3856). Contributed by @anthonyshew
Configuration
-
Add support for loading configuration from
.editorconfig
files (#1724).Configuration supplied in
.editorconfig
will be overridden by the configuration inbiome.json
. Support is disabled by default and can be enabled by adding the following to your formatter configuration inbiome.json
:{ "formatter": { "useEditorconfig": true } }
Contributed by @dyc3
-
overrides
from an extended configuration is now merged with theoverrides
of the extension.Given the following shared configuration
biome.shared.json
:{ "overrides": [ { "include": ["**/*.json"], // ... } ] }
and the following configuration:
{ "extends": ["./biome.shared.json"], "overrides": [ { "include": ["**/*.ts"], // ... } ] }
Previously, the
overrides
frombiome.shared.json
was overwritten.
It is now merged and results in the following configuration:{ "extends": ["./biome.shared.json"], "overrides": [ { "include": ["**/*.json"], // ... }, { "include": ["**/*.ts"], // ... } ] }
Contributed by @Conaclos
Editors
-
Fix #3577, where the update of the configuration file was resulting in the creation of a new internal project. Contributed by @ematipico
-
Fix #3696, where
biome.jsonc
was incorrectly parsed with incorrect options. Contributed by @ematipico
Formatter
-
The CSS formatter is enabled by default. Which means that you don't need to opt-in anymore using the configuration file
biome.json
:{ - "css": { - "formatter": { - "enabled": true - } - } }
Contributed by @ematipico
-
Add parentheses for nullcoalescing in ternaries.
This change aligns on Prettier 3.3.3.
This adds clarity to operator precedence.- foo ? bar ?? foo : baz; + foo ? (bar ?? foo) : baz;
Contributed by @Conaclos
-
Keep the parentheses around
infer ... extends
declarations in type unions and type intersections (#3419). Contributed by @Conaclos -
Keep parentheses around a
yield
expression inside a type assertion.Previously, Biome removed parentheses around some expressions that require them inside a type assertion.
For example, in the following code, Biome now preserves the parentheses.function* f() { return <T>(yield 0); }
Contributed by @Conaclos
-
Remove parentheses around expressions that don't need them inside a decorator.
Biome now matches Pr...
CLI v1.8.4-nightly.7aaf0ce
Analyzer
New features
- Implement nursery/useConsistentMemberAccessibility. Contributed by @seitarof
Enhancements
- Implement css suppression action. Contributed by @togami2864
- Add support of comments in
turbo.json
. Contributed by @Netail - Implement semantic model for CSS. Contributed by @togami2864
- Integrate CSS semantic model into the analyzer. Contributed by @togami2864
CLI
New features
-
Add
--graphql-linter-enabled
option, to control whether the linter should be enabled or not for GraphQL files. Contributed by @ematipico -
New EXPERIMENTAL
search
command. The search command allows you to search a Biome project using GritQL syntax.GritQL is a powerful language that lets you do structural searches on your codebase. This means that trivia such as whitespace or even the type of strings quotes used will be ignored in your search query. It also has many features for querying the structure of your code, making it much more elegant for searching code than regular expressions.
While we believe this command may already be useful to users in some situations (especially when integrated in the IDE extensions!), we also had an ulterior motive for adding this command: We intend to utilize GritQL for our plugin efforts, and by allowing our users to try it out in a first iteration, we hope to gain insight in the type of queries you want to do, as well as the bugs we need to focus on.
For now, the
search
command is explicitly marked as EXPERIMENTAL, since many bugs remain. Keep this in mind when you try it out, and please let us know your issues!Note: GritQL escapes code snippets using backticks, but most shells interpret backticks as command invocations. To avoid this, it's best to put single quotes around your Grit queries.
biome search '`console.log($message)`' # find all `console.log` invocations
Contributed by @arendjr and @BackupMiles
-
The option
--max-diagnostics
now accept anone
value, which lifts the limit of diagnostics shown. Contributed by @ematipico-
Add a new reporter
--reporter=gitlab
, that emits diagnostics for using the GitLab Code Quality report.[ { "description": "Use === instead of ==. == is only allowed when comparing against `null`", "check_name": "lint/suspicious/noDoubleEquals", "fingerprint": "6143155163249580709", "severity": "critical", "location": { "path": "main.ts", "lines": { "begin": 4 } } } ]
Contributed by @NiclasvanEyk
-
-
Add new options to the
lsp-proxy
andstart
commands:--log-path
: a directory where to store the daemon logs. The commands also accepts the environment variableBIOME_LOG_PATH
.--log-prefix-name
: a prefix that's added to the file name of the logs. It defaults toserver.log
. The commands also accepts the environment variableBIOME_LOG_PREFIX_NAME
.
Enhancements
-
When a
--reporter
is provided, and it's different from the default one, the value provided by via--max-diagnostics
is ignored and the limit is lifted. Contributed by @ematipico -
biome init
now generates a new config file with more options set.
This change intends to improve discoverability of the options and to set the more commonly used options to their default values.
Contributed by @Conaclos -
The
--verbose
flag now reports the list of files that were evaluated, and the list of files that were fixed.
The evaluated files are the those files that can be handled by Biome, files that are ignored, don't have an extension or have an extension that Biome can't evaluate are excluded by this list.
The fixed files are those files that were handled by Biome and changed. Files that stays the same after the process are excluded from this list.VERBOSE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ℹ Files processed: - biome/biome.json - biome/packages/@biomejs/cli-win32-arm64/package.json - biome/packages/tailwindcss-config-analyzer/package.json VERBOSE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ℹ Files fixed: - biome/biome/packages/tailwindcss-config-analyzer/src/generate-tailwind-preset.ts
Contributed by @ematipico
-
Allow passing
nursery
to the--only
and--skip
filters.The
--only
option allows you to run a given rule or rule group.
The--skip
option allows you to skip the execution of a given group or a given rule.Previously, it was not possible to pass
nursery
.
This restriction is now removed, as it may make sense to skip the nursery rules that a project has enabled.Contributed by @Conaclos
-
The CLI now returns an error code when calling a command in
stdin
mode, and the contents of the files aren't fixed. For example, the following example will result in an error code of1
because thelint
command triggers some lint rules:echo "let x = 1" | biome lint --stdin-file-path=stdin.js
Contributed by @ematipico
Bug fixes
-
biome lint --write
now takes--only
and--skip
into account (#3470). Contributed by @Conaclos -
Fix #3368, now the reporter
github
tracks the diagnostics that belong to formatting and organize imports. Contributed by @ematipico -
Fix #3545, display a warning, 'Avoid using unnecessary Fragment,' when a Fragment contains only one child element that is placed on a new line. Contributed by @satojin219
-
Migrating from Prettier or ESLint no longer overwrite the
overrides
field from the configuration (#3544). Contributed by @Conaclos -
Fix JSX expressions for
noAriaHiddenOnFocusable
(#3708). Contributed by @anthonyshew -
Fix edge case for
<canvas>
elements that userole="img"
(#3728). Contributed by @anthonyshew -
Fix #3633, where diagnostics where incorrectly printed if the code has errors. Contributed by @ematipico
-
Allow
aria-label
on heading to preventuseHeadingContent
diagnostic (#3767). Contributed by @anthonyshew -
Fix edge case #3791 for rule
noFocusedTests
being used with non-string-like expressions (#3793). Contributed by @h-a-n-a
Configuration
-
Add support for loading configuration from
.editorconfig
files (#1724).Configuration supplied in
.editorconfig
will be overridden by the configuration inbiome.json
. Support is disabled by default and can be enabled by adding the following to your formatter configuration inbiome.json
:{ "formatter": { "useEditorconfig": true } }
Contributed by @dyc3
-
overrides
from an extended configuration is now merged with theoverrides
of the extension.Given the following shared configuration
biome.shared.json
:{ "overrides": [ { "include": ["**/*.json"], // ... } ] }
and the following configuration:
{ "extends": ["./biome.shared.json"], "overrides": [ { "include": ["**/*.ts"], // ... } ] }
Previously, the
overrides
frombiome.shared.json
was overwritten.
It is now merged and results in the following configuration:{ "extends": ["./biome.shared.json"], "overrides": [ { "include": ["**/*.json"], // ... }, { "include": ["**/*.ts"], // ... } ] }
Contributed by @Conaclos
Editors
Bug fixes
- Fix #3577, where the update of the configuration file was resulting in the creation of a new internal project. Contributed by @ematipico
- Fix #3696, where
biome.jsonc
was incorrectly parsed with incorrect options. Contributed by @ematipico
Formatter
Enhancements
-
Add parentheses for nullcoalescing in ternaries.
This change aligns on Prettier 3.3.3.
This adds clarity to operator precedence.- foo ? bar ?? foo : baz; + foo ? (bar ?? foo) : baz;
Contributed by @Conaclos
-
The CSS formatter is enabled by default. Which means that you don't need to opt-in anymore using the configuration file
biome.json
:{ - "css": { - "formatter": { - "enabled": true - } - } }
Contributed by @ematipico
Bug fixes
-
Keep the parentheses around
infer ... extends
declarations in type unions and type intersections (#3419). Contributed by @Conaclos -
Keep parentheses around a
yield
expression inside a type assertion.Previously, Biome removed parentheses around some expressions that require them inside a type assertion.
For example, in the following code, Biome now preserves the parentheses.function* f() { return <T>(yield 0); }
Contributed by @Conaclos
-
Remove parentheses around expressions ...
CLI v1.8.4-nightly.bd1d0c6
Analyzer
Enhancements
- Implement css suppression action. Contributed by @togami2864
- Add support of comments in
turbo.json
. Contributed by @Netail
CLI
New features
- Add
--graphql-linter-enabled
option, to control whether the linter should be enabled or not for GraphQL files. Contributed by @ematipico - The option
--max-diagnostics
now accept anone
value, which lifts the limit of diagnostics shown. Contributed by @ematipico
Enhancements
-
When a
--reporter
is provided, and it's different from the default one, the value provided by via--max-diagnostics
is ignored and the limit is lifted. Contributed by @ematipico -
biome init
now generates a new config file with more options set.
This change intends to improve discoverability of the options and to set the more commonly used options to their default values.
Contributed by Conaclos
Bug fixes
biome lint --write
now takes--only
and--skip
into account (#3470). Contributed by Conaclos
Configuration
- Add support for loading configuration from
.editorconfig
files (#1724). Contributed by @dyc3
Configuration supplied in.editorconfig
will be overridden by the configuration inbiome.json
. Support is disabled by default and can be enabled by adding the following to your formatter configuration inbiome.json
:{ "formatter": { "useEditorconfig": true } }
Formatter
Enhancements
-
Add parentheses for nullcoalescing in ternaries.
This change aligns on Prettier 3.3.3.
This adds clarity to operator precedence.- foo ? bar ?? foo : baz; + foo ? (bar ?? foo) : baz;
Contributed by @Conaclos
Bug fixes
-
Keep the parentheses around
infer
declarations in type unions and type intersections (#3419). Contributed by @Conaclos -
Keep parentheses around a
yield
expression inside a type assertion.Previously, Biome removed parentheses around some expressions that require them inside a type assertion.
For example, in the following code, Biome now preserves the parentheses.function* f() { return <T>(yield 0); }
Contributed by @Conaclos
-
Remove parentheses around expressions that don't need them inside a decorator.
Biome now matches Prettier in the following cases:
class { - @(decorator) + @decorator method() {} }, class { - @(decorator()) + @decorator() method() {} }, class { @(decorator?.()) method() {} },
Contributed by @Conaclos
-
Keep parentheses around objects preceded with a
@satisfies
comment.In the following example, parentheses are no longer removed.
export const PROPS = /** @satisfies {Record<string, string>} */ ({ prop: 0, });
Contributed by @Conaclos
Linter
New features
-
Add support for GraphQL linting. Contributed by @ematipico
-
Add nursery/noDynamicNamespaceImportAccess. Contributed by @minht11
-
noUndeclaredVariables no longer reports a direct reference to an enum member (#2974).
In the following code, the
A
reference is no longer reported as an undeclared variable.enum E { A = 1, B = A << 1, }
Contributed by @Conaclos
-
Add nursery/noIrregularWhitespace. Contributed by @michellocana
-
Implement
noIrreguluarWhitespace
for CSS. Contributed by @DerTimonius -
Add nursery/useTrimStartEnd. Contributed by @chansuke
Enhancements
-
noInvalidUseBeforeDeclaration now reports direct use of an enum member before its declaration.
In the following code,
A
is reported as use before its declaration.enum E { B = A << 1, A = 1, }
Contributed by @Conaclos
-
useFilenamingConvention now supports unicase letters.
unicase letters have a single case: they are neither uppercase nor lowercase.
Biome now accepts filenames in unicase.
For example, the filename안녕하세요
is now accepted.We still reject a name that mixes unicase characters with lowercase or uppercase characters.
For example, the filenameA안녕하세요
is rejected.This change also fixes #3353.
Filenames consisting only of numbers are now accepted.Contributed by @Conaclos
-
useFilenamingConvention now supports Next.js/Nuxt/Astro dynamic routes (#3465).
Next.js, SolidStart, Nuxt, and Astro support dynamic routes such as
[...slug].js
and[[...slug]].js
.Biome now recognizes this syntax.
slug
must contain only alphanumeric characters.Contributed by @Conaclos
-
useExportType no longer report empty
export
(#3535).An empty
export {}
allows you to force TypeScript to consider a file with no imports and exports as an EcmaScript module.
Whileexport type {}
is valid, it is more common to useexport {}
.
Users may find it confusing that the linter asks them to convert it toexport type {}
.
Also, a bundler should be able to removeexport {}
as well asexport type {}
.
So it is not so useful to reportexport {}
.Contributed by @Conaclos
-
noUnusedVariables now checks TypeScript declaration files.
This allows to report a type that is unused because it isn't exported.
Global declarations files (declarations files without exports and imports) are still ignored.Contributed by @Conaclos
Bug fixes
-
Don't request alt text for elements hidden from assistive technologies (#3316). Contributed by @robintown
-
Fix [#3149] crashes that occurred when applying the
noUselessFragments
unsafe fixes in certain scenarios. Contributed by @unvalley -
noExcessiveNestedTestSuites
: Fix another edge case where the rule would alert on heavily nested zod schemas. Contributed by @dyc3 -
noExtraNonNullAssertion
no longer reports a single non-null assertion enclosed in parentheses (#3352). Contributed by @Conaclos -
useAdjacentOverloadSignatures
no longer reports a#private
class member and a public class member that share the same name (#3309).The following code is no longer reported:
class C { #f() {} g() {} f() {} }
Contributed by @Conaclos
-
useNamingConvention now accepts applying custom convention on abstract classes. Contributed by @Conaclos
-
useNamingConvention no longer suggests an empty fix when a name doesn't match strict Pascal case (#3561).
Previously the following code led
useNamingConvention
to suggest an empty fix.
The rule no longer provides a fix for this case.type AAb = any
Contributed by @Conaclos
-
useNamingConvention no longer provides fixes for global TypeScript declaration files.
Global TypeScript declaration files have no epxorts and no imports.
All the declared types are available in all files of the project.
Thus, it is not safe to propose renaming only in the declaration file.Contributed by @Conaclos
Parser
Bug fixes
- Fix #3287 nested selectors with pseudo-classes. Contributed by @denbezrukov
- Fix #3349 allow CSS multiple ampersand support. Contributed by @denbezrukov
.class {
&& {
color: red;
}
}
- Fix #3410 by correctly parsing break statements containing keywords.
Contributed by @ah-yu
out: while (true) { break out; }
What's Changed
Other changes
CLI v1.8.3
CLI
Bug fixes
-
Fix #3104 by suppressing node warnings when using
biome migrate
. Contributed by @SuperchupuDev -
Force colors to be off when using the GitHub reporter to properly create annotations in GitHub actions (#3148). Contributed by @Sec-ant
Parser
Bug fixes
- Implement CSS unicode range. Contributed by @denbezrukov
Formatter
Bug fixes
- Fix #3184 CSS formatter converts custom identifiers to lowercase. Contributed by @denbezrukov
- Fix #3256 constant crashes when editing css files #3256. Contributed by @denbezrukov
Linter
New features
- Add
nursery/useDeprecatedReason
rule. Contributed by @vohoanglong0107. - Add nursery/noExportedImports. Contributed by @Conaclos
Bug fixes
useConsistentArrayType
anduseShorthandArrayType
now ignoreArray
in theextends
andimplements
clauses. Fix #3247. Contributed by @Conaclos- Fixes #3066 by taking into account the dependencies declared in the
package.json
. Contributed by @ematipico - The code action of the
useArrowFunction
rule now preserves a trailing comma when there is only a single type parameter in the arrow function and JSX is enabled. Fixes #3292. Contributed by @Sec-ant
Enhancements
-
Enhance tailwind sorting lint rule #1274 with variant support.
Every preconfigured variant is assigned a
weight
that concurs on establishing the output sorting order.
Since nesting variants on the same utility class is possible, the resultingweight
is the Bitwise XOR of all the variants weight for that class.
Dynamic variants (e.g.has-[.custom-class]
,group-[:checked]
) are also supported and they take theweight
of their base variant name the custom value attached (e.g.has-[.custom-class]
takeshas
weight).
Arbitrary variants (e.g.[&nth-child(2)]
) don't have a weight assigned and they are placed after every known variant.
Classes with the same amount of arbitrary variants follow lexicographical order. The class that has the highest number of nested arbitrary variants is placed last.
Screen variants (e.g.sm:
,max-md:
,min-lg:
) are not supported yet.Contributed by @lutaok
What's Changed
Other changes
- feat(workspace): adds GraphQL parsing capabilities via feature by @ematipico in #3238
- feat(editorconfig): expand unknown globs into known globs by @dyc3 in #3218
- chore(core): implement
pull_diagnostics
for graphql by @ematipico in #3248 - chore(linter): add a rule source of
noUnknownProperty
by @togami2864 in #3252 - feat: tailwind variant sorting by @lutaok in #3208
- test(parse/json): add test for bug where overrides erroneously override special parsing options by @dyc3 in #3260
- docs(analyzer): improve contributing guide for rules with multiple signals by @minht11 in #3245
- chore(lint): initialise
biome_graphql_analyze
by @ematipico in #3276 - chore(deps): update @biomejs packages by @renovate in #3266
- docs(useNamingConvention): add examples and improve explanations by @Conaclos in #3277
- refactor(parse/json): change fields in
JsonParserSettings
toOption
by @dyc3 in #3272 - feat(search-output-formatter): initialize search output formatter by @BackupMiles in #3258
- chore(grit): implement node-like compilers + fixes by @arendjr in #3253
- feat: enable linting for graphql by @ematipico in #3295
- refactor(parse/css): change fields in
CssParserSettings
toOption
by @dyc3 in #3273 - refactor: add variables to format strings directly by @hamirmahal in #3299
- chore: update codegen to include GraphQL by @ematipico in #3301
New Contributors
- @BackupMiles made their first contribution in #3258
- @hamirmahal made their first contribution in #3299
Full Changelog: cli/v1.8.2...cli/v1.8.3
CLI v1.8.2
CLI
Bug fixes
- Fix #3201 by correctly injecting the source code of the file when printing the diagnostics. Contributed by @ematipico
- Fix #3179 where comma separators are not correctly removed after running
biome migrate
and thus choke the parser. Contributed by @Sec-ant - Fix #3232 by correctly using the colors set by the user. Contributed by @ematipico
Enhancement
-
Reword the reporter message
No fixes needed
toNo fixes applied
.The former message is misleading when there're still errors or warnings in the files that should be taken care of manually. For example:
Checked 2 files in <TIME>. No fixes needed. Found 2 errors.
The new message suits better in these cases.
Contributed by @Sec-ant
Configuration
Bug fixes
-
Don't conceal previous overrides (#3176).
Previously, each override inherited the unset configuration of the base configuration.
This means that setting a configuration in an override can be concealed by a subsequent override that inherits of the value from the base configuration.For example, in the next example,
noDebugger
was disabled for theindex.js
file.{ "linter": { "rules": { "suspicious": { "noDebugger": "off" } } }, "overrides": [ { "include": ["index.js"], "linter": { "rules": { "suspicious": { "noDebugger": "warn" } } } }, { "include": ["index.js"], "linter": { "rules": { "suspicious": { "noDoubleEquals": "off" } } } } ] }
The rule is now correctly enabled for the
index.js
file.Contributed by @Conaclos
Formatter
Bug fixes
- Fix #3103 by correctly resolving CSS formatter options. Contributed by @ah-yu
- Fix #3192 don't add an extra whitespace within :has. Contributed by @denbezrukov
JavaScript APIs
Bug fixes
- Fix a regression introduced by the release of
v1.8.0
Linter
New features
- Add nursery/useValidAutocomplete. Contributed by @unvalley
Bug fixes
-
Add nursery/noShorthandPropertyOverrides. #2958 Contributed by @neokidev
-
Fix [#3084] false positive by correctly recognize parenthesized return statement. Contributed by @unvalley
-
useImportExtensions now suggests a correct fix for
import '.'
andimport './.'
. Contributed by @minht11 -
Fix useDateNow false positive when new Date object has arguments
new Date(0).getTime()
. Contributed by @minht11. -
The
noUnmatchableAnbSelector
rule is now able to catch unmatchablean+b
selectors like0n+0
or-0n+0
. Contributed by @Sec-ant. -
The
useHookAtTopLevel
rule now recognizes properties named as hooks likefoo.useFoo()
. Contributed by @ksnyder9801 -
Fix #3092, prevent warning for
Custom properties (--*)
. Contributed by @chansuke -
Fix a false positive in the
useLiteralKeys
rule. (#3160)This rule now ignores the following kind of computed member name:
const a = { [`line1 line2`]: true, };
Contributed by @Sec-ant
-
The noUnknownProperty rule now ignores the
composes
property often used in css modules. #3000 Contributed by @chansuke -
Fix false positives of the useExhaustiveDependencies rule.
The component itself is considered stable when it is used recursively inside a hook closure defined inside of it:
import { useMemo } from "react"; function MyRecursiveComponent() { // MyRecursiveComponent is stable, we don't need to add it to the dependencies list. const children = useMemo(() => <MyRecursiveComponent />, []); return <div>{children}</div>; }
Also,
export default function
andexport default class
are considered stable now because they can only appear at the top level of a module.Contributed by @Sec-ant
-
Fix missing
withDefaults
macro in vue files for globals variables. Contributed by @Shyam-Chen
Parser
Bug fixes
- Fix CSS modules settings mapping. Contributed by @denbezrukov
What's Changed
Other changes
- chore(ci): improve rules_check task by @Sec-ant in #3165
- chore: change
js
code blocks containing JSX elements tojsx
by @Sec-ant in #3168 - feat(biome_js_analyzer):
noSubstr
by @chansuke in #3125 - chore(deps): update rust crate tokio to 1.38.0 by @renovate in #3146
- chore(grit): implement Grit snippet bindings by @arendjr in #3162
- chore(deps): update @biomejs packages by @renovate in #3145
- feat(analyzer):
useSortedKeys
for JSON objects by @ematipico in #2412 - docs(useImportType): add docs about TypeScript settings by @Conaclos in #3171
- docs(noUndeclaredDependencies,useImportExtensions): add note about LSP configs by @Conaclos in #3173
- docs(no_undeclared_dependencies): follow up fix of #3173 by @Sec-ant in #3175
- chore(ci): try enable
--compact
flag forpkg.pr.new
by @Sec-ant in #3180 - chore(ci): remove
--compact
flag by @Sec-ant in #3181 - fix(formatter): escape double quotes when printing formatter IR by @dyc3 in #3036
- fix: remove unnecessary example by @lanker in #3185
- chore: move maintainers to past maintainers by @ematipico in #3189
- chore: removes old files by @ematipico in #3188
- chore: move Sec-ant to core contributor by @Sec-ant in #3190
- chore: add minht11 to the maintainers team by @minht11 in #3191
- chore: add
chansuke
to maintainers list by @chansuke in #3206 - chore: rust 1.79.0 by @ematipico in #3222
- chore(deps): update github-actions by @renovate in #3225
- chore(deps): update @biomejs packages by @renovate in #3224
- chore(grit): improve snippet compiler by @arendjr in #3223
- refactor(analyzer): use
enumflags2
by @ematipico in #3230 - feat(biome_css_analyzer): implement function-linear-gradient-no-nonstandard-direction by @mdm317 in #2911
- chore(deps): update dependency eslint to v9.5.0 by @renovate in #3227
- fix(deps): update rust crates by @renovate in #3226
New Contributors
- @ksnyder9801 made their first contribution in #3140
- @lanker made their first contribution in #3185
- @aldahick made their first contribution in #3239
Full Changelog: cli/v1.8.1...cli/v1.8.2
CLI v1.8.1
CLI
Bug fixes
- Fix #3069, prevent overwriting paths when using
--staged
or--changed
options. Contributed by @unvalley - Fix a case where the file link inside a diagnostic wasn't correctly displayed inside a terminal run by VSCode. Contributed by @uncenter
Configuration
Bug fixes
- Fix #3067, by assigning the correct default value to
indentWidth
. Contributed by @ematipico
Formatter
Bug fixes
- Fix the bug where whitespace after the & character in CSS nesting was incorrectly trimmed, ensuring proper targeting of child classes #3061. Contributed by @denbezrukov
- Fix #3068 where the CSS formatter was inadvertently converting variable declarations and function calls to lowercase. Contributed by @denbezrukov
- Fix the formatting of CSS grid layout properties. Contributed by @denbezrukov
Linter
Bug fixes
-
The
noEmptyBlock
css lint rule now treats empty blocks containing comments as valid ones. Contributed by @Sec-ant -
useLiteralKeys no longer reports quoted member names (#3085).
Previously useLiteralKeys reported quoted member names that can be unquoted.
For example, the rule suggested the following fix:- const x = { "prop": 0 }; + const x = { prop: 0 };
This conflicted with the option quoteProperties of our formatter.
The rule now ignores quoted member names.
Contributed by @Conaclos
-
noEmptyInterface now ignores empty interfaces in ambient modules (#3110). Contributed by @Conaclos
-
noUnusedVariables and noUnusedFunctionParameters no longer report the parameters of a constructor type (#3135).
Previously,
arg
was reported as unused in a constructor type like:export type Classlike = new (arg: unknown) => string;
Contributed by @Conaclos
-
noStringCaseMismatch now ignores escape sequences (#3134).
The following code is no longer reported by the rule:
s.toUpperCase() === "\u001b";
Contributed by @Conaclos
Parser
New features
- Implemented CSS Unknown At-Rule parsing, allowing the parser to gracefully handle unsupported or unrecognized CSS at-rules. Contributed by @denbezrukov
Bug fixes
- Fix #3055 CSS: Layout using named grid lines is now correctly parsed. Contributed by @denbezrukov
- Fix #3091. Allows the parser to handle nested style rules and at-rules properly, enhancing the parser's compatibility with the CSS Nesting Module. Contributed by @denbezrukov
Other changes
- fix(docs): incorrect snippets by @ematipico in #3059
- feat(grit): parse Grit literal snippets by @arendjr in #3051
- chore: delete stale snapshots by @siosio34 in #3062
- fix(noUnusedFunctionParameters): fix typo in documentation code example by @printfn in #3065
- feat(graphql_parser): parse enum extension by @vohoanglong0107 in #3044
- docs(useNamingConvention): fix conventions example by @Conaclos in #3070
- docs(readme): fix replace
apply
bywrite
option by @Jayllyz in #3071 - refactor: use --write instead of --apply in CLI advices by @Conaclos in #3083
- fix:
use-adjacent-overload-signature
diagnostic by @chansuke in #3095 - chore: fix JSON schema for biome config file by @Conaclos in #3109
- chore(deps): update dependency dprint to v0.46.1 by @renovate in #3042
- fix(deps): update rust crates by @renovate in #3041
- refactor(lint): add SonarJs and UnusedImports rule sources by @Conaclos in #3128
- fix(graphql_parser): allow backlash in block string by @vohoanglong0107 in #3113
- feat(graphql_parser): parse input object type extension by @vohoanglong0107 in #3112
- feat(biome_css_analyzer): implement selector-pseudo-class-no-unknown by @tunamaguro in #3034
- fix(deps): update rust crate roaring to 0.10.5 by @renovate in #3144
- chore(deps): update rust crate regex to 1.10.5 by @renovate in #3141
- chore(deps): update rust crate enumflags2 to 0.7.10 by @renovate in #3139
- chore(deps): update dependency dprint to v0.46.2 by @renovate in #3138
- chore(deps): update rust docker tag to v1.78.0 by @renovate in #3147
- ci: add check for rules docs by @ematipico in #3150
- ci: add check for rules docs by @ematipico in #3152
- chore: format
package.json
like npm does by @ematipico in #3155 - feat(biome_css_analyzer): noShorthandPropertyOverrides by @neokidev in #2958
- feat(biome_css_analyzer):
useConsistentGridAreas
by @chansuke in #2940
New Contributors
Full Changelog: cli/v1.8.0...cli/v1.8.1
CLI v1.8.0
Analyzer
New features
- Allow suppression comments to suppress individual instances of rules. This is
used for the lint ruleuseExhaustiveDependencies
, which is now able to
suppress specific dependencies. Fixes #2509. Contributed by @arendjr
Enhancements
- Assume
Astro
object is always a global when processing.astro
files. Contributed by @minht11 - Assume Vue compiler macros are globals when processing
.vue
files. (#2771) Contributed by @dyc3
CLI
New features
-
New
clean
command. Use this new command to clean after thebiome-logs
directory, and remove all the log files.biome clean
-
Add two new options
--only
and--skip
to the commandbiome lint
(#58).The
--only
option allows you to run a given rule or rule group,
For example, the following command runs only thestyle/useNamingConvention
andstyle/noInferrableTypes
rules.
If the rule is disabled in the configuration, then its severity level is set toerror
for a recommended rule orwarn
otherwise.biome lint --only=style/useNamingConvention --only=style/noInferrableTypes
Passing a group does not change the severity level of the rules in the group.
All the disabled rules in the group will remain disabled.
To ensure that the group is run, therecommended
field of the group is enabled.
Thenursery
group cannot be passed, as no rules are enabled by default in the nursery group.The
--skip
option allows you to skip the execution of a given group or a given rule.
For example, the following command skips thestyle
group and thesuspicious/noExplicitAny
rule.biome lint --skip=style --skip=suspicious/noExplicitAny
You can also use
--only
and--skip
together.--skip
oevrrides--only
.
The following command executes only the rules from thestyle
group, but thestyle/useNamingConvention
rule.biome lint --only=style --skip=style/useNamingConvention
These options are compatible with other options such as
--write
(previously--apply
), and--reporter
.Contributed by @Conaclos
-
Add new command
biome clean
. Use this command to purge all the logs emitted by the Biome daemon. This command is really useful, because the Biome daemon tends
log many files and contents during its lifecycle. This means that if your editor is open for hours (or even days), thebiome-logs
folder could become quite heavy. Contributed by @ematipico -
Add support for formatting and linting CSS files from the CLI. These operations are opt-in for the time being.
If you don't have a configuration file, you can enable these features with
--css-formatter-enabled
and--css-linter-enabled
:biome check --css-formatter-enabled=true --css-linter-enabled=true ./
Contributed by @ematipico
-
Add new CLI options to control the CSS formatting. Check the CLI reference page for more details. Contributed by @ematipico
-
Add new options
--write
,--fix
(alias of--write
) and--unsafe
to the commandbiome lint
andbiome check
.
Add a new option--fix
(alias of--write
) to the commandbiome format
andbiome migrate
.biome <lint|check> --<write|fix> [--unsafe] biome format --<write|fix> biome migrate --<write|fix>
The
biome <lint|check> --<write|fix>
has the same behavior asbiome <lint|check> --apply
.
Thebiome <lint|check> --<write|fix> --unsafe
has the same behavior asbiome <lint|check> --apply-unsafe
.
Thebiome format --fix
has the same behavior asbiome format --write
.
Thebiome migrate --fix
has the same behavior asbiome migrate --write
.This change allows these commands to write modifications in the same options.
With this change, the--apply
and--apply-unsafe
options are deprecated.Contributed by @unvalley
Enhancements
-
Biome now executes commands (lint, format, check and ci) on the working directory by default. #2266 Contributed by @unvalley
- biome check . + biome check # You can run the command without the path
-
biome migrate eslint
now tries to convert ESLint ignore patterns into Biome ignore patterns.ESLint uses gitignore patterns.
Biome now tries to convert these patterns into Biome ignore patterns.For example, the gitignore pattern
/src
is a relative path to the file in which it appears.
Biome now recognizes this and translates this pattern to./src
.Contributed by @Conaclos
-
biome migrate eslint
now supports theeslintIgnore
field inpackage.json
.ESLint allows the use of
package.json
as an ESLint configuration file.
ESLint supports two fields:eslintConfig
andeslintIgnore
.
Biome only supported the former. It now supports both.Contributed by @Conaclos
-
biome migrate eslint
now propagates NodeJS errors to the user.This will help users to identify why Biome is unable to load some ESLint configurations.
Contributed by @Conaclos
-
Add a new
--reporter
calledsummary
. This reporter will print diagnostics in a different way, based on the tools (formatter, linter, etc.) that are executed.
Import sorting and formatter shows the name of the files that require formatting. Instead, the linter will group the number of rules triggered and the number of errors/warnings:Formatter ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to be formatted: main.ts index.ts Organize Imports ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to have their imports sorted: main.ts index.ts Analyzer ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Some analyzer rules were triggered Rule Name Diagnostics lint/suspicious/noImplicitAnyLet 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDoubleEquals 8 (8 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noRedeclare 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDebugger 20 (20 error(s), 0 warning(s), 0 info(s))
Contributed by @ematipico
-
biome ci
now enforces printing the output using colours. If you were previously using--colors=force
, you can remove it because it's automatically set. Contributed by @ematipico -
Add a new
--reporter
calledgithub
. This reporter will print diagnostics using GitHub workflow commands:::error title=lint/suspicious/noDoubleEquals,file=main.ts,line=4,endLine=4,col=3,endColumn=5::Use === instead of == ::error title=lint/suspicious/noDebugger,file=main.ts,line=6,endLine=6,col=1,endColumn=9::This is an unexpected use of the debugger statement. ::error title=lint/nursery/noEvolvingAny,file=main.ts,line=8,endLine=8,col=5,endColumn=6::This variable's type is not allowed to evolve implicitly, leading to potential any types.
Contributed by @ematipico
-
Add a new
--reporter
calledjunit
. This reporter will print diagnostics using GitHub workflow commands:<?xml version="1.0" encoding="UTF-8"?> <testsuites name="Biome" tests="16" failures="16" errors="20" time="<TIME>"> <testsuite name="main.ts" tests="1" disabled="0" errors="0" failures="1" package="org.biome"> <testcase name="org.biome.lint.suspicious.noDoubleEquals" line="4" column="3"> <failure message="Use === instead of ==. == is only allowed when comparing against `null`">line 3, col 2, Use === instead of ==. == is only allowed when comparing against `null`</failure> </testcase> </testsuite> <testsuite name="main.ts" tests="1" disabled="0" errors="0" failures="1" package="org.biome"> <testcase name="org.biome.lint.suspicious.noDebugger" line="6" column="1"> <failure message="This is an unexpected use of the debugger statement.">line 5, col 0, This is an unexpected use of the debugger statement.</failure> </testcase> </testsuite> <testsuite name="main.ts" tests="1" disabled="0" errors="0" failures="1" package="org.biome"> <testcase name="org.biome.lint.nursery.noEvolvingAny" line="8" column="5"> <failure message="This variable's type is not allowed to evolve implicitly, leading to potential any types.">line 7, col 4, This variable's type is not allowed to evolve implicitly, leading to potential any types.</failure> </testcase> </testsuite> </testsuites>
Contributed by @ematipico
Bug fixes
- Fix #3024, where running
biome init
would createbiome.json
even ifbiome.jsonc
already exists. Contributed by @minht11
Configuration
New features
-
Add an rule option
fix
to override the code fix kind of a rule (#2882).A rule can provide a safe or an unsafe code action.
You can now tune the kind of code actions thanks to thefix
option.
This rule option takes a value among:none
: the rule no longer emits code actions.safe
: the rule emits safe code action.unsafe
: the rule emits unsafe code action.
The following configuration disables the code actions of
noUnusedVariables
, makes the emitted code actions ofstyle/useConst
a...
CLI v1.7.4-nightly.125f34b
Analyzer
Enhancements
CLI
New features
-
Add a new option
--rule
to the commandbiome lint
(#58).This new option allows you to execute a single rule or a rule group.
This option is convenient to test a rule or apply the code fixes of a single rule.For example, you can execute the
style/useNamingConvention
rule on the working directory:biome lint --rule=style/useNamingConvention ./
If the rule has a code action (autofix), you can use
--apply
to apply the fix:biome lint --rule=style/useNamingConvention --apply ./
The option takes the rule options in the Biome configuration file into account.
Only, the severity level of the rule is overridden by its default value,
i.e.error
for a recommended rule orwarn
otherwise.You can also run a group of rules:
biome lint --rule=suspicious src/main.js
In this case, the severity level of a rule is not overridden.
Thus, the disabled rules stay disabled.
To ensure that the group is run, therecommended
field of the group is turned on.
Thenursery
group cannot be passed because no rules are enabled in the nursery group by default.The option is compatible with other options such as
--apply
,--apply-unsafe
and--reporter
.Contributed by @Conaclos
-
Add new command
biome clean
. Use this command to purge all the logs emitted by the Biome daemon. This command is really useful, because the Biome daemon tends
log many files and contents during its lifecycle. This means that if your editor is open for hours (or even days), thebiome-logs
folder could become quite heavy. Contributed by @ematipico -
Add support for formatting and linting CSS files from the CLI. These operations are opt-in for the time being.
If you don't have a configuration file, you can enable these features with
--css-formatter-enabled
and--css-linter-enabled
:biome check --css-formatter-enabled=true --css-linter-enabled=true ./
Contributed by @ematipico
-
Add new CLI options to control the CSS formatting. Check the CLI reference page for more details. Contributed by @ematipico
-
Add new options
--write
,--fix
(alias of--write
) and--unsafe
to the commandbiome lint
andbiome check
.
Add a new option--fix
(alias of--write
) to the commandbiome format
andbiome migrate
.biome <lint|check> --<write|fix> [--unsafe] biome format --<write|fix> biome migrate --<write|fix>
The
biome <lint|check> --<write|fix>
has the same behavior asbiome <lint|check> --apply
.
Thebiome <lint|check> --<write|fix> --unsafe
has the same behavior asbiome <lint|check> --apply-unsafe
.
Thebiome format --fix
has the same behavior asbiome format --write
.
Thebiome migrate --fix
has the same behavior asbiome migrate --write
.This change allows these commands to write modifications in the same options.
With this change, the--apply
and--apply-unsafe
options are deprecated.Contributed by @unvalley
Enhancements
-
Biome now executes commands (lint, format, check and ci) on the working directory by default. #2266 Contributed by @unvalley
- biome check . + biome check # You can run the command without the path
-
biome migrate eslint
now tries to convert ESLint ignore patterns into Biome ignore patterns.ESLint uses gitignore patterns.
Biome now tries to convert these patterns into Biome ignore patterns.For example, the gitignore pattern
/src
is a relative path to the file in which it appears.
Biome now recognizes this and translates this pattern to./src
.Contributed by @Conaclos
-
biome migrate eslint
now supports theeslintIgnore
field inpackage.json
.ESLint allows the use of
package.json
as an ESLint configuration file.
ESLint supports two fields:eslintConfig
andeslintIgnore
.
Biome only supported the former. It now supports both.Contributed by @Conaclos
-
biome migrate eslint
now propagates NodeJS errors to the user.This will help users to identify why Biome is unable to load some ESLint configurations.
Contributed by @Conaclos
-
Add a new
--reporter
calledsummary
. This reporter will print diagnostics in a different way, based on the tools (formatter, linter, etc.) that are executed.
Import sorting and formatter shows the name of the files that require formatting. Instead, the linter will group the number of rules triggered and the number of errors/warnings:Formatter ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to be formatted: main.ts index.ts Organize Imports ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to have their imports sorted: main.ts index.ts Analyzer ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Some analyzer rules were triggered Rule Name Diagnostics lint/suspicious/noImplicitAnyLet 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDoubleEquals 8 (8 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noRedeclare 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDebugger 20 (20 error(s), 0 warning(s), 0 info(s))
Contributed by @ematipico
-
biome ci
now enforces printing the output using colours. If you were previously using--colors=force
, you can remove it because it's automatically set. Contributed by @ematipico
Configuration
New features
-
Add an rule option
fix
to override the code fix kind of a rule (#2882).A rule can provide a safe or an unsafe code action.
You can now tune the kind of code actions thanks to thefix
option.
This rule option takes a value among:none
: the rule no longer emits code actions.safe
: the rule emits safe code action.unsafe
: the rule emits unsafe code action.
The following configuration disables the code actions of
noUnusedVariables
, makes the emitted code actions ofstyle/useConst
andstyle/useTemplate
unsafe and safe respectively.{ "linter": { "rules": { "correctness": { "noUnusedVariables": { "level": "error", "fix": "none" }, "style": { "useConst": { "level": "warn", "fix": "unsafe" }, "useTemplate": { "level": "warn", "fix": "safe" } } } } } }
Contributed by @Conaclos
-
Add option
javascript.linter.enabled
to control the linter for JavaScript (and its super languages) files. Contributed by @ematipico -
Add option
json.linter.enabled
to control the linter for JSON (and its super languages) files. Contributed by @ematipico -
Add option
css.linter.enabled
to control the linter for CSS (and its super languages) files. Contributed by @ematipico -
Add option
css.formatter
, to control the formatter options for CSS (and its super languages) files. Contributed by @ematipico
Enhancements
- The
javascript.formatter.trailingComma
option is deprecated and renamed tojavascript.formatter.trailingCommas
. The corresponding CLI option--trailing-comma
is also deprecated and renamed to--trailing-commas
. Details can be checked in #2492. Contributed by @Sec-ant
Editors
New features
- Add support for LSP Workspaces
Bug fixes
- Fixes #2781, by correctly computing the configuration to apply to a specific file. Contributed by @ematipico
Formatter
Bug fixes
- Fix #2470 by avoid introducing linebreaks in single line string interpolations. Contributed by @ah-yu
- Resolve deadlocks by narrowing the scope of locks. Contributed by @mechairoi
- Fix #2782 by computing the enabled rules by taking the override settings into consideration. Contributed by @ematipico
JavaScript APIs
Linter
New features
-
Add nursery/useThrowOnlyError. Contributed by @minht11
-
Add nursery/useImportExtensions. Contributed by @minht11
-
useNamingConvention now supports an option to enforce custom conventions (#1900).
For example, you can enforce the use of a prefix for private class members:
{ "linter": { "rules": { "style": { "useNamingConvention": { "level": "error", "options": { "conventions": [ { "selector": { "kind": "classMember", "modifiers": ["private"] }, "match": "_(.*)", "formats": ["camelCase"] } ] } } } } } }
Please, find more details in the rule documentation.
Contributed by @Conaclos
-
Add [nursery/useNumberToFixedDigitsArgument](https://biomejs.dev/linter/rules/use-number-to-fixed-...
JavaScript APIs v0.6.0-nightly.af70ac2
Analyzer
Enhancements
CLI
New features
-
Add a new option
--rule
to the commandbiome lint
(#58).This new option allows you to execute a single rule or a rule group.
This option is convenient to test a rule or apply the code fixes of a single rule.For example, you can execute the
style/useNamingConvention
rule on the working directory:biome lint --rule=style/useNamingConvention ./
If the rule has a code action (autofix), you can use
--apply
to apply the fix:biome lint --rule=style/useNamingConvention --apply ./
The option takes the rule options in the Biome configuration file into account.
Only, the severity level of the rule is overridden by its default value,
i.e.error
for a recommended rule orwarn
otherwise.You can also run a group of rules:
biome lint --rule=suspicious src/main.js
In this case, the severity level of a rule is not overridden.
Thus, the disabled rules stay disabled.
To ensure that the group is run, therecommended
field of the group is turned on.
Thenursery
group cannot be passed because no rules are enabled in the nursery group by default.The option is compatible with other options such as
--apply
,--apply-unsafe
and--reporter
.Contributed by @Conaclos
-
Add new command
biome clean
. Use this command to purge all the logs emitted by the Biome daemon. This command is really useful, because the Biome daemon tends
log many files and contents during its lifecycle. This means that if your editor is open for hours (or even days), thebiome-logs
folder could become quite heavy. Contributed by @ematipico -
Add support for formatting and linting CSS files from the CLI. These operations are opt-in for the time being.
If you don't have a configuration file, you can enable these features with
--css-formatter-enabled
and--css-linter-enabled
:biome check --css-formatter-enabled=true --css-linter-enabled=true ./
Contributed by @ematipico
-
Add new CLI options to control the CSS formatting. Check the CLI reference page for more details. Contributed by @ematipico
-
Add new options
--write
,--fix
(alias of--write
) and--unsafe
to the commandbiome lint
andbiome check
.
Add a new option--fix
(alias of--write
) to the commandbiome format
andbiome migrate
.biome <lint|check> --<write|fix> [--unsafe] biome format --<write|fix> biome migrate --<write|fix>
The
biome <lint|check> --<write|fix>
has the same behavior asbiome <lint|check> --apply
.
Thebiome <lint|check> --<write|fix> --unsafe
has the same behavior asbiome <lint|check> --apply-unsafe
.
Thebiome format --fix
has the same behavior asbiome format --write
.
Thebiome migrate --fix
has the same behavior asbiome migrate --write
.This change allows these commands to write modifications in the same options.
With this change, the--apply
and--apply-unsafe
options are deprecated.Contributed by @unvalley
Enhancements
-
Biome now executes commands (lint, format, check and ci) on the working directory by default. #2266 Contributed by @unvalley
- biome check . + biome check # You can run the command without the path
-
biome migrate eslint
now tries to convert ESLint ignore patterns into Biome ignore patterns.ESLint uses gitignore patterns.
Biome now tries to convert these patterns into Biome ignore patterns.For example, the gitignore pattern
/src
is a relative path to the file in which it appears.
Biome now recognizes this and translates this pattern to./src
.Contributed by @Conaclos
-
biome migrate eslint
now supports theeslintIgnore
field inpackage.json
.ESLint allows the use of
package.json
as an ESLint configuration file.
ESLint supports two fields:eslintConfig
andeslintIgnore
.
Biome only supported the former. It now supports both.Contributed by @Conaclos
-
biome migrate eslint
now propagates NodeJS errors to the user.This will help users to identify why Biome is unable to load some ESLint configurations.
Contributed by @Conaclos
-
Add a new
--reporter
calledsummary
. This reporter will print diagnostics in a different way, based on the tools (formatter, linter, etc.) that are executed.
Import sorting and formatter shows the name of the files that require formatting. Instead, the linter will group the number of rules triggered and the number of errors/warnings:Formatter ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to be formatted: main.ts index.ts Organize Imports ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ The following files needs to have their imports sorted: main.ts index.ts Analyzer ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Some analyzer rules were triggered Rule Name Diagnostics lint/suspicious/noImplicitAnyLet 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDoubleEquals 8 (8 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noRedeclare 12 (12 error(s), 0 warning(s), 0 info(s)) lint/suspicious/noDebugger 20 (20 error(s), 0 warning(s), 0 info(s))
Contributed by @ematipico
-
biome ci
now enforces printing the output using colours. If you were previously using--colors=force
, you can remove it because it's automatically set. Contributed by @ematipico
Configuration
New features
-
Add an rule option
fix
to override the code fix kind of a rule (#2882).A rule can provide a safe or an unsafe code action.
You can now tune the kind of code actions thanks to thefix
option.
This rule option takes a value among:none
: the rule no longer emits code actions.safe
: the rule emits safe code action.unsafe
: the rule emits unsafe code action.
The following configuration disables the code actions of
noUnusedVariables
, makes the emitted code actions ofstyle/useConst
andstyle/useTemplate
unsafe and safe respectively.{ "linter": { "rules": { "correctness": { "noUnusedVariables": { "level": "error", "fix": "none" }, "style": { "useConst": { "level": "warn", "fix": "unsafe" }, "useTemplate": { "level": "warn", "fix": "safe" } } } } } }
Contributed by @Conaclos
-
Add option
javascript.linter.enabled
to control the linter for JavaScript (and its super languages) files. Contributed by @ematipico -
Add option
json.linter.enabled
to control the linter for JSON (and its super languages) files. Contributed by @ematipico -
Add option
css.linter.enabled
to control the linter for CSS (and its super languages) files. Contributed by @ematipico -
Add option
css.formatter
, to control the formatter options for CSS (and its super languages) files. Contributed by @ematipico
Enhancements
- The
javascript.formatter.trailingComma
option is deprecated and renamed tojavascript.formatter.trailingCommas
. The corresponding CLI option--trailing-comma
is also deprecated and renamed to--trailing-commas
. Details can be checked in #2492. Contributed by @Sec-ant
Editors
New features
- Add support for LSP Workspaces
Bug fixes
- Fixes #2781, by correctly computing the configuration to apply to a specific file. Contributed by @ematipico
Formatter
Bug fixes
- Fix #2470 by avoid introducing linebreaks in single line string interpolations. Contributed by @ah-yu
- Resolve deadlocks by narrowing the scope of locks. Contributed by @mechairoi
- Fix #2782 by computing the enabled rules by taking the override settings into consideration. Contributed by @ematipico
JavaScript APIs
Linter
New features
-
Add nursery/useThrowOnlyError. Contributed by @minht11
-
Add nursery/useImportExtensions. Contributed by @minht11
-
useNamingConvention now supports an option to enforce custom conventions (#1900).
For example, you can enforce the use of a prefix for private class members:
{ "linter": { "rules": { "style": { "useNamingConvention": { "level": "error", "options": { "conventions": [ { "selector": { "kind": "classMember", "modifiers": ["private"] }, "match": "_(.*)", "formats": ["camelCase"] } ] } } } } } }
Please, find more details in the rule documentation.
Contributed by @Conaclos
-
Add [nursery/useNumberToFixedDigitsArgument](https://biomejs.dev/linter/rules/use-number-to-fixed-...