Skip to content

Commit

Permalink
Merge pull request #502 from joseph118/feature/500-no-duplicate-dolla…
Browse files Browse the repository at this point in the history
…r-var-default

add `ignoreDefaults` options on no duplicate dollar var rule
  • Loading branch information
kristerkari committed Feb 8, 2021
2 parents a147cf0 + a703367 commit fd56491
Show file tree
Hide file tree
Showing 3 changed files with 335 additions and 11 deletions.
54 changes: 54 additions & 0 deletions src/rules/no-duplicate-dollar-variables/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@ A dollar variable is considered a duplicate if it shadows a variable of the same
}
```

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.

```scss
$a: 1;
$a: 5 !default;
/** ↑
* Not a duplicate */

$b: 1 !default;
$b: 5 !default;
/** ↑
* These are duplicates */
```



## Options

### `true`
Expand Down Expand Up @@ -78,6 +94,8 @@ $a: 1;
}
```

___

### `ignoreInside: ["at-rule", "nested-at-rule"]`

#### `"at-rule"`
Expand Down Expand Up @@ -129,6 +147,8 @@ $a: 1;
}
```

___

### `ignoreInsideAtRules: ["array", "of", "at-rules"]`

Ignores all variables that are inside specified at-rules.
Expand Down Expand Up @@ -156,3 +176,37 @@ $a: 1;
$a: 2;
}
```

___

### `ignoreDefaults: [boolean]`

Ignore all variables containing the `!default` keyword.

Given:

```json
{ "ignoreDefaults": true }
```

The following patterns are _not_ considered warnings:

```scss
$a: 5 !default;
$a: $a + 1;

$a: 15 !default;
```

Given:

```json
{ "ignoreDefaults": false }
```

The following patterns are considered warnings:

```scss
$a: 5 !default;
$a: 1;
```
212 changes: 212 additions & 0 deletions src/rules/no-duplicate-dollar-variables/__tests__/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,45 @@ testRule(rule, {
}
`,
description: "Two variables in unrelated at-rule scope cases."
},
{
code: `
$a: 1 !default;
$b: 1;
`,
description:
"Two dollar variables with different names and one containing a default."
},
{
code: `
$a: 1 !default;
$a: 1;
`,
description:
"Two dollar variables with same names and one containing a default."
},
{
code: `
$a: 1 !default;
$a: 1;
$b: 1 !default;
$b: 1;
`,
description:
"Two grouped dollar variables and each group contains a default."
},
{
code: `
$a: 1 !default;
$a: 1;
$b: 5;$b: 4 !default;
$c: 6 !default;
$c: $c + 5;
`,
description:
"Three grouped dollar variables and each group contains a default."
}
],

Expand Down Expand Up @@ -276,6 +315,47 @@ testRule(rule, {
message: messages.rejected("$ab"),
description:
"Two dollar variables with the same name and multi-level nesting."
},
{
code: `
$a: 1;
$a: 2;
`,
line: 3,
column: 7,
message: messages.rejected("$a"),
description: "Two dollar variables with the same name."
},
{
code: `
$a: 1 !default;
$a: 2 !default;
`,
line: 3,
column: 7,
message: messages.rejected("$a"),
description:
"Two dollar variables with the same name and containing default."
},
{
code: `
$a: 1 !default; $a: 2 !default;
`,
line: 2,
column: 23,
message: messages.rejected("$a"),
description:
"Two dollar variables with the same name on the same line and containing default."
},
{
code: `
$a: 5; $a: 1 !default; $a: 2 !default;
`,
line: 2,
column: 30,
message: messages.rejected("$a"),
description:
"Three dollar variables with the same name on the same line and two contains default."
}
]
});
Expand Down Expand Up @@ -945,3 +1025,135 @@ testRule(rule, {
}
]
});

testRule(rule, {
ruleName,
config: [true, { ignoreDefaults: false }],
syntax: "scss",

accept: [
{
code: `
$a: 1 !default;
$b: 1;
`,
description:
"Two dollar variables with different names and one containing a default."
}
],

reject: [
{
code: `
$a: 1 !default;
$a: 2 !default;
`,
line: 3,
column: 7,
message: messages.rejected("$a"),
description: "Two dollar variables with the same name containing default."
},
{
code: `
$a: 1 !default; $a: 2;
`,
line: 2,
column: 23,
message: messages.rejected("$a"),
description:
"Two dollar variables with the same name on the same line and one variable contains a default."
},
{
code: `
$a: 1 !default;
$a: 2;
`,
line: 3,
column: 7,
message: messages.rejected("$a"),
description:
"Two dollar variables with the same name and one containing default."
}
]
});

testRule(rule, {
ruleName,
config: [true, { ignoreDefaults: true }],
syntax: "scss",

accept: [
{
code: `
$a: 1 !default;
$b: 1;
`,
description:
"Two dollar variables with different names and one containing a default."
},
{
code: `
$a: 1 !default;
$a: 1;
`,
description:
"Two dollar variables with same names and one containing a default."
},
{
code: `
$a: 1 !default;
$a: 5 !default;
$a: 1;
`,
description:
"Three dollar variables with same names and two containing a default."
},
{
code: `
$a: 1 !default;
$a: 5 !default;
$a: 9 !default;
$a: 1;
`,
description:
"Four dollar variables with same names and three containing a default."
},
{
code: `
$a: 1 !default;
$a: 5 !default;
$a: 9 !default;
$a: 1;
$b: 5;$b: 4 !default;
$c: 6 !default;
$c: $c + 5;
`,
description:
"Three grouped dollar variables and each group contains a default."
}
],

reject: [
{
code: `
$a: 1;
$a: 2;
`,
line: 3,
column: 7,
message: messages.rejected("$a"),
description: "Two dollar variables with the same name."
},
{
code: `
$a: 1; $a: 2;
`,
line: 2,
column: 14,
message: messages.rejected("$a"),
description: "Two dollar variables with the same name on the same line."
}
]
});
Loading

0 comments on commit fd56491

Please sign in to comment.