Skip to content

Commit fd56491

Browse files
authored
Merge pull request #502 from joseph118/feature/500-no-duplicate-dollar-var-default
add `ignoreDefaults` options on no duplicate dollar var rule
2 parents a147cf0 + a703367 commit fd56491

3 files changed

Lines changed: 335 additions & 11 deletions

File tree

src/rules/no-duplicate-dollar-variables/README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,22 @@ A dollar variable is considered a duplicate if it shadows a variable of the same
2424
}
2525
```
2626

27+
A dollar variable is **not** considered a duplicate if it contains the `!default` keyword (see the [Sass documentation](https://sass-lang.com/documentation/variables#default-values)). Two dollar variables are duplicates if they both contain `!default` keyword.
28+
29+
```scss
30+
$a: 1;
31+
$a: 5 !default;
32+
/** ↑
33+
* Not a duplicate */
34+
35+
$b: 1 !default;
36+
$b: 5 !default;
37+
/** ↑
38+
* These are duplicates */
39+
```
40+
41+
42+
2743
## Options
2844

2945
### `true`
@@ -78,6 +94,8 @@ $a: 1;
7894
}
7995
```
8096

97+
___
98+
8199
### `ignoreInside: ["at-rule", "nested-at-rule"]`
82100

83101
#### `"at-rule"`
@@ -129,6 +147,8 @@ $a: 1;
129147
}
130148
```
131149

150+
___
151+
132152
### `ignoreInsideAtRules: ["array", "of", "at-rules"]`
133153

134154
Ignores all variables that are inside specified at-rules.
@@ -156,3 +176,37 @@ $a: 1;
156176
$a: 2;
157177
}
158178
```
179+
180+
___
181+
182+
### `ignoreDefaults: [boolean]`
183+
184+
Ignore all variables containing the `!default` keyword.
185+
186+
Given:
187+
188+
```json
189+
{ "ignoreDefaults": true }
190+
```
191+
192+
The following patterns are _not_ considered warnings:
193+
194+
```scss
195+
$a: 5 !default;
196+
$a: $a + 1;
197+
198+
$a: 15 !default;
199+
```
200+
201+
Given:
202+
203+
```json
204+
{ "ignoreDefaults": false }
205+
```
206+
207+
The following patterns are considered warnings:
208+
209+
```scss
210+
$a: 5 !default;
211+
$a: 1;
212+
```

