test: infrastructure for embedded langauges#9509
Conversation
|
WalkthroughThis pull request migrates HTML-ish file testing (Vue, Svelte, Astro, HTML) from per-file analysis to workspace-based analysis. It removes large sets of legacy test cases from CLI test files, restructures the test harness in spec_tests.rs to branch on file extension, updates Cargo.toml dependency specifications, adds comprehensive new test fixtures for various linting rules, and introduces workspace-based diagnostic testing utilities in biome_test_utils. Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
📝 Coding Plan
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (4)
crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-directives.vue (1)
2-15: Consider adding therefimport for completeness.The script uses
ref()without importing it fromvue. Whilst this doesn't affect thenoUnusedVariablesrule being tested (the purpose here is to verify directive usage marks variables as used), including the import would make the fixture more representative of real-world Vue code.💅 Optional: Add import for realism
<!-- should not generate diagnostics --> <script setup> +import { ref } from 'vue'; + const supported = ref(true);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-directives.vue` around lines 2 - 15, Add an explicit import of ref from 'vue' because the script uses ref() (e.g., supported, enabled, count, isActive) but does not import it; update the top of the <script setup> to import ref so usages in functions like toggleCaptions and handleClick are backed by a real import and the fixture better reflects real-world Vue code.crates/biome_js_analyze/tests/specs/style/useConst/valid-astro-snippet-source.astro (1)
3-3: Useconstin thisvaliduseConstfixtureLine 3 uses
letwithout reassignment; if Astro frontmatter analysis becomes stricter, this “valid” fixture could start failing. Switching toconstkeeps the baseline robust.Suggested tweak
-let hello = "Hello World"; +const hello = "Hello World";Based on learnings: in
crates/biome_analyze/tests/specs/**/*, files prefixed withvalidshould contain code that does not trigger the rule.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@crates/biome_js_analyze/tests/specs/style/useConst/valid-astro-snippet-source.astro` at line 3, The fixture uses "let hello = \"Hello World\";" which is not reassigned and should be const for this valid useConst test; update the declaration of the variable named "hello" from let to const in the Astro frontmatter so the test remains a valid non-triggering case for the useConst rule.crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-value-in-template.svelte (1)
4-4: Potentially unused import.The
cnimport doesn't appear to be used in this test file. If it's intentional (to test that unused imports are flagged), consider renaming to aninvalid-*file. Otherwise, you might want to remove it or use it in the template.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-value-in-template.svelte` at line 4, The import "cn" is unused in this test file; either remove the unused import statement (the line importing cn) or use "cn" inside the Svelte template so the test reflects a used import, or if the file is intended to test unused-import detection, rename the file to follow the invalid-* naming convention; update the import or filename accordingly and ensure the test content matches the intent (use or remove the symbol "cn" or rename the file to invalid-...).crates/biome_test_utils/src/lib.rs (1)
1041-1070: Consider preserving relative paths for peer files.At the moment, peer sources are inserted as
/test-project/<filename>only. If fixtures ever use nested folders, relative imports will quietly stop resolving. Not a blocker today, but a future papercut.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@crates/biome_test_utils/src/lib.rs` around lines 1041 - 1070, The code currently inserts peer files using only their file name via fs.insert(project_root.join(target_name), ...), which loses directory structure; compute the relative path from parent_dir (e.g., let rel = path.strip_prefix(parent_dir).unwrap_or(path.as_path()).to_owned() or use Utf8Path::from_path(path).strip_prefix(Utf8Path::from_path(parent_dir)) ) and insert using project_root.join(rel) so nested fixture folders are preserved (update the insertion site where target_name and project_root.join(...) are used, keeping the existing Utf8PathBuf/path handling and content read logic).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-to-refs-interface.vue`:
- Around line 1-2: Remove the redundant legacy HTML comment "<!-- should not
emit diagnostics -->" (line 2) so only the standardized "<!-- should not
generate diagnostics -->" comment remains; update the file's comments block in
valid-script-setup-to-refs-interface.vue by deleting the duplicate legacy
comment to avoid duplication.
In
`@crates/biome_js_analyze/tests/specs/style/useConst/valid-vue-snippet-source.vue`:
- Around line 6-8: The template uses Svelte-style single braces in the <span>
element ("{hello}"); update the Vue interpolation to use double mustaches by
replacing the single-brace expression inside the <span> with a Vue interpolation
expression (i.e., change "{hello}" to "{{ hello }}" and keep spacing consistent)
so the component uses valid Vue template syntax.
In
`@crates/biome_js_analyze/tests/specs/style/useImportType/valid-vue-value-in-template.vue`:
- Around line 6-9: The file incorrectly uses Svelte runes ($bindable, $props)
inside a Vue test; replace the Svelte-specific expressions with valid Vue script
syntax or convert the file to a Svelte test: either change the destructuring to
use Vue's defineProps (e.g. const { ref = null, class: className } =
defineProps<AvatarPrimitive.FallbackProps>() or equivalent) so
AvatarPrimitive.FallbackProps, ref and className are populated via Vue APIs, or
rename the file to .svelte and keep the $bindable/$props usage if the intent was
a Svelte spec.
In `@crates/biome_test_utils/src/lib.rs`:
- Around line 892-901: The workspace update is dropping extended configurations
by passing extended_configurations: vec![] to UpdateSettingsParams and by
re-parsing .options.json manually; instead, change build/test setup to call the
existing load_configuration logic (or populate
UpdateSettingsParams.extended_configurations from the same parse path) so
extends are preserved: locate the update_settings call and UpdateSettingsParams
construction and replace the hardcoded vec![] with the extended configurations
returned by load_configuration (or the helper that parses .options.json) used by
build_test_configuration/parse_options_json so the workspace honors "extends"
chains.
- Around line 822-829: The current detection uses
content.contains(no_diagnostics_comment_text) /
content.contains(diagnostics_comment_text) which yields false positives from
string literals; change the check so it only matches text inside actual Rust
comments rather than anywhere in source. Locate the diagnostic_comment logic
(the diagnostic_comment variable and the no_diagnostics_comment_text /
diagnostics_comment_text symbols) and replace the naive contains() checks with a
comment-aware scan: either parse the file with a Rust parser (e.g.,
syn::parse_file) and inspect comments/attributes, or run a simple lexer/regex
that extracts // line-comments and /* block-comments */ and then search those
extracted comment texts for the markers. Ensure the new logic only returns
Some(Diagnostics::...) when the marker appears inside a comment.
---
Nitpick comments:
In
`@crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-directives.vue`:
- Around line 2-15: Add an explicit import of ref from 'vue' because the script
uses ref() (e.g., supported, enabled, count, isActive) but does not import it;
update the top of the <script setup> to import ref so usages in functions like
toggleCaptions and handleClick are backed by a real import and the fixture
better reflects real-world Vue code.
In
`@crates/biome_js_analyze/tests/specs/style/useConst/valid-astro-snippet-source.astro`:
- Line 3: The fixture uses "let hello = \"Hello World\";" which is not
reassigned and should be const for this valid useConst test; update the
declaration of the variable named "hello" from let to const in the Astro
frontmatter so the test remains a valid non-triggering case for the useConst
rule.
In
`@crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-value-in-template.svelte`:
- Line 4: The import "cn" is unused in this test file; either remove the unused
import statement (the line importing cn) or use "cn" inside the Svelte template
so the test reflects a used import, or if the file is intended to test
unused-import detection, rename the file to follow the invalid-* naming
convention; update the import or filename accordingly and ensure the test
content matches the intent (use or remove the symbol "cn" or rename the file to
invalid-...).
In `@crates/biome_test_utils/src/lib.rs`:
- Around line 1041-1070: The code currently inserts peer files using only their
file name via fs.insert(project_root.join(target_name), ...), which loses
directory structure; compute the relative path from parent_dir (e.g., let rel =
path.strip_prefix(parent_dir).unwrap_or(path.as_path()).to_owned() or use
Utf8Path::from_path(path).strip_prefix(Utf8Path::from_path(parent_dir)) ) and
insert using project_root.join(rel) so nested fixture folders are preserved
(update the insertion site where target_name and project_root.join(...) are
used, keeping the existing Utf8PathBuf/path handling and content read logic).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 6ed3e303-c124-4dc4-85a6-c64383ade25c
⛔ Files ignored due to path filters (217)
crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/no_unused_imports_is_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/no_useless_lone_block_statements_is_not_triggered.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/use_const_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/use_import_type_not_triggered_for_enum_in_template.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_astro_files/use_import_type_not_triggered_for_enum_in_template_v2.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_comma_operator_not_triggered_in_svelte_template_expression.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_comma_operator_triggered_in_svelte_template_expression.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_unused_imports_is_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_useless_lone_block_statements_is_not_triggered.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/supports_ts_in_embedded_expressions.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_const_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_import_type_not_triggered_for_enum_in_template.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_import_type_not_triggered_for_enum_in_template_v2.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_assign_in_expressions_not_triggered_in_v_on.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_assign_in_expressions_triggered_in_template_interpolation.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_comma_operator_not_triggered_in_v_for.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_undeclared_variables_not_triggered_for_script_setup_bindings.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_unused_imports_is_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/no_useless_lone_block_statements_is_not_triggered.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/supports_ts_in_embedded_expressions.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/use_const_not_triggered_in_snippet_sources.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/use_import_type_not_triggered_for_enum_in_template.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/use_import_type_not_triggered_for_enum_in_template_v2.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/use_import_type_works_as_expected.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_monorepo/should_find_root_when_run_from_nested_dir.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_cases_reporter_terminal/reports_diagnostics_check_write_command_verbose_file.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_commands_check/check_skip_errors.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_commands_ci/ci_skip_errors.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_commands_format/html_enabled_by_default.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_commands_lint/lint_skip_errors.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/snapshots/main_commands_lint/should_apply_root_settings_with_stdin_file_path_and_extended_broken_config.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noCommaOperator/invalid-svelte-template.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noCommaOperator/valid-vue-v-for.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-astro-snippet.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-svelte-snippet.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-svelte-ts-expressions.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-vue-snippet.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-vue-ts-expressions.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noConstantMathMinMaxClamp/invalid.jsonc.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUndeclaredVariables/valid-vue-script-setup-bindings.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-astro-template-usage.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-svelte-template-usage.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-vue-template-usage.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedLabels/valid.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-attribute-expressions.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-directive-expressions.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-embedded-bindings.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-svelte-directives.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-svelte-embedded-bindings.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-directives.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-embedded-bindings.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/validVariables.ts.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/invalid-createapp-mount-object-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/invalid-createapp-object-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/invalid-export-default-object-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/invalid-export-default-parenthesized-object-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-createapp-component-function-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-createapp-function-data-mount.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-createapp-spread-method-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-export-default-arrow-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-export-default-data-in-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-export-default-function-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-export-default-method-data-with-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDataObjectDeclaration/valid-new-vue-method-shorthand-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-asyncdata-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-asyncdata-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-duplicate-across-sections.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-duplicate-computed-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-duplicate-data-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-duplicate-in-data-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-duplicate-props-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-script-setup-to-refs-no-assign.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/invalid-with-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-asyncdata.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-complex-spread.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-data-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-getter-setter.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-defineprops.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-destructure.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-simple.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-to-refs-interface.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-to-refs.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-unique-keys.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-watch.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-with-spread.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-async-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-computed.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-data-arrow-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-data-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-data-method.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-data-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-data-short-arrow-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-define-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-props-array.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-setup-interface.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-setup-type-alias.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/invalid-type-inline.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-arrow-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-method.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-short-arrow-function.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-define-props.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-setup-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-setup-definitions.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-create-app.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-define-props-array.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-define-props-interface.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-define-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-define-props-type-alias.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-define-props-type-inline.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-export-default-array.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/invalid-export-default-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-component-setup.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-array.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-interface.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-type-alias.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-type-inline.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-non-props.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-props-array.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-props-object.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/correctness/useExhaustiveDependencies/missingDependenciesInvalid.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/invalid-declare.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/invalid-define.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/invalid-ts.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/invalid.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/valid-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/valid.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/valid.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-createapp-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-definecomponent-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-export-default-computed.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-export-default-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-export-default-methods.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-export-default-mounted.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-export-default-watch.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-full-options-api.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-mixed-setup-data.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-multiple-options.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/invalid-props-only.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/valid-definecomponent-function-signature.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueOptionsApi/valid-script-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-compound-assignment.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-conditional-operators.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-ctx-emit.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-defineemits.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-definemodel-destructured.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-definemodel.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-emit-destructured.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-emit-multiple-args.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-export-default-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-if-condition.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-logical-operators.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-multiple-ref-types.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-optional-chaining.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-script-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-shallowref-property.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-switch-statement.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/invalid-unary-operators.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-conditional-ref-assignment.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-ctx-emit.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-defineemits.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-definemodel-destructured.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-definemodel.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-emit-destructured.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-export-default-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-ignore-cases.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-ignore-unknown-import.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-multiple-ref-types.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-ref-access.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-scope-reference.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/noVueRefAsOperand/valid-script-setup.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/invalid-a.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/invalid-b.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/invalid-c.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/invalid-d.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-a.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-b.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-c.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-d.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-a.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-b.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-c.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-custom.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-single-a.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-single.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid-with-defaults.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/invalid.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/valid-custom.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/valid.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueMultiWordComponentNames/ValidPascalCase.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueMultiWordComponentNames/invalid-has-name.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueMultiWordComponentNames/invalid.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/nursery/useVueMultiWordComponentNames/valid-kebab-case.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/performance/noAccumulatingSpread/valid.jsonc.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/noParameterAssign/invalidFixUnsafe.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useComponentExportOnlyModules/valid_component_and_number_constant_with_ignored_constant_export.jsx.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useConst/valid-astro-snippet-source.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useConst/valid-svelte-snippet-source.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useConst/valid-vue-snippet-source.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useFilenamingConvention/Valid_Renamed_Export.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useFilenamingConvention/_valid.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-components-in-template.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-enum-in-template.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-value-in-template.astro.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-enum-in-control-flow.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-enum-in-template.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-value-in-template.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-vue-enum-in-template.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/style/useImportType/valid-vue-value-in-template.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/suspicious/noAssignInExpressions/invalid-vue-interpolation.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/suspicious/noAssignInExpressions/valid-vue-v-on.vue.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/suspicious/noConfusingLabels/valid.svelte.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/suspicious/noWith/invalid.js.snapis excluded by!**/*.snapand included by**crates/biome_js_analyze/tests/specs/suspicious/noWith/valid.js.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (74)
.claude/skills/testing-codegen/SKILL.mdcrates/biome_cli/tests/cases/handle_astro_files.rscrates/biome_cli/tests/cases/handle_svelte_files.rscrates/biome_cli/tests/cases/handle_vue_files.rscrates/biome_js_analyze/Cargo.tomlcrates/biome_js_analyze/tests/spec_tests.rscrates/biome_js_analyze/tests/specs/complexity/noCommaOperator/invalid-svelte-template.sveltecrates/biome_js_analyze/tests/specs/complexity/noCommaOperator/valid-vue-v-for.vuecrates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-astro-snippet.astrocrates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-svelte-snippet.sveltecrates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-svelte-ts-expressions.sveltecrates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-vue-snippet.vuecrates/biome_js_analyze/tests/specs/complexity/noUselessLoneBlockStatements/valid-vue-ts-expressions.vuecrates/biome_js_analyze/tests/specs/correctness/noUndeclaredVariables/valid-vue-script-setup-bindings.vuecrates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-astro-template-usage.astrocrates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-svelte-template-usage.sveltecrates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-vue-template-usage.vuecrates/biome_js_analyze/tests/specs/correctness/noUnusedLabels/valid.sveltecrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-attribute-expressions.astrocrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-directive-expressions.astrocrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-astro-embedded-bindings.astrocrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-svelte-directives.sveltecrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-svelte-embedded-bindings.sveltecrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-directives.vuecrates/biome_js_analyze/tests/specs/correctness/noUnusedVariables/valid-vue-embedded-bindings.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-asyncdata.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-complex-spread.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-data-function.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-getter-setter.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-defineprops.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-destructure.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-simple.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-to-refs-interface.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-script-setup-to-refs.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-unique-keys.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-watch.vuecrates/biome_js_analyze/tests/specs/correctness/noVueDuplicateKeys/valid-with-spread.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-arrow-function.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-method.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-data-short-arrow-function.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-define-props.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-props-object.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-setup-data.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedKeys/valid-setup-definitions.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-array.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-interface.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-object.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-type-alias.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-define-props-type-inline.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-non-props.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-props-array.vuecrates/biome_js_analyze/tests/specs/correctness/noVueReservedProps/valid-export-default-props-object.vuecrates/biome_js_analyze/tests/specs/nursery/noVueArrowFuncInWatch/valid-setup.vuecrates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-a.vuecrates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-b.vuecrates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-c.vuecrates/biome_js_analyze/tests/specs/nursery/useVueConsistentDefinePropsDeclaration/valid-d.vuecrates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/valid-custom.vuecrates/biome_js_analyze/tests/specs/nursery/useVueDefineMacrosOrder/valid.vuecrates/biome_js_analyze/tests/specs/style/useConst/valid-astro-snippet-source.astrocrates/biome_js_analyze/tests/specs/style/useConst/valid-svelte-snippet-source.sveltecrates/biome_js_analyze/tests/specs/style/useConst/valid-vue-snippet-source.vuecrates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-components-in-template.astrocrates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-enum-in-template.astrocrates/biome_js_analyze/tests/specs/style/useImportType/valid-astro-value-in-template.astrocrates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-enum-in-control-flow.sveltecrates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-enum-in-template.sveltecrates/biome_js_analyze/tests/specs/style/useImportType/valid-svelte-value-in-template.sveltecrates/biome_js_analyze/tests/specs/style/useImportType/valid-vue-enum-in-template.vuecrates/biome_js_analyze/tests/specs/style/useImportType/valid-vue-value-in-template.vuecrates/biome_js_analyze/tests/specs/suspicious/noAssignInExpressions/invalid-vue-interpolation.vuecrates/biome_js_analyze/tests/specs/suspicious/noAssignInExpressions/valid-vue-v-on.vuecrates/biome_js_analyze/tests/specs/suspicious/noConfusingLabels/valid.sveltecrates/biome_test_utils/src/lib.rs
💤 Files with no reviewable changes (3)
- crates/biome_cli/tests/cases/handle_astro_files.rs
- crates/biome_cli/tests/cases/handle_svelte_files.rs
- crates/biome_cli/tests/cases/handle_vue_files.rs
Merging this PR will not alter performance
Comparing Footnotes
|
Summary
This PR adds a new infrastructure for our analyzer crates, which relies on using the workspace instead of the bare analyzer.
We are at a point where we have rules working on embedded snippets, and we can't test them other than the CLI, which risks to get polluted.
This PR solves that by using the workspace for HTML-ish languages. The infra, for now, it's been added only to the HTML-ish languages only, so that it doesn't change things "too much".
I helped myself with AI to do the trivial work
Test Plan
Green CI
Docs