From 894c3c57303451e3b6d70fa7b225b9ef884a75a7 Mon Sep 17 00:00:00 2001 From: Victorien Elvinger Date: Thu, 12 Sep 2024 14:38:18 +0200 Subject: [PATCH] release: v1.9.0 (#3794) --- CHANGELOG.md | 58 +- crates/biome_cli/src/commands/mod.rs | 2 +- .../migrate/eslint_any_rule_to_biome.rs | 113 +- .../src/execute/migrate/eslint_eslint.rs | 4 +- .../src/execute/migrate/eslint_to_biome.rs | 2 +- .../should_lint_files_by_when_enabled.snap | 2 +- .../should_not_lint_files_by_default.snap | 2 +- .../config_recommended_group.snap | 8 +- .../config_recommended_group.snap | 8 +- .../no_unused_dependencies.snap | 55 +- .../incorrect_rule_name.snap | 19 + .../src/analyzer/linter/rules.rs | 2420 +++++++++-------- crates/biome_css_analyze/src/lint.rs | 5 +- crates/biome_css_analyze/src/lint/a11y.rs | 14 + .../use_generic_font_names.rs | 0 .../biome_css_analyze/src/lint/correctness.rs | 28 + ...no_invalid_direction_in_linear_gradient.rs | 2 +- .../no_invalid_grid_areas.rs | 4 +- .../no_invalid_position_at_import_rule.rs | 0 .../no_unknown_function.rs | 0 .../no_unknown_media_feature_name.rs | 2 +- .../no_unknown_property.rs | 0 .../no_unknown_unit.rs | 0 .../no_unmatchable_anb_selector.rs | 0 crates/biome_css_analyze/src/lint/nursery.rs | 30 - .../nursery/no_duplicate_custom_properties.rs | 2 +- .../lint/nursery/no_irregular_whitespace.rs | 2 +- .../biome_css_analyze/src/lint/suspicious.rs | 24 + .../no_duplicate_at_import_rules.rs | 0 .../no_duplicate_font_names.rs | 0 .../no_duplicate_selectors_keyframe_block.rs | 0 .../{nursery => suspicious}/no_empty_block.rs | 0 .../no_important_in_keyframe.rs | 0 .../no_shorthand_property_overrides.rs | 2 +- crates/biome_css_analyze/src/options.rs | 31 +- .../useGenericFontNames/invalid.css | 0 .../useGenericFontNames/invalid.css.snap | 14 +- .../useGenericFontNames/valid.css | 0 .../useGenericFontNames/valid.css.snap | 0 .../invalid.css | 0 .../invalid.css.snap | 52 +- .../valid.css | 0 .../valid.css.snap | 0 .../noInvalidGridAreas/invalid.css | 0 .../noInvalidGridAreas/invalid.css.snap | 20 +- .../noInvalidGridAreas/valid.css | 0 .../noInvalidGridAreas/valid.css.snap | 0 .../noInvalidPositionAtImportRule/invalid.css | 0 .../invalid.css.snap | 4 +- .../invalidBetweenImport.css | 0 .../invalidBetweenImport.css.snap | 8 +- .../invalidMediaImport.css | 0 .../invalidMediaImport.css.snap | 2 +- .../invalidMediaImportUpperCase.css | 0 .../invalidMediaImportUpperCase.css.snap | 2 +- .../noInvalidPositionAtImportRule/valid.css | 0 .../valid.css.snap | 0 .../validCharset.css | 0 .../validCharset.css.snap | 0 .../validCharsetComment.css | 0 .../validCharsetComment.css.snap | 0 .../validCharsetMultipleImport.css | 0 .../validCharsetMultipleImport.css.snap | 0 .../validComment.css | 0 .../validComment.css.snap | 0 .../validLayerImport.css | 0 .../validLayerImport.css.snap | 0 .../validMultipleImport.css | 0 .../validMultipleImport.css.snap | 0 .../validNoImportant.css | 0 .../validNoImportant.css.snap | 0 .../noUnknownFunction/invalid.css | 0 .../noUnknownFunction/invalid.css.snap | 6 +- .../noUnknownFunction/valid.css | 0 .../noUnknownFunction/valid.css.snap | 0 .../noUnknownMediaFeatureName/invalid.css | 0 .../invalid.css.snap | 12 +- .../noUnknownMediaFeatureName/valid.css | 0 .../noUnknownMediaFeatureName/valid.css.snap | 0 .../noUnknownProperty/invalid.css | 0 .../noUnknownProperty/invalid.css.snap | 4 +- .../noUnknownProperty/valid.css | 0 .../noUnknownProperty/valid.css.snap | 0 .../noUnknownUnit/invalid.css | 0 .../noUnknownUnit/invalid.css.snap | 52 +- .../noUnknownUnit/valid.css | 0 .../noUnknownUnit/valid.css.snap | 0 .../noUnmatchableAnbSelector/invalid.css | 0 .../noUnmatchableAnbSelector/invalid.css.snap | 28 +- .../noUnmatchableAnbSelector/valid.css | 0 .../noUnmatchableAnbSelector/valid.css.snap | 0 .../noDuplicateAtImportRules/invalid.css | 0 .../noDuplicateAtImportRules/invalid.css.snap | 2 +- .../noDuplicateAtImportRules/invalidMedia.css | 0 .../invalidMedia.css.snap | 2 +- .../invalidMultipleMedia.css | 0 .../invalidMultipleMedia.css.snap | 2 +- .../invalidQuotes.css | 0 .../invalidQuotes.css.snap | 2 +- .../noDuplicateAtImportRules/invalidUrls.css | 0 .../invalidUrls.css.snap | 2 +- .../noDuplicateAtImportRules/valid.css | 0 .../noDuplicateAtImportRules/valid.css.snap | 0 .../noDuplicateFontNames/invalid.css | 0 .../noDuplicateFontNames/invalid.css.snap | 12 +- .../noDuplicateFontNames/valid.css | 0 .../noDuplicateFontNames/valid.css.snap | 0 .../invalid.css | 0 .../invalid.css.snap | 14 +- .../valid.css | 0 .../valid.css.snap | 0 .../noEmptyBlock/invalid.css | 0 .../noEmptyBlock/invalid.css.snap | 36 +- .../noEmptyBlock/valid.css | 0 .../noEmptyBlock/valid.css.snap | 0 .../noImportantInKeyframe/invalid.css | 0 .../noImportantInKeyframe/invalid.css.snap | 2 +- .../noImportantInKeyframe/valid.css | 0 .../noImportantInKeyframe/valid.css.snap | 0 .../noShorthandPropertyOverrides/invalid.css | 0 .../invalid.css.snap | 42 +- .../noShorthandPropertyOverrides/valid.css | 0 .../valid.css.snap | 0 .../noDuplicateFontNames.css.snap | 151 - .../noEmptyBlock/noEmptyBlock.css.snap | 471 ---- .../src/categories.rs | 70 +- .../src/lint/nursery/no_duplicated_fields.rs | 2 +- .../src/lint/nursery/use_deprecated_reason.rs | 2 +- .../src/assists/source/sort_jsx_props.rs | 2 +- crates/biome_js_analyze/src/lint/a11y.rs | 6 + .../no_label_without_control.rs | 0 .../use_focusable_interactive.rs | 0 .../use_semantic_elements.rs | 8 +- .../biome_js_analyze/src/lint/complexity.rs | 6 + .../no_useless_string_concat.rs | 0 .../no_useless_undefined_initialization.rs | 4 +- .../{nursery => complexity}/use_date_now.rs | 2 +- .../biome_js_analyze/src/lint/correctness.rs | 8 + .../no_invalid_builtin_instantiation.rs} | 101 +- .../correctness/no_invalid_new_builtin.rs | 8 +- .../no_undeclared_dependencies.rs | 0 .../no_unused_function_parameters.rs | 0 .../use_import_extensions.rs | 0 crates/biome_js_analyze/src/lint/nursery.rs | 46 - .../no_dynamic_namespace_import_access.rs | 2 +- .../src/lint/nursery/no_enum.rs | 2 +- .../src/lint/nursery/no_exported_imports.rs | 2 +- .../lint/nursery/no_irregular_whitespace.rs | 2 +- .../src/lint/nursery/no_restricted_types.rs | 2 +- .../src/lint/nursery/no_secrets.rs | 2 +- .../nursery/no_static_element_interactions.rs | 2 +- .../nursery/no_useless_escape_in_regex.rs | 2 +- .../use_adjacent_overload_signatures.rs | 2 +- .../use_aria_props_supported_by_role.rs | 2 +- .../use_consistent_member_accessibility.rs | 2 +- .../src/lint/nursery/use_trim_start_end.rs | 2 +- .../lint/nursery/use_valid_autocomplete.rs | 2 +- .../biome_js_analyze/src/lint/performance.rs | 2 + .../use_top_level_regex.rs | 0 crates/biome_js_analyze/src/lint/style.rs | 14 + .../{nursery => style}/no_done_callback.rs | 13 +- .../{nursery => style}/no_yoda_expression.rs | 0 .../use_consistent_builtin_instantiation.rs | 221 ++ .../use_default_switch_clause.rs | 4 - .../use_explicit_length_check.rs | 13 +- .../lint/style/use_single_case_statement.rs | 1 + .../{nursery => style}/use_throw_new_error.rs | 0 .../use_throw_only_error.rs | 0 .../biome_js_analyze/src/lint/suspicious.rs | 12 + .../{nursery => suspicious}/no_console.rs | 0 .../src/lint/suspicious/no_console_log.rs | 4 +- .../no_evolving_types.rs | 0 .../no_misplaced_assertion.rs | 6 +- .../no_react_specific_props.rs | 0 .../use_error_message.rs | 0 .../use_number_to_fixed_digits_argument.rs | 0 crates/biome_js_analyze/src/options.rs | 50 +- crates/biome_js_analyze/src/syntax.rs | 3 +- .../src/syntax/correctness.rs | 2 + .../no_initializer_with_definite.rs | 4 +- .../correctness/no_super_without_extends.rs | 4 +- .../no_type_only_import_attributes.rs | 0 crates/biome_js_analyze/src/syntax/nursery.rs | 14 - .../noLabelWithoutControl/invalid.jsx | 0 .../noLabelWithoutControl/invalid.jsx.snap | 20 +- .../invalidCustomInputComponents.jsx | 0 .../invalidCustomInputComponents.jsx.snap | 73 + .../invalidCustomInputComponents.options.json | 0 .../invalidCustomLabelAttributes.jsx | 0 .../invalidCustomLabelAttributes.jsx.snap | 73 + .../invalidCustomLabelAttributes.options.json | 0 .../invalidCustomLabelComponents.jsx | 0 .../invalidCustomLabelComponents.jsx.snap | 57 + .../invalidCustomLabelComponents.options.json | 0 .../invalidCustomOptions.jsx | 0 .../invalidCustomOptions.jsx.snap | 58 + .../invalidCustomOptions.options.json | 0 .../noLabelWithoutControl/valid.jsx | 0 .../noLabelWithoutControl/valid.jsx.snap | 0 .../validCustomControlComponents.jsx | 0 .../validCustomControlComponents.jsx.snap | 71 + .../validCustomControlComponents.options.json | 0 .../validCustomLabelAttributes.jsx | 0 .../validCustomLabelAttributes.jsx.snap | 71 + .../validCustomLabelAttributes.options.json | 0 .../validCustomLabelComponents.jsx | 0 .../validCustomLabelComponents.jsx.snap | 58 + .../validCustomLabelComponents.options.json | 0 .../validCustomOptions.jsx | 0 .../validCustomOptions.jsx.snap | 60 + .../validCustomOptions.options.json | 0 .../useFocusableInteractive/invalid.js | 0 .../useFocusableInteractive/invalid.js.snap | 4 +- .../useFocusableInteractive/valid.js | 0 .../useFocusableInteractive/valid.js.snap | 0 .../useSemanticElements/invalid.jsx | 0 .../useSemanticElements/invalid.jsx.snap | 92 +- .../useSemanticElements/valid.jsx | 0 .../useSemanticElements/valid.jsx.snap | 0 .../noUselessStringConcat/invalid.js | 0 .../noUselessStringConcat/invalid.js.snap | 30 +- .../noUselessStringConcat/valid.js | 0 .../noUselessStringConcat/valid.js.snap | 0 .../invalid.js | 0 .../invalid.js.snap | 18 +- .../noUselessUndefinedInitialization/valid.js | 0 .../valid.js.snap | 0 .../useDateNow/invalid.js | 0 .../useDateNow/invalid.js.snap | 54 +- .../useDateNow/valid.js | 0 .../useDateNow/valid.js.snap | 0 .../noInvalidBuiltinInstantiation/invalid.js | 34 + .../invalid.js.snap | 588 ++++ .../noInvalidBuiltinInstantiation/valid.js | 59 + .../valid.js.snap | 66 + .../noTypeOnlyImportAttributes/invalid.ts | 0 .../invalid.ts.snap | 16 +- .../noTypeOnlyImportAttributes/valid.js | 0 .../noTypeOnlyImportAttributes/valid.js.snap | 0 .../noTypeOnlyImportAttributes/valid.ts | 0 .../noTypeOnlyImportAttributes/valid.ts.snap | 0 .../noUndeclaredDependencies/invalid.js | 0 .../noUndeclaredDependencies/invalid.js.snap | 8 +- .../invalid.package.json | 0 .../noUndeclaredDependencies/valid.d.ts | 0 .../noUndeclaredDependencies/valid.d.ts.snap | 0 .../noUndeclaredDependencies/valid.js | 0 .../noUndeclaredDependencies/valid.js.snap | 0 .../valid.package.json | 0 .../noUnusedFunctionParameters/invalid.js | 0 .../invalid.js.snap | 18 +- .../noUnusedFunctionParameters/invalid.ts | 0 .../invalid.ts.snap | 2 +- .../noUnusedFunctionParameters/valid.js | 0 .../noUnusedFunctionParameters/valid.js.snap | 0 .../noUnusedFunctionParameters/valid.ts | 0 .../noUnusedFunctionParameters/valid.ts.snap | 0 .../useImportExtensions/invalid.js | 0 .../useImportExtensions/invalid.js.snap | 50 +- .../invalidWithImportMappings.options.json | 0 .../invalidWithImportMappings.ts | 0 .../invalidWithImportMappings.ts.snap | 97 + .../useImportExtensions/valid.js | 0 .../useImportExtensions/valid.js.snap | 0 .../specs/nursery/noConsole/allowlist.js.snap | 58 - .../invalidCustomInputComponents.jsx.snap | 24 - .../invalidCustomLabelAttributes.jsx.snap | 24 - .../invalidCustomLabelComponents.jsx.snap | 24 - .../invalidCustomOptions.jsx.snap | 41 - .../validCustomControlComponents.jsx.snap | 9 - .../validCustomLabelAttributes.jsx.snap | 9 - .../validCustomLabelComponents.jsx.snap | 10 - .../validCustomOptions.jsx.snap | 12 - .../invalid.js.snap | 788 ------ .../invalidWithImportMappings.ts.snap | 50 - .../useTopLevelRegex/invalid.js | 0 .../useTopLevelRegex/invalid.js.snap | 20 +- .../useTopLevelRegex/valid.js | 0 .../useTopLevelRegex/valid.js.snap | 0 .../noDoneCallback/invalid.js | 0 .../noDoneCallback/invalid.js.snap | 52 +- .../noDoneCallback/valid.js | 0 .../noDoneCallback/valid.js.snap | 0 .../noYodaExpression/invalid.js | 0 .../noYodaExpression/invalid.js.snap | 62 +- .../noYodaExpression/invalidRange.js | 0 .../noYodaExpression/invalidRange.js.snap | 20 +- .../noYodaExpression/valid.js | 0 .../noYodaExpression/valid.js.snap | 0 .../noYodaExpression/validRange.js | 0 .../noYodaExpression/validRange.js.snap | 0 .../invalid.js | 23 - .../invalid.js.snap | 309 +++ .../valid.js | 0 .../valid.js.snap | 0 .../useDefaultSwitchClause/invalid.js | 0 .../useDefaultSwitchClause/invalid.js.snap | 4 +- .../useDefaultSwitchClause/valid.js | 0 .../useDefaultSwitchClause/valid.js.snap | 0 .../useExplicitLengthCheck/invalid.js | 0 .../useExplicitLengthCheck/invalid.js.snap | 82 +- .../useExplicitLengthCheck/valid.js | 0 .../useExplicitLengthCheck/valid.js.snap | 0 .../useThrowNewError/invalid.js | 0 .../useThrowNewError/invalid.js.snap | 48 +- .../useThrowNewError/valid.js | 0 .../useThrowNewError/valid.js.snap | 0 .../useThrowOnlyError/invalid.js | 0 .../useThrowOnlyError/invalid.js.snap | 40 +- .../useThrowOnlyError/valid.js | 0 .../useThrowOnlyError/valid.js.snap | 0 .../noConsole/allowlist.js | 0 .../suspicious/noConsole/allowlist.js.snap | 203 ++ .../noConsole/allowlist.options.json | 0 .../noConsole/invalid.js | 0 .../noConsole/invalid.js.snap | 16 +- .../noConsole/valid.js | 0 .../noConsole/valid.js.snap | 0 .../noEvolvingTypes/invalid.ts | 0 .../noEvolvingTypes/invalid.ts.snap | 18 +- .../noEvolvingTypes/valid.ts | 0 .../noEvolvingTypes/valid.ts.snap | 0 .../noMisplacedAssertion/invalid.js | 0 .../noMisplacedAssertion/invalid.js.snap | 6 +- .../invalidImportedBun.js | 0 .../invalidImportedBun.js.snap | 2 +- .../invalidImportedChai.js | 0 .../invalidImportedChai.js.snap | 2 +- .../invalidImportedDeno.js | 0 .../invalidImportedDeno.js.snap | 2 +- .../invalidImportedNode.js | 0 .../invalidImportedNode.js.snap | 2 +- .../noMisplacedAssertion/valid.js | 0 .../noMisplacedAssertion/valid.js.snap | 0 .../noMisplacedAssertion/validBun.js | 0 .../noMisplacedAssertion/validBun.js.snap | 0 .../noMisplacedAssertion/validDeno.js | 0 .../noMisplacedAssertion/validDeno.js.snap | 0 .../noMisplacedAssertion/validMethodCalls.js | 0 .../validMethodCalls.js.snap | 0 .../noReactSpecificProps/invalid.jsx | 0 .../noReactSpecificProps/invalid.jsx.snap | 6 +- .../noReactSpecificProps/valid.jsx | 0 .../noReactSpecificProps/valid.jsx.snap | 0 .../useErrorMessage/invalid.js | 0 .../useErrorMessage/invalid.js.snap | 56 +- .../useErrorMessage/valid.js | 0 .../useErrorMessage/valid.js.snap | 0 .../useNumberToFixedDigitsArgument/invalid.js | 0 .../invalid.js.snap | 8 +- .../useNumberToFixedDigitsArgument/valid.js | 0 .../valid.js.snap | 0 .../src/binary_like_expression.rs | 2 +- .../src/assists/source/use_sorted_keys.rs | 2 +- crates/biome_lsp/tests/server.rs | 4 +- .../src/analyzers/nursery_rules.rs | 117 +- .../migrations/nurseryRules/complexCase.json | 15 + .../nurseryRules/complexCase.json.snap | 130 + .../nurseryRules/renamedRule.json.snap | 28 - .../nurseryRules/renamedRuleAndNewRule.json | 2 +- .../renamedRuleAndNewRule.json.snap | 20 +- crates/biome_service/src/file_handlers/mod.rs | 19 +- .../@biomejs/backend-jsonrpc/src/workspace.ts | 492 ++-- .../@biomejs/biome/configuration_schema.json | 669 ++--- packages/@biomejs/biome/package.json | 2 +- xtask/codegen/src/promote_rule.rs | 47 +- 366 files changed, 5150 insertions(+), 4545 deletions(-) create mode 100644 crates/biome_css_analyze/src/lint/a11y.rs rename crates/biome_css_analyze/src/lint/{nursery => a11y}/use_generic_font_names.rs (100%) create mode 100644 crates/biome_css_analyze/src/lint/correctness.rs rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_invalid_direction_in_linear_gradient.rs (99%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_invalid_grid_areas.rs (99%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_invalid_position_at_import_rule.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_unknown_function.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_unknown_media_feature_name.rs (99%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_unknown_property.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_unknown_unit.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => correctness}/no_unmatchable_anb_selector.rs (100%) create mode 100644 crates/biome_css_analyze/src/lint/suspicious.rs rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_duplicate_at_import_rules.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_duplicate_font_names.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_duplicate_selectors_keyframe_block.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_empty_block.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_important_in_keyframe.rs (100%) rename crates/biome_css_analyze/src/lint/{nursery => suspicious}/no_shorthand_property_overrides.rs (99%) rename crates/biome_css_analyze/tests/specs/{nursery => a11y}/useGenericFontNames/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => a11y}/useGenericFontNames/invalid.css.snap (89%) rename crates/biome_css_analyze/tests/specs/{nursery => a11y}/useGenericFontNames/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => a11y}/useGenericFontNames/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidDirectionInLinearGradient/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidDirectionInLinearGradient/invalid.css.snap (71%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidDirectionInLinearGradient/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidDirectionInLinearGradient/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidGridAreas/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidGridAreas/invalid.css.snap (85%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidGridAreas/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidGridAreas/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalid.css.snap (71%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidBetweenImport.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidBetweenImport.css.snap (74%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidMediaImport.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidMediaImport.css.snap (77%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/invalidMediaImportUpperCase.css.snap (79%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharset.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharset.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharsetComment.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharsetComment.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharsetMultipleImport.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validCharsetMultipleImport.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validComment.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validComment.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validLayerImport.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validLayerImport.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validMultipleImport.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validMultipleImport.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validNoImportant.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noInvalidPositionAtImportRule/validNoImportant.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownFunction/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownFunction/invalid.css.snap (75%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownFunction/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownFunction/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownMediaFeatureName/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownMediaFeatureName/invalid.css.snap (73%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownMediaFeatureName/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownMediaFeatureName/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownProperty/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownProperty/invalid.css.snap (75%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownProperty/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownProperty/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownUnit/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownUnit/invalid.css.snap (82%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownUnit/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnknownUnit/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnmatchableAnbSelector/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnmatchableAnbSelector/invalid.css.snap (72%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnmatchableAnbSelector/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => correctness}/noUnmatchableAnbSelector/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalid.css.snap (79%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidMedia.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidMedia.css.snap (82%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidMultipleMedia.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidMultipleMedia.css.snap (76%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidQuotes.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidQuotes.css.snap (79%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidUrls.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/invalidUrls.css.snap (79%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateAtImportRules/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateFontNames/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateFontNames/invalid.css.snap (90%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateFontNames/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateFontNames/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateSelectorsKeyframeBlock/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateSelectorsKeyframeBlock/invalid.css.snap (70%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateSelectorsKeyframeBlock/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noDuplicateSelectorsKeyframeBlock/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noEmptyBlock/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noEmptyBlock/invalid.css.snap (83%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noEmptyBlock/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noEmptyBlock/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noImportantInKeyframe/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noImportantInKeyframe/invalid.css.snap (80%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noImportantInKeyframe/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noImportantInKeyframe/valid.css.snap (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noShorthandPropertyOverrides/invalid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noShorthandPropertyOverrides/invalid.css.snap (80%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noShorthandPropertyOverrides/valid.css (100%) rename crates/biome_css_analyze/tests/specs/{nursery => suspicious}/noShorthandPropertyOverrides/valid.css.snap (100%) rename crates/biome_js_analyze/src/lint/{nursery => a11y}/no_label_without_control.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => a11y}/use_focusable_interactive.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => a11y}/use_semantic_elements.rs (85%) rename crates/biome_js_analyze/src/lint/{nursery => complexity}/no_useless_string_concat.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => complexity}/no_useless_undefined_initialization.rs (98%) rename crates/biome_js_analyze/src/lint/{nursery => complexity}/use_date_now.rs (99%) rename crates/biome_js_analyze/src/lint/{nursery/use_consistent_builtin_instantiation.rs => correctness/no_invalid_builtin_instantiation.rs} (69%) rename crates/biome_js_analyze/src/lint/{nursery => correctness}/no_undeclared_dependencies.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => correctness}/no_unused_function_parameters.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => correctness}/use_import_extensions.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => performance}/use_top_level_regex.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => style}/no_done_callback.rs (92%) rename crates/biome_js_analyze/src/lint/{nursery => style}/no_yoda_expression.rs (100%) create mode 100644 crates/biome_js_analyze/src/lint/style/use_consistent_builtin_instantiation.rs rename crates/biome_js_analyze/src/lint/{nursery => style}/use_default_switch_clause.rs (99%) rename crates/biome_js_analyze/src/lint/{nursery => style}/use_explicit_length_check.rs (98%) rename crates/biome_js_analyze/src/lint/{nursery => style}/use_throw_new_error.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => style}/use_throw_only_error.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/no_console.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/no_evolving_types.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/no_misplaced_assertion.rs (98%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/no_react_specific_props.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/use_error_message.rs (100%) rename crates/biome_js_analyze/src/lint/{nursery => suspicious}/use_number_to_fixed_digits_argument.rs (100%) rename crates/biome_js_analyze/src/syntax/{nursery => correctness}/no_type_only_import_attributes.rs (100%) delete mode 100644 crates/biome_js_analyze/src/syntax/nursery.rs rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalid.jsx.snap (88%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomInputComponents.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/invalidCustomInputComponents.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomInputComponents.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomLabelAttributes.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/invalidCustomLabelAttributes.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomLabelAttributes.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomLabelComponents.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/invalidCustomLabelComponents.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomLabelComponents.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomOptions.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/invalidCustomOptions.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/invalidCustomOptions.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/valid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/valid.jsx.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomControlComponents.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/validCustomControlComponents.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomControlComponents.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomLabelAttributes.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/validCustomLabelAttributes.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomLabelAttributes.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomLabelComponents.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/validCustomLabelComponents.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomLabelComponents.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomOptions.jsx (100%) create mode 100644 crates/biome_js_analyze/tests/specs/a11y/noLabelWithoutControl/validCustomOptions.jsx.snap rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/noLabelWithoutControl/validCustomOptions.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useFocusableInteractive/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useFocusableInteractive/invalid.js.snap (89%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useFocusableInteractive/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useFocusableInteractive/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useSemanticElements/invalid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useSemanticElements/invalid.jsx.snap (88%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useSemanticElements/valid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => a11y}/useSemanticElements/valid.jsx.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessStringConcat/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessStringConcat/invalid.js.snap (83%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessStringConcat/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessStringConcat/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessUndefinedInitialization/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessUndefinedInitialization/invalid.js.snap (78%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessUndefinedInitialization/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/noUselessUndefinedInitialization/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/useDateNow/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/useDateNow/invalid.js.snap (92%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/useDateNow/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => complexity}/useDateNow/valid.js.snap (100%) create mode 100644 crates/biome_js_analyze/tests/specs/correctness/noInvalidBuiltinInstantiation/invalid.js create mode 100644 crates/biome_js_analyze/tests/specs/correctness/noInvalidBuiltinInstantiation/invalid.js.snap create mode 100644 crates/biome_js_analyze/tests/specs/correctness/noInvalidBuiltinInstantiation/valid.js create mode 100644 crates/biome_js_analyze/tests/specs/correctness/noInvalidBuiltinInstantiation/valid.js.snap rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/invalid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/invalid.ts.snap (79%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/valid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noTypeOnlyImportAttributes/valid.ts.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/invalid.js.snap (65%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/invalid.package.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/valid.d.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/valid.d.ts.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUndeclaredDependencies/valid.package.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/invalid.js.snap (78%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/invalid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/invalid.ts.snap (78%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/valid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/noUnusedFunctionParameters/valid.ts.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/invalid.js.snap (82%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/invalidWithImportMappings.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/invalidWithImportMappings.ts (100%) create mode 100644 crates/biome_js_analyze/tests/specs/correctness/useImportExtensions/invalidWithImportMappings.ts.snap rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => correctness}/useImportExtensions/valid.js.snap (100%) delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noConsole/allowlist.js.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/invalidCustomInputComponents.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/invalidCustomLabelAttributes.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/invalidCustomLabelComponents.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/invalidCustomOptions.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/validCustomControlComponents.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/validCustomLabelAttributes.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/validCustomLabelComponents.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/noLabelWithoutControl/validCustomOptions.jsx.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/useConsistentBuiltinInstantiation/invalid.js.snap delete mode 100644 crates/biome_js_analyze/tests/specs/nursery/useImportExtensions/invalidWithImportMappings.ts.snap rename crates/biome_js_analyze/tests/specs/{nursery => performance}/useTopLevelRegex/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => performance}/useTopLevelRegex/invalid.js.snap (82%) rename crates/biome_js_analyze/tests/specs/{nursery => performance}/useTopLevelRegex/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => performance}/useTopLevelRegex/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noDoneCallback/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noDoneCallback/invalid.js.snap (75%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noDoneCallback/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noDoneCallback/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/invalid.js.snap (88%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/invalidRange.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/invalidRange.js.snap (81%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/validRange.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/noYodaExpression/validRange.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useConsistentBuiltinInstantiation/invalid.js (53%) create mode 100644 crates/biome_js_analyze/tests/specs/style/useConsistentBuiltinInstantiation/invalid.js.snap rename crates/biome_js_analyze/tests/specs/{nursery => style}/useConsistentBuiltinInstantiation/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useConsistentBuiltinInstantiation/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useDefaultSwitchClause/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useDefaultSwitchClause/invalid.js.snap (75%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useDefaultSwitchClause/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useDefaultSwitchClause/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useExplicitLengthCheck/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useExplicitLengthCheck/invalid.js.snap (83%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useExplicitLengthCheck/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useExplicitLengthCheck/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowNewError/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowNewError/invalid.js.snap (83%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowNewError/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowNewError/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowOnlyError/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowOnlyError/invalid.js.snap (79%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowOnlyError/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => style}/useThrowOnlyError/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/allowlist.js (100%) create mode 100644 crates/biome_js_analyze/tests/specs/suspicious/noConsole/allowlist.js.snap rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/allowlist.options.json (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/invalid.js.snap (90%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noConsole/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noEvolvingTypes/invalid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noEvolvingTypes/invalid.ts.snap (85%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noEvolvingTypes/valid.ts (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noEvolvingTypes/valid.ts.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalid.js.snap (87%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedBun.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedBun.js.snap (84%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedChai.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedChai.js.snap (85%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedDeno.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedDeno.js.snap (89%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedNode.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/invalidImportedNode.js.snap (85%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validBun.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validBun.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validDeno.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validDeno.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validMethodCalls.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noMisplacedAssertion/validMethodCalls.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noReactSpecificProps/invalid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noReactSpecificProps/invalid.jsx.snap (88%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noReactSpecificProps/valid.jsx (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/noReactSpecificProps/valid.jsx.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useErrorMessage/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useErrorMessage/invalid.js.snap (85%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useErrorMessage/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useErrorMessage/valid.js.snap (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useNumberToFixedDigitsArgument/invalid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useNumberToFixedDigitsArgument/invalid.js.snap (77%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useNumberToFixedDigitsArgument/valid.js (100%) rename crates/biome_js_analyze/tests/specs/{nursery => suspicious}/useNumberToFixedDigitsArgument/valid.js.snap (100%) create mode 100644 crates/biome_migrate/tests/specs/migrations/nurseryRules/complexCase.json create mode 100644 crates/biome_migrate/tests/specs/migrations/nurseryRules/complexCase.json.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 636081d206c3..8509c065cfed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ New entries must be placed in a section entitled `Unreleased`. Read our [guidelines for writing a good changelog entry](https://github.com/biomejs/biome/blob/main/CONTRIBUTING.md#changelog). -## Unreleased +## v1.9.0 (2024-09-12) ### Analyzer @@ -287,6 +287,62 @@ our [guidelines for writing a good changelog entry](https://github.com/biomejs/b ### Linter +#### Promoted rules + +New rules are incubated in the nursery group. +Once stable, we promote them to a stable group. + +The following CSS rules are promoted: + +- [a11y/useGenericFontNames](https://biomejs.dev/linter/rules/use-generic-font-names/) +- [correctness/noInvalidDirectionInLinearGradient](https://biomejs.dev/linter/rules/no-invalid-direction-in-linear-gradient/) +- [correctness/noInvalidGridAreas](https://biomejs.dev/linter/rules/no-invalid-grid-areas/) +- [correctness/noInvalidPositionAtImportRule](https://biomejs.dev/linter/rules/no-invalid-position-at-import-rule/) +- [correctness/noUnknownFunction](https://biomejs.dev/linter/rules/no-unknown-function/) +- [correctness/noUnknownMediaFeatureName](https://biomejs.dev/linter/rules/no-unknown-media-feature-name/) +- [correctness/noUnknownProperty](https://biomejs.dev/linter/rules/no-unknown-property/) +- [correctness/noUnknownUnit](https://biomejs.dev/linter/rules/no-unknown-unit/) +- [correctness/noUnmatchableAnbSelector](https://biomejs.dev/linter/rules/no-unmatchable-anb-selector/) +- [suspicious/noDuplicateAtImportRules](https://biomejs.dev/linter/rules/no-duplicate-at-import-rules/) +- [suspicious/noDuplicateFontNames](https://biomejs.dev/linter/rules/no-duplicate-font-names/) +- [suspicious/noDuplicateSelectorsKeyframeBlock](https://biomejs.dev/linter/rules/no-duplicate-selectors-keyframe-block/) +- [suspicious/noEmptyBlock](https://biomejs.dev/linter/rules/no-empty-block/) +- [suspicious/noImportantInKeyframe](https://biomejs.dev/linter/rules/no-important-in-keyframe/) +- [suspicious/noShorthandPropertyOverrides](https://biomejs.dev/linter/rules/no-shorthand-property-overrides/) + +The following JavaScript rules are promoted: + +- [a11y/noLabelWithoutControl](https://biomejs.dev/linter/rules/no-label-without-control/) +- [a11y/useFocusableInteractive](https://biomejs.dev/linter/rules/use-focusable-interactive/) +- [a11y/useSemanticElements](https://biomejs.dev/linter/rules/use-semantic-elements/) +- [complexity/noUselessStringConcat](https://biomejs.dev/linter/rules/no-useless-string-concat/) +- [complexity/noUselessUndefinedInitialization](https://biomejs.dev/linter/rules/no-useless-undefined-initialization/) +- [complexity/useDateNow](https://biomejs.dev/linter/rules/use-date-now/) +- [correctness/noUndeclaredDependencies](https://biomejs.dev/linter/rules/no-undeclared-dependencies/) +- [correctness/noInvalidBuiltinInstantiation](https://biomejs.dev/linter/rules/no-invalid-builtin-instantiation/) +- [correctness/noUnusedFunctionParameters](https://biomejs.dev/linter/rules/no-unused-function-parameters/) +- [correctness/useImportExtensions](https://biomejs.dev/linter/rules/use-import-extensions/) +- [performance/useTopLevelRegex](https://biomejs.dev/linter/rules/use-top-level-regex/) +- [style/noDoneCallback](https://biomejs.dev/linter/rules/no-done-callback/) +- [style/noYodaExpression](https://biomejs.dev/linter/rules/no-yoda-expression/) +- [style/useConsistentBuiltinInstantiation](https://biomejs.dev/linter/rules/use-consistent-builtin-instantiation/) +- [style/useDefaultSwitchClause](https://biomejs.dev/linter/rules/use-default-switch-clause/) +- [style/useExplicitLengthCheck](https://biomejs.dev/linter/rules/use-explicit-length-check/) +- [style/useThrowNewError](https://biomejs.dev/linter/rules/use-throw-new-error/) +- [style/useThrowOnlyError](https://biomejs.dev/linter/rules/use-throw-only-error/) +- [suspicious/noConsole](https://biomejs.dev/linter/rules/no-console/) +- [suspicious/noEvolvingTypes](https://biomejs.dev/linter/rules/no-evolving-types/) +- [suspicious/noMisplacedAssertion](https://biomejs.dev/linter/rules/no-misplaced-assertion/) +- [suspicious/noReactSpecificProps](https://biomejs.dev/linter/rules/no-react-specific-props/) +- [suspicious/useErrorMessage](https://biomejs.dev/linter/rules/use-error-message/) +- [suspicious/useNumberToFixedDigitsArgument](https://biomejs.dev/linter/rules/use-number-to-fixed-digits-argument/) + +#### Deprecated rules + +- `correctness/noInvalidNewBuiltin` is deprecated. Use [correctness/noInvalidBuiltinInstantiation](https://biomejs.dev/linter/rules/no-invalid-builtin-instantiation/) instead. +- `style/useSingleCaseStatement` is deprecated. Use [correctness/noSwitchDeclarations](https://biomejs.dev/linter/rules/no-switch-declarations/) instead. +- `suspicious/noConsoleLog` is deprecated. Use [suspicious/noConsole](https://biomejs.dev/linter/rules/no-console/) instead. + #### New features - Implement [css suppression action](https://github.com/biomejs/biome/issues/3278). Contributed by @togami2864 diff --git a/crates/biome_cli/src/commands/mod.rs b/crates/biome_cli/src/commands/mod.rs index 416db04df981..5e68992a2456 100644 --- a/crates/biome_cli/src/commands/mod.rs +++ b/crates/biome_cli/src/commands/mod.rs @@ -416,7 +416,7 @@ pub enum BiomeCommand { sub_command: Option, }, - /// [EXPERIMENTAL] Searches for Grit patterns across a project. + /// EXPERIMENTAL: Searches for Grit patterns across a project. /// /// Note: GritQL escapes code snippets using backticks, but most shells /// interpret backticks as command invocations. To avoid this, it's best to diff --git a/crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs b/crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs index cb084537b1f3..2fb83088aa24 100644 --- a/crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs +++ b/crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs @@ -257,10 +257,7 @@ pub(crate) fn migrate_eslint_any_rule( results.has_inspired_rules = true; return false; } - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group.use_throw_only_error.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -357,10 +354,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "default-case" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group .use_default_switch_clause .get_or_insert(Default::default()); @@ -451,10 +445,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "jest/no-done-callback" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group.no_done_callback.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -492,10 +483,7 @@ pub(crate) fn migrate_eslint_any_rule( results.has_inspired_rules = true; return false; } - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.suspicious.get_or_insert_with(Default::default); let rule = group .no_misplaced_assertion .get_or_insert(Default::default()); @@ -585,20 +573,14 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "jsx-a11y/interactive-supports-focus" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.a11y.get_or_insert_with(Default::default); let rule = group .use_focusable_interactive .get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } "jsx-a11y/label-has-associated-control" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.a11y.get_or_insert_with(Default::default); let rule = group .no_label_without_control .get_or_insert(Default::default()); @@ -682,10 +664,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "jsx-a11y/prefer-tag-over-role" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.a11y.get_or_insert_with(Default::default); let rule = group .use_semantic_elements .get_or_insert(Default::default()); @@ -759,12 +738,8 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "no-console" => { - if !options.include_inspired { - results.has_inspired_rules = true; - return false; - } let group = rules.suspicious.get_or_insert_with(Default::default); - let rule = group.no_console_log.get_or_insert(Default::default()); + let rule = group.no_console.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } "no-const-assign" => { @@ -983,7 +958,7 @@ pub(crate) fn migrate_eslint_any_rule( "no-new-native-nonconstructor" => { let group = rules.correctness.get_or_insert_with(Default::default); let rule = group - .no_invalid_new_builtin + .no_invalid_builtin_instantiation .get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -993,10 +968,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "no-new-wrappers" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group .use_consistent_builtin_instantiation .get_or_insert(Default::default()); @@ -1111,10 +1083,7 @@ pub(crate) fn migrate_eslint_any_rule( results.has_inspired_rules = true; return false; } - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group.use_throw_only_error.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -1126,14 +1095,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "no-undef-init" => { - if !options.include_inspired { - results.has_inspired_rules = true; - return false; - } - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.complexity.get_or_insert_with(Default::default); let rule = group .no_useless_undefined_initialization .get_or_insert(Default::default()); @@ -1196,10 +1158,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "no-useless-concat" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.complexity.get_or_insert_with(Default::default); let rule = group .no_useless_string_concat .get_or_insert(Default::default()); @@ -1413,10 +1372,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "solidjs/no-react-specific-props" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.suspicious.get_or_insert_with(Default::default); let rule = group .no_react_specific_props .get_or_insert(Default::default()); @@ -1435,22 +1391,12 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "unicorn/error-message" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.suspicious.get_or_insert_with(Default::default); let rule = group.use_error_message.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } "unicorn/explicit-length-check" => { - if !options.include_inspired { - results.has_inspired_rules = true; - return false; - } - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group .use_explicit_length_check .get_or_insert(Default::default()); @@ -1468,12 +1414,9 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "unicorn/new-for-builtins" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.correctness.get_or_insert_with(Default::default); let rule = group - .use_consistent_builtin_instantiation + .no_invalid_builtin_instantiation .get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -1515,10 +1458,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "unicorn/prefer-date-now" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.complexity.get_or_insert_with(Default::default); let rule = group.use_date_now.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -1551,20 +1491,14 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "unicorn/require-number-to-fixed-digits-argument" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.suspicious.get_or_insert_with(Default::default); let rule = group .use_number_to_fixed_digits_argument .get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } "unicorn/throw-new-error" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group.use_throw_new_error.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } @@ -1589,10 +1523,7 @@ pub(crate) fn migrate_eslint_any_rule( rule.set_level(rule_severity.into()); } "yoda" => { - if !options.include_nursery { - return false; - } - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.style.get_or_insert_with(Default::default); let rule = group.no_yoda_expression.get_or_insert(Default::default()); rule.set_level(rule_severity.into()); } diff --git a/crates/biome_cli/src/execute/migrate/eslint_eslint.rs b/crates/biome_cli/src/execute/migrate/eslint_eslint.rs index d078b4dfe82c..e12eab4a6de3 100644 --- a/crates/biome_cli/src/execute/migrate/eslint_eslint.rs +++ b/crates/biome_cli/src/execute/migrate/eslint_eslint.rs @@ -539,9 +539,9 @@ pub struct NoConsoleOptions { /// Allowed calls on the console object. pub allow: Vec, } -impl From for biome_js_analyze::lint::nursery::no_console::NoConsoleOptions { +impl From for biome_js_analyze::lint::suspicious::no_console::NoConsoleOptions { fn from(val: NoConsoleOptions) -> Self { - biome_js_analyze::lint::nursery::no_console::NoConsoleOptions { allow: val.allow } + biome_js_analyze::lint::suspicious::no_console::NoConsoleOptions { allow: val.allow } } } diff --git a/crates/biome_cli/src/execute/migrate/eslint_to_biome.rs b/crates/biome_cli/src/execute/migrate/eslint_to_biome.rs index d5447215b370..4614c68be53d 100644 --- a/crates/biome_cli/src/execute/migrate/eslint_to_biome.rs +++ b/crates/biome_cli/src/execute/migrate/eslint_to_biome.rs @@ -210,7 +210,7 @@ fn migrate_eslint_rule( eslint_eslint::Rule::NoConsole(conf) => { if migrate_eslint_any_rule(rules, &name, conf.severity(), opts, results) { if let eslint_eslint::RuleConf::Option(severity, rule_options) = conf { - let group = rules.nursery.get_or_insert_with(Default::default); + let group = rules.suspicious.get_or_insert_with(Default::default); group.no_console = Some(biome_config::RuleFixConfiguration::WithOptions( biome_config::RuleWithFixOptions { level: severity.into(), diff --git a/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_lint_files_by_when_enabled.snap b/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_lint_files_by_when_enabled.snap index dca1e1d0efce..00a7c255cccb 100644 --- a/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_lint_files_by_when_enabled.snap +++ b/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_lint_files_by_when_enabled.snap @@ -30,7 +30,7 @@ lint ━━━━━━━━━━━━━━━━━━━━━━━━━ # Emitted Messages ```block -input.css:1:6 lint/nursery/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +input.css:1:6 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × An empty block isn't allowed. diff --git a/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_not_lint_files_by_default.snap b/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_not_lint_files_by_default.snap index dca1e1d0efce..00a7c255cccb 100644 --- a/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_not_lint_files_by_default.snap +++ b/crates/biome_cli/tests/snapshots/main_cases_handle_css_files/should_not_lint_files_by_default.snap @@ -30,7 +30,7 @@ lint ━━━━━━━━━━━━━━━━━━━━━━━━━ # Emitted Messages ```block -input.css:1:6 lint/nursery/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +input.css:1:6 lint/suspicious/noEmptyBlock ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × An empty block isn't allowed. diff --git a/crates/biome_cli/tests/snapshots/main_commands_check/config_recommended_group.snap b/crates/biome_cli/tests/snapshots/main_commands_check/config_recommended_group.snap index 7116ca6fc29f..cc43e5ac2e80 100644 --- a/crates/biome_cli/tests/snapshots/main_commands_check/config_recommended_group.snap +++ b/crates/biome_cli/tests/snapshots/main_commands_check/config_recommended_group.snap @@ -37,16 +37,14 @@ check ━━━━━━━━━━━━━━━━━━━━━━━━ # Emitted Messages ```block -check.js:1:1 lint/correctness/noInvalidNewBuiltin FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +check.js:1:1 lint/correctness/noInvalidBuiltinInstantiation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Symbol cannot be called as a constructor. + × Use Symbol() instead of new Symbol(). > 1 │ new Symbol(""); │ ^^^^^^^^^^^^^^ - i Calling Symbol with the new operator throws a TypeError. - - i Unsafe fix: Remove new. + i Unsafe fix: Remove new keyword. 1 │ new·Symbol(""); │ ---- diff --git a/crates/biome_cli/tests/snapshots/main_commands_lint/config_recommended_group.snap b/crates/biome_cli/tests/snapshots/main_commands_lint/config_recommended_group.snap index 4acb1a802ff9..b0c4b636b300 100644 --- a/crates/biome_cli/tests/snapshots/main_commands_lint/config_recommended_group.snap +++ b/crates/biome_cli/tests/snapshots/main_commands_lint/config_recommended_group.snap @@ -37,16 +37,14 @@ lint ━━━━━━━━━━━━━━━━━━━━━━━━━ # Emitted Messages ```block -check.js:1:1 lint/correctness/noInvalidNewBuiltin FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +check.js:1:1 lint/correctness/noInvalidBuiltinInstantiation FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Symbol cannot be called as a constructor. + × Use Symbol() instead of new Symbol(). > 1 │ new Symbol(""); │ ^^^^^^^^^^^^^^ - i Calling Symbol with the new operator throws a TypeError. - - i Unsafe fix: Remove new. + i Unsafe fix: Remove new keyword. 1 │ new·Symbol(""); │ ---- diff --git a/crates/biome_cli/tests/snapshots/main_commands_lint/no_unused_dependencies.snap b/crates/biome_cli/tests/snapshots/main_commands_lint/no_unused_dependencies.snap index 35d1489f3afa..4b9f2278c118 100644 --- a/crates/biome_cli/tests/snapshots/main_commands_lint/no_unused_dependencies.snap +++ b/crates/biome_cli/tests/snapshots/main_commands_lint/no_unused_dependencies.snap @@ -37,9 +37,9 @@ import "lodash"; # Termination Message ```block -lint ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +configuration ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × Some errors were emitted while running checks. + × Biome exited because the configuration resulted in errors. Please fix them. @@ -48,23 +48,48 @@ lint ━━━━━━━━━━━━━━━━━━━━━━━━━ # Emitted Messages ```block -fix.js:2:8 lint/nursery/noUndeclaredDependencies ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +biome.json:7:9 deserialize ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - × The current dependency isn't specified in your package.json. + × Found an unknown key `noUndeclaredDependencies`. - 1 │ import "react"; - > 2 │ import "lodash"; - │ ^^^^^^^^ - 3 │ + 5 │ "all": false, + 6 │ "nursery": { + > 7 │ "noUndeclaredDependencies": "error" + │ ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 8 │ } + 9 │ } - i This could lead to errors. + i Known keys: - i Add the dependency in your manifest. + - recommended + - all + - noCommonJs + - noDuplicateCustomProperties + - noDuplicateElseIf + - noDuplicatedFields + - noDynamicNamespaceImportAccess + - noEnum + - noExportedImports + - noIrregularWhitespace + - noRestrictedImports + - noRestrictedTypes + - noSecrets + - noStaticElementInteractions + - noSubstr + - noUnknownPseudoClass + - noUnknownPseudoElement + - noUselessEscapeInRegex + - noValueAtRule + - useAdjacentOverloadSignatures + - useAriaPropsSupportedByRole + - useConsistentCurlyBraces + - useConsistentMemberAccessibility + - useDeprecatedReason + - useImportRestrictions + - useSortedClasses + - useStrictMode + - useTrimStartEnd + - useValidAutocomplete ``` - -```block -Checked 1 file in