Skip to content

Commit b091ddf

Browse files
authored
fix(lint): useSemanticElements self-closing elements (#7044)
1 parent 3fd5f73 commit b091ddf

File tree

6 files changed

+1041
-227
lines changed

6 files changed

+1041
-227
lines changed

.changeset/floppy-dragons-yell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@biomejs/biome": patch
3+
---
4+
5+
Fixed [#6622](https://github.com/biomejs/biome/issues/6622), now the rule `useSemanticElements` works for JSX self-closing elements too.

crates/biome_js_analyze/src/lint/a11y/use_semantic_elements.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use biome_aria_metadata::AriaRole;
55
use biome_console::markup;
66
use biome_deserialize::TextRange;
77
use biome_diagnostics::Severity;
8-
use biome_js_syntax::{JsxAttribute, JsxOpeningElement};
9-
use biome_rowan::AstNode;
8+
use biome_js_syntax::{JsxAttribute, JsxOpeningElement, JsxSelfClosingElement};
9+
use biome_rowan::{AstNode, declare_node_union};
1010
use biome_rule_options::use_semantic_elements::UseSemanticElementsOptions;
1111

1212
declare_lint_rule! {
@@ -27,6 +27,14 @@ declare_lint_rule! {
2727
/// <div role="separator"></div>
2828
/// ```
2929
///
30+
/// ```jsx,expect_diagnostic
31+
/// <div role="checkbox" />
32+
/// ```
33+
///
34+
/// ```jsx,expect_diagnostic
35+
/// <div role="separator" />
36+
/// ```
37+
///
3038
/// ### Valid
3139
///
3240
/// ```jsx
@@ -53,15 +61,24 @@ declare_lint_rule! {
5361
}
5462
}
5563

64+
declare_node_union! {
65+
pub AnyOpeningElement = JsxOpeningElement | JsxSelfClosingElement
66+
}
67+
5668
impl Rule for UseSemanticElements {
57-
type Query = Ast<JsxOpeningElement>;
69+
type Query = Ast<AnyOpeningElement>;
5870
type State = JsxAttribute;
5971
type Signals = Option<Self::State>;
6072
type Options = UseSemanticElementsOptions;
6173

6274
fn run(ctx: &RuleContext<Self>) -> Self::Signals {
6375
let node = ctx.query();
64-
let role_attribute = node.find_attribute_by_name("role")?;
76+
let role_attribute = match node {
77+
AnyOpeningElement::JsxOpeningElement(node) => node.find_attribute_by_name("role")?,
78+
AnyOpeningElement::JsxSelfClosingElement(node) => {
79+
node.find_attribute_by_name("role")?
80+
}
81+
};
6582
let role_value = role_attribute.as_static_value()?;
6683
let role_value = role_value.as_string_constant()?;
6784

crates/biome_js_analyze/tests/specs/a11y/useSemanticElements/invalid.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// should generate diagnostics
12
<>
23
<div role="checkbox" ></div>
34
<div role="radio" ></div>

0 commit comments

Comments
 (0)