Skip to content

Commit 4b170a4

Browse files
committed
fix(grit): add missing slots for JSX element patterns
Add name, type_arguments, and attributes slots for jsx_self_closing_element and jsx_opening_element patterns. This enables patterns like: jsx_self_closing_element(name = "div") jsx_opening_element(type_arguments = TsTypeArguments()) Consolidates jsx_attributes test into jsx_slots test.
1 parent c96dcf2 commit 4b170a4

8 files changed

Lines changed: 55 additions & 18 deletions

File tree

.changeset/fix-jsx-slot-indices.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
"biome_grit_patterns": patch
3+
---
4+
5+
Fix incorrect slot indices for JSX elements in GritQL patterns.
6+
7+
The `attributes` slot for `JSX_SELF_CLOSING_ELEMENT` and `JSX_OPENING_ELEMENT` was incorrectly mapped to index 2, but should be index 3 (after `type_arguments` at index 2).
8+
9+
Also adds the missing `type_arguments` slot and adds slots for `JSX_ATTRIBUTE` (`name` and `initializer`).
10+
11+
This enables patterns like `jsx_self_closing_element(name = "div")` to correctly match JSX elements by their name.

crates/biome_grit_patterns/src/grit_target_language/js_target_language/generated_mappings.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,12 @@ pub const LEGACY_TREESITTER_COMPATIBILITY_PATTERNS: &[LegacyTreeSitterPattern] =
137137
LegacyTreeSitterPattern {
138138
name: "jsx_self_closing_element",
139139
kind: JsSyntaxKind::JSX_SELF_CLOSING_ELEMENT,
140-
slots: &[],
140+
slots: &[("name", 1), ("type_arguments", 2), ("attributes", 3)],
141141
},
142142
LegacyTreeSitterPattern {
143143
name: "jsx_opening_element",
144144
kind: JsSyntaxKind::JSX_OPENING_ELEMENT,
145-
slots: &[],
145+
slots: &[("name", 1), ("type_arguments", 2), ("attributes", 3)],
146146
},
147147
LegacyTreeSitterPattern {
148148
name: "jsx_closing_element",

crates/biome_grit_patterns/tests/specs/tsx/jsx_attributes.grit

Lines changed: 0 additions & 3 deletions
This file was deleted.

crates/biome_grit_patterns/tests/specs/tsx/jsx_attributes.snap

Lines changed: 0 additions & 12 deletions
This file was deleted.

crates/biome_grit_patterns/tests/specs/tsx/jsx_attributes.tsx

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
or {
2+
// Legacy patterns
3+
jsx_opening_element(name = "div"),
4+
jsx_self_closing_element(name = "span"),
5+
jsx_attribute(name = "className"),
6+
jsx_self_closing_element(type_arguments = TsTypeArguments()),
7+
8+
// Native patterns
9+
JsxOpeningElement(name = "div"),
10+
JsxSelfClosingElement(name = "button"),
11+
JsxAttribute(name = "id"),
12+
JsxAttribute($name, $value) as $attr where {
13+
$name <: "style"
14+
},
15+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
source: crates/biome_grit_patterns/tests/spec_tests.rs
3+
assertion_line: 94
4+
expression: jsx_slots
5+
---
6+
SnapshotResult {
7+
messages: [],
8+
matched_ranges: [
9+
"1:1-1:28",
10+
"1:6-1:27",
11+
"2:3-2:11",
12+
"3:3-3:22",
13+
"3:11-3:19",
14+
"5:3-5:24",
15+
"6:3-6:19",
16+
"6:8-6:18",
17+
],
18+
rewritten_files: [],
19+
created_files: [],
20+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div className="container">
2+
<span />
3+
<button id="btn" />
4+
<input disabled />
5+
<Component<string> />
6+
<div style={{}}>{children}</div>
7+
</div>

0 commit comments

Comments
 (0)