src/rules/no-duplicate-dollar-variables/__tests__/index.js

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,45 @@ testRule(rule, {
9696
}
9797
`,
9898
description: "Two variables in unrelated at-rule scope cases."
99+
},
100+
{
101+
code: `
102+
$a: 1 !default;
103+
$b: 1;
104+
`,
105+
description:
106+
"Two dollar variables with different names and one containing a default."
107+
},
108+
{
109+
code: `
110+
$a: 1 !default;
111+
$a: 1;
112+
`,
113+
description:
114+
"Two dollar variables with same names and one containing a default."
115+
},
116+
{
117+
code: `
118+
$a: 1 !default;
119+
$a: 1;
120+
$b: 1 !default;
121+
$b: 1;
122+
`,
123+
description:
124+
"Two grouped dollar variables and each group contains a default."
125+
},
126+
{
127+
code: `
128+
$a: 1 !default;
129+
$a: 1;
130+
131+
$b: 5;$b: 4 !default;
132+
133+
$c: 6 !default;
134+
$c: $c + 5;
135+
`,
136+
description:
137+
"Three grouped dollar variables and each group contains a default."
99138
}
100139
],
101140

@@ -276,6 +315,47 @@ testRule(rule, {
276315
message: messages.rejected("$ab"),
277316
description:
278317
"Two dollar variables with the same name and multi-level nesting."
318+
},
319+
{
320+
code: `
321+
$a: 1;
322+
$a: 2;
323+
`,
324+
line: 3,
325+
column: 7,
326+
message: messages.rejected("$a"),
327+
description: "Two dollar variables with the same name."
328+
},
329+
{
330+
code: `
331+
$a: 1 !default;
332+
$a: 2 !default;
333+
`,
334+
line: 3,
335+
column: 7,
336+
message: messages.rejected("$a"),
337+
description:
338+
"Two dollar variables with the same name and containing default."
339+
},
340+
{
341+
code: `
342+
$a: 1 !default; $a: 2 !default;
343+
`,
344+
line: 2,
345+
column: 23,
346+
message: messages.rejected("$a"),
347+
description:
348+
"Two dollar variables with the same name on the same line and containing default."
349+
},
350+
{
351+
code: `
352+
$a: 5; $a: 1 !default; $a: 2 !default;
353+
`,
354+
line: 2,
355+
column: 30,
356+
message: messages.rejected("$a"),
357+
description:
358+
"Three dollar variables with the same name on the same line and two contains default."
279359
}
280360
]
281361
});
@@ -945,3 +1025,135 @@ testRule(rule, {
9451025
}
9461026
]
9471027
});
1028+
1029+
testRule(rule, {
1030+
ruleName,
1031+
config: [true, { ignoreDefaults: false }],
1032+
syntax: "scss",
1033+
1034+
accept: [
1035+
{
1036+
code: `
1037+
$a: 1 !default;
1038+
$b: 1;
1039+
`,
1040+
description:
1041+
"Two dollar variables with different names and one containing a default."
1042+
}
1043+
],
1044+
1045+
reject: [
1046+
{
1047+
code: `
1048+
$a: 1 !default;
1049+
$a: 2 !default;
1050+
`,
1051+
line: 3,
1052+
column: 7,
1053+
message: messages.rejected("$a"),
1054+
description: "Two dollar variables with the same name containing default."
1055+
},
1056+
{
1057+
code: `
1058+
$a: 1 !default; $a: 2;
1059+
`,
1060+
line: 2,
1061+
column: 23,
1062+
message: messages.rejected("$a"),
1063+
description:
1064+
"Two dollar variables with the same name on the same line and one variable contains a default."
1065+
},
1066+
{
1067+
code: `
1068+
$a: 1 !default;
1069+
$a: 2;
1070+
`,
1071+
line: 3,
1072+
column: 7,
1073+
message: messages.rejected("$a"),
1074+
description:
1075+
"Two dollar variables with the same name and one containing default."
1076+
}
1077+
]
1078+
});
1079+
1080+
testRule(rule, {
1081+
ruleName,
1082+
config: [true, { ignoreDefaults: true }],
1083+
syntax: "scss",
1084+
1085+
accept: [
1086+
{
1087+
code: `
1088+
$a: 1 !default;
1089+
$b: 1;
1090+
`,
1091+
description:
1092+
"Two dollar variables with different names and one containing a default."
1093+
},
1094+
{
1095+
code: `
1096+
$a: 1 !default;
1097+
$a: 1;
1098+
`,
1099+
description:
1100+
"Two dollar variables with same names and one containing a default."
1101+
},
1102+
{
1103+
code: `
1104+
$a: 1 !default;
1105+
$a: 5 !default;
1106+
$a: 1;
1107+
`,
1108+
description:
1109+
"Three dollar variables with same names and two containing a default."
1110+
},
1111+
{
1112+
code: `
1113+
$a: 1 !default;
1114+
$a: 5 !default;
1115+
$a: 9 !default;
1116+
$a: 1;
1117+
`,
1118+
description:
1119+
"Four dollar variables with same names and three containing a default."
1120+
},
1121+
{
1122+
code: `
1123+
$a: 1 !default;
1124+
$a: 5 !default;
1125+
$a: 9 !default;
1126+
$a: 1;
1127+
1128+
$b: 5;$b: 4 !default;
1129+
1130+
$c: 6 !default;
1131+
$c: $c + 5;
1132+
`,
1133+
description:
1134+
"Three grouped dollar variables and each group contains a default."
1135+
}
1136+
],
1137+
1138+
reject: [
1139+
{
1140+
code: `
1141+
$a: 1;
1142+
$a: 2;
1143+
`,
1144+
line: 3,
1145+
column: 7,
1146+
message: messages.rejected("$a"),
1147+
description: "Two dollar variables with the same name."
1148+
},
1149+
{
1150+
code: `
1151+
$a: 1; $a: 2;
1152+
`,
1153+
line: 2,
1154+
column: 14,
1155+
message: messages.rejected("$a"),
1156+
description: "Two dollar variables with the same name on the same line."
1157+
}
1158+
]
1159+
});

0 commit comments

Comments
 (0)