Analyzer
Bug fixes
-
Improved the message for unused suppression comments. Contributed by @dyc3
-
Fix #4228, where the rule
a11y/noInteractiveElementToNoninteractiveRole
incorrectly reports arole
for non-interactive elements. Contributed by @eryue0220 -
noSuspiciousSemicolonInJsx
now catches suspicious semicolons in React fragments. Contributed by @vasucp1207
CLI
Enhancements
-
The
--summary
reporter now reports parsing diagnostics too. Contributed by @ematipico -
Improved performance of GritQL queries by roughly 25-30%. Contributed by @arendjr
Configuration
Bug fixes
- Fix an issue where the JSON schema marked lint rules options as mandatory. Contributed by @ematipico
Formatter
Bug fixes
Linter
New features
- Add useGuardForIn. Contributed by @fireairforce
- Add noDocumentCookie. Contributed by @tunamaguro
- Add noDocumentImportInPage. Contributed by @kaioduarte
- Add noDuplicateProperties. Contributed by @togami2864
- Add noHeadElement. Contributed by @kaioduarte
- Add noHeadImportInDocument. Contributed by @kaioduarte
- Add noImgElement. Contributed by @kaioduarte
- Add noUnknownTypeSelector. Contributed by @Kazuhiro-Mimaki
- Add useAtIndex. Contributed by @GunseiKPaseri
- Add noUselessStringRaw. Contributed by @fireairforce
- Add nursery/useCollapsedIf. Contributed by @siketyan
- Add useGoogleFontDisplay. Contributed by @kaioduarte
Bug Fixes
-
Biome no longer crashes when it encounters a string that contains a multibyte character (#4181).
This fixes a regression introduced in Biome 1.9.3
The regression affected the following linter rules:nursery/useSortedClasses
nursery/useTrimStartEnd
style/useTemplate
suspicious/noMisleadingCharacterClass
Contributed by @Conaclos
-
Fix #4190, where the rule
noMissingVarFunction
wrongly reported a variable as missing when used inside avar()
function that was a newline. Contributed by @ematipico -
Fix #4041. Now the rule
useSortedClasses
won't be triggered ifclassName
is composed only by inlined variables. Contributed by @ematipico -
useImportType and useExportType now report useless inline type qualifiers (#4178).
The following fix is now proposed:
- import type { type A, B } from ""; + import type { A, B } from ""; - export type { type C, D }; + export type { C, D };
Contributed by @Conaclos
-
useExportType now reports ungrouped
export from
.The following fix is now proposed:
- export { type A, type B } from ""; + export type { A, B } from "";
Contributed by @Conaclos
-
noVoidTypeReturn now accepts
void
expressions in return position (#4173).The following code is now accepted:
function f(): void { return void 0; }
Contributed by @Conaclos
-
noUselessFragments now correctly handles fragments containing HTML escapes (e.g.
) inside expression escapes{ ... }
(#4059).The following code is no longer reported:
function Component() { return ( <div key={index}>{line || <> </>}</div> ) }
Contributed by @fireairforce
-
noUnusedFunctionParameters and noUnusedVariables no longer reports a parameter as unused when another parameter has a constructor type with the same parameter name (#4227).
In the following code, the
name
parameter is no longer reported as unused.export class Foo { bar(name: string, _class: new (name: string) => any) { return name } }
Contributed by @Conaclos
-
noUndeclaredDependencies now accepts dependency names with dots. Contributed by @Conaclos
-
useFilenamingConvention now correctly handles renamed exports (#4254).
The rule allows the filename to be named as one of the exports of the module.
For instance, the file containing the following export can be namedButton
.class Button {} export { Button }
The rule now correctly handles the renaming of an export.
For example, the file containing the following export can only be namedButton
.
Previously the rule expected the file to be namedA
.class A {} export { A as Button }
Contributed by @Conaclos
-
useConsistentMemberAccessibility now ignores private class members such as
#property
(#4276). Contributed by @Conaclos -
noUnknownFunction correctly handles
calc-size
function (#4212).The following code
calc-size
is no longer reported as unknown:.a { height: calc-size(0px); }
Contributed by @fireairforce
-
useNamingConvention now allows configuring conventions for readonly index signatures. Contributed by @sepruko
-
noDuplicateCustomProperties now correctly handles custom properties and ignores non-custom properties.
Previously, the rule incorrectly reported duplicates for all properties, including non-custom ones. Contributed by @togami2864
Parser
Bug Fixes
-
The CSS parser now accepts more emoji in identifiers (#3627).
Browsers accept more emoji than the standard allows.
Biome now accepts these additional emojis.The following code is now correctly parsed:
p { --✨-color: red; color: var(--✨-color); }
Contributed by @Conaclos
-
Add support for parsing typescript's
resolution-mode
in Import Types(#2115)export type Fs = typeof import('fs', { with: { 'resolution-mode': 'import' } }); export type TypeFromRequire = import("pkg", { with: { "resolution-mode": "require" } }).TypeFromRequire; export type TypeFromImport = import("pkg", { with: { "resolution-mode": "import" } }).TypeFromImport;
Contributed by @fireairforce
What's Changed
Other changes
- chore: correct options name (ignoreNonDom) in the examples by @dwaneivan in #4157
- test: update workspace test by @ematipico in #4158
- test: update snapshots for js-api by @ematipico in #4162
- docs: use code blocks to avoid rendering issue on the website by @ematipico in #4167
- chore: change noBarrelFile language to js from ts by @dwaneivan in #4169
- docs: use the new
/chat
link by @ematipico in #4171 - feat(lint): add
no-head-element
fromeslint-plugin-next
by @kaioduarte in #4136 - feat(lint): add
noImgElement
rule by @kaioduarte in #4155 - refactor(cli): use command runner to run predictable logic by @ematipico in #4176
- refactor(cli): command runner by @ematipico in #4198
- feat(noSecrets): refine the entropy computation to avoid some false positives by @SaadBazaz in #4118
- feat(useExplicitFunctionReturnType): support typed function expressions by @kaykdm in #4174
- chore: deduplicate GritQL snippets by @arendjr in #4153
- chore(grit): don't use
im::Vector
where we don't have to by @arendjr in #4203 - feat(format/grit): add basic formatting for where pattern by @branberry in #4095
- perf(js_analyze): use Box/Box<[_]> to reduce memory usage by @Conaclos in #4211
- ci: automatic issue closer by @ematipico in #4213
- feat(lint): add
noHeadImportInDocument
rule by @kaioduarte in #4184 - docs(useNamingConvention): fix typo cas eof -> case of by @sepruko in #4222
- refactor(aria): don't use macros by @ematipico in #4235
- feat(format/grit): add formatting for predicate assignment and predicate and by @branberry in #4238
- chore: run CI workflows on and against
next
branch by @arendjr in #4250 - feat(lint): add variable assignment tracking to
noDocumentCookie
rule by @tunamaguro in #4255 - chore(linter): rename
useExplicitFunctionReturnType
to `useExplicit… by @kaykdm in #4261 - refactor(useFilenamingConvention): use the Cases bit flags for filename cases by @Conaclos in #4316
- fix(useCollapsedIf): ignore if with else clause by @Conaclos in #4322
New Contributors
- @kaioduarte made their first contribution in #4136
- @sepruko made their first contribution in #4222
- @siketyan made their first contribution in #4179
- @vitallium made their first contribution in #4122
Full Changelog: js-api/v0.7.1...cli/v1.9.4