Skip to content

Commit be7e3e9

Browse files
committed
add more test cases
1 parent 2272557 commit be7e3e9

File tree

10 files changed

+175
-13
lines changed

10 files changed

+175
-13
lines changed

.changeset/nine-turkeys-dig.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"@biomejs/biome": patch
33
---
44

5-
Added the new nursery lint rule `noJsxLiterals`, which disallow the use of string literals inside JSX.
5+
Added the new nursery lint rule `noJsxLiterals`, which disallows the use of string literals inside JSX.
66

77
The rule catches these cases:
88

crates/biome_js_analyze/src/lint/nursery/no_jsx_literals.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ declare_lint_rule! {
7575
/// {'Please enter your name'}
7676
/// </span>
7777
/// ```
78+
/// ```jsx,expect_diagnostic,use_options
79+
/// <Component title="Hello!" />
80+
/// ```
81+
///
82+
///
7883
///
7984
/// ### `allowedStrings`
8085
///

crates/biome_js_analyze/tests/specs/nursery/noJsxLiterals/invalidAllowedStrings.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// should generate diagnostics
22
<>
33
<div>allowed</div>
4+
<div>allowed </div>
45
<>test</>
56
</>
67

crates/biome_js_analyze/tests/specs/nursery/noJsxLiterals/invalidAllowedStrings.jsx.snap

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ expression: invalidAllowedStrings.jsx
77
// should generate diagnostics
88
<>
99
<div>allowed</div>
10+
<div>allowed </div>
1011
<>test</>
1112
</>
1213
@@ -22,16 +23,35 @@ class Comp1 extends Component {
2223

2324
# Diagnostics
2425
```
25-
invalidAllowedStrings.jsx:4:4 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
26+
invalidAllowedStrings.jsx:4:7 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2627
2728
i Incorrect use of string literal detected.
2829
2930
2 │ <>
3031
3 │ <div>allowed</div>
31-
> 4 │ <>test</>
32+
> 4 │ <div>allowed </div>
33+
│ ^^^^^^^^^^
34+
5 │ <>test</>
35+
6 │ </>
36+
37+
i String literals in JSX can make code harder to maintain and internationalize.
38+
39+
i Consider avoiding hardcoded strings entirely.
40+
41+
42+
```
43+
44+
```
45+
invalidAllowedStrings.jsx:5:4 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
46+
47+
i Incorrect use of string literal detected.
48+
49+
3 │ <div>allowed</div>
50+
4 │ <div>allowed </div>
51+
> 5 │ <>test</>
3252
│ ^^^^
33-
5 │ </>
34-
6
53+
6 │ </>
54+
7
3555
3656
i String literals in JSX can make code harder to maintain and internationalize.
3757
@@ -41,16 +61,16 @@ invalidAllowedStrings.jsx:4:4 lint/nursery/noJsxLiterals ━━━━━━━
4161
```
4262

4363
```
44-
invalidAllowedStrings.jsx:10:43 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
64+
invalidAllowedStrings.jsx:11:43 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4565
4666
i Incorrect use of string literal detected.
4767
48-
8 │ class Comp1 extends Component {
49-
9render() {
50-
> 10 │ const varObjectTest = { testKey : (<div>test</div>) };
68+
9 │ class Comp1 extends Component {
69+
10render() {
70+
> 11 │ const varObjectTest = { testKey : (<div>test</div>) };
5171
^^^^
52-
11return varObjectTest.testKey;
53-
12}
72+
12return varObjectTest.testKey;
73+
13}
5474
5575
i String literals in JSX can make code harder to maintain and internationalize.
5676
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// should generate diagnostics
2+
<>
3+
<div>allowed</div>
4+
<div>allowed </div>
5+
<div>{"allowed "}</div>
6+
<>test</>
7+
</>
8+
9+
10+
class Comp1 extends Component {
11+
render() {
12+
const varObjectTest = { testKey : (<div>test</div>) };
13+
return varObjectTest.testKey;
14+
}
15+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
---
2+
source: crates/biome_js_analyze/tests/spec_tests.rs
3+
expression: invalidNoStringsAllowedStrings.jsx
4+
---
5+
# Input
6+
```jsx
7+
// should generate diagnostics
8+
<>
9+
<div>allowed</div>
10+
<div>allowed </div>
11+
<div>{"allowed "}</div>
12+
<>test</>
13+
</>
14+
15+
16+
class Comp1 extends Component {
17+
render() {
18+
const varObjectTest = { testKey : (<div>test</div>) };
19+
return varObjectTest.testKey;
20+
}
21+
}
22+
23+
```
24+
25+
# Diagnostics
26+
```
27+
invalidNoStringsAllowedStrings.jsx:4:7 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
28+
29+
i Incorrect use of string literal detected.
30+
31+
2 │ <>
32+
3 │ <div>allowed</div>
33+
> 4 │ <div>allowed </div>
34+
│ ^^^^^^^^^^
35+
5 │ <div>{"allowed "}</div>
36+
6 │ <>test</>
37+
38+
i String literals in JSX can make code harder to maintain and internationalize.
39+
40+
i Consider avoiding hardcoded strings entirely.
41+
42+
43+
```
44+
45+
```
46+
invalidNoStringsAllowedStrings.jsx:5:8 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47+
48+
i Incorrect use of string literal detected.
49+
50+
3 │ <div>allowed</div>
51+
4 │ <div>allowed </div>
52+
> 5 │ <div>{"allowed "}</div>
53+
│ ^^^^^^^^^^^^
54+
6 │ <>test</>
55+
7 │ </>
56+
57+
i String literals in JSX can make code harder to maintain and internationalize.
58+
59+
i Consider avoiding hardcoded strings entirely.
60+
61+
62+
```
63+
64+
```
65+
invalidNoStringsAllowedStrings.jsx:6:4 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
66+
67+
i Incorrect use of string literal detected.
68+
69+
4 │ <div>allowed </div>
70+
5 │ <div>{"allowed "}</div>
71+
> 6 │ <>test</>
72+
│ ^^^^
73+
7 │ </>
74+
8 │
75+
76+
i String literals in JSX can make code harder to maintain and internationalize.
77+
78+
i Consider avoiding hardcoded strings entirely.
79+
80+
81+
```
82+
83+
```
84+
invalidNoStringsAllowedStrings.jsx:12:43 lint/nursery/noJsxLiterals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
85+
86+
i Incorrect use of string literal detected.
87+
88+
10 │ class Comp1 extends Component {
89+
11render() {
90+
> 12 │ const varObjectTest = { testKey : (<div>test</div>) };
91+
^^^^
92+
13return varObjectTest.testKey;
93+
14}
94+
95+
i String literals in JSX can make code harder to maintain and internationalize.
96+
97+
i Consider avoiding hardcoded strings entirely.
98+
99+
100+
```
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"$schema": "../../../../../../packages/@biomejs/biome/configuration_schema.json",
3+
"linter": {
4+
"rules": {
5+
"nursery": {
6+
"noJsxLiterals": {
7+
"level": "on",
8+
"options": {
9+
"noStrings": true,
10+
"allowedStrings": ["allowed"]
11+
}
12+
}
13+
}
14+
}
15+
}
16+
}

crates/biome_js_analyze/tests/specs/nursery/noJsxLiterals/validIgnoreProps.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@
22
<>
33
<Foo bar={"allowed"} />
44
<Foo bar="allowed"></Foo>
5+
<Foo data-testid="allowed" />
6+
<Foo className={'allowed'} />
7+
<Foo bar={`allowed`} />
58
</>

crates/biome_js_analyze/tests/specs/nursery/noJsxLiterals/validIgnoreProps.jsx.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ expression: validIgnoreProps.jsx
88
<>
99
<Foo bar={"allowed"} />
1010
<Foo bar="allowed"></Foo>
11+
<Foo data-testid="allowed" />
12+
<Foo className={'allowed'} />
13+
<Foo bar={`allowed`} />
1114
</>
1215
1316
```

crates/biome_rule_options/src/no_jsx_literals.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ use serde::{Deserialize, Serialize};
44
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
55
#[serde(rename_all = "camelCase", deny_unknown_fields, default)]
66
pub struct NoJsxLiteralsOptions {
7-
/// When enabled, no strings are allowed inside JSX children
7+
/// When enabled, also flag string literals inside JSX expressions and attributes
88
#[serde(default)]
99
pub no_strings: bool,
1010

1111
/// An array of strings that won't trigger the rule. Whitespaces are taken into consideration
12-
#[serde(default)]
1312
pub allowed_strings: Box<[Box<str>]>,
1413

1514
/// When enabled, strings inside props are always ignored

0 commit comments

Comments
 (0)