Skip to content

Commit

Permalink
Add autofix to function-calc-no-unspaced-operator (#5273)
Browse files Browse the repository at this point in the history
  • Loading branch information
doing-art committed May 17, 2021
1 parent 2345a21 commit 3d5725e
Show file tree
Hide file tree
Showing 3 changed files with 199 additions and 9 deletions.
2 changes: 2 additions & 0 deletions lib/rules/function-calc-no-unspaced-operator/README.md
Expand Up @@ -11,6 +11,8 @@ a { top: calc(1px + 2px); }

Before the operator, there must be a single whitespace or a newline plus indentation. After the operator, there must be a single whitespace or a newline.

The [`fix` option](../../../docs/user-guide/usage/options.md#fix) can automatically fix all of the problems reported by this rule.

## Options

### `true`
Expand Down
103 changes: 103 additions & 0 deletions lib/rules/function-calc-no-unspaced-operator/__tests__/index.js
Expand Up @@ -7,6 +7,7 @@ const { messages, ruleName } = require('..');
testRule({
ruleName,
config: [true],
fix: true,

accept: [
{
Expand Down Expand Up @@ -155,235 +156,337 @@ testRule({
reject: [
{
code: 'a { top: calc(1px +\t-1px)}',
fixed: 'a { top: calc(1px + -1px)}',
description: 'tab before sign after operator',
message: messages.expectedAfter('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px + -1px)}',
fixed: 'a { top: calc(1px + -1px)}',
description: 'multiple spaces before sign after operator',
message: messages.expectedAfter('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px+ 2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 18,
},
{
code: 'a { top: cAlC(1px+ 2px); }',
fixed: 'a { top: cAlC(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 18,
},
{
code: 'a { top: CALC(1px+ 2px); }',
fixed: 'a { top: CALC(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 18,
},
{
code: 'a { top: calc(1px + 2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 20,
},
{
code: 'a { top: calc(1px\t+ 2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px + 2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedAfter('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px +\t2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedAfter('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px- 2px); }',
fixed: 'a { top: calc(1px - 2px); }',
message: messages.expectedBefore('-'),
line: 1,
column: 18,
},
{
code: 'a { top: calc(1px* 2); }',
fixed: 'a { top: calc(1px * 2); }',
message: messages.expectedBefore('*'),
line: 1,
column: 18,
},
{
code: 'a { top: calc(1px *2); }',
fixed: 'a { top: calc(1px * 2); }',
message: messages.expectedAfter('*'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px/ 2); }',
fixed: 'a { top: calc(1px / 2); }',
message: messages.expectedBefore('/'),
line: 1,
column: 18,
},
{
code: 'a { top: calc(1px /2); }',
fixed: 'a { top: calc(1px / 2); }',
message: messages.expectedAfter('/'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(calc(1px* 2px) + 3px); }',
fixed: 'a { top: calc(calc(1px * 2px) + 3px); }',
message: messages.expectedBefore('*'),
line: 1,
column: 23,
},
{
code: 'a { top: calc(calc(1px + 2px)* 3px); }',
fixed: 'a { top: calc(calc(1px + 2px) * 3px); }',
message: messages.expectedBefore('*'),
line: 1,
column: 30,
},
{
code: 'a { top: calc(1px +2px); }',
fixed: 'a { top: calc(1px + 2px); }',
message: messages.expectedOperatorBeforeSign('+'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(1px -2px); }',
fixed: 'a { top: calc(1px - 2px); }',
message: messages.expectedOperatorBeforeSign('-'),
line: 1,
column: 19,
},
{
code: 'a { padding: 10px calc(1px +\t-1px)}',
fixed: 'a { padding: 10px calc(1px + -1px)}',
description: 'tab before sign after operator',
message: messages.expectedAfter('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px + -1px)}',
fixed: 'a { padding: 10px calc(1px + -1px)}',
description: 'multiple spaces before sign after operator',
message: messages.expectedAfter('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px+ 2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 27,
},
{
code: 'a { padding: 10px calc(1px + 2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 29,
},
{
code: 'a { padding: 10px calc(1px\t+ 2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedBefore('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px + 2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedAfter('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px +\t2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedAfter('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px- 2px); }',
fixed: 'a { padding: 10px calc(1px - 2px); }',
message: messages.expectedBefore('-'),
line: 1,
column: 27,
},
{
code: 'a { padding: 10px calc(1px* 2); }',
fixed: 'a { padding: 10px calc(1px * 2); }',
message: messages.expectedBefore('*'),
line: 1,
column: 27,
},
{
code: 'a { padding: 10px calc(1px *2); }',
fixed: 'a { padding: 10px calc(1px * 2); }',
message: messages.expectedAfter('*'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px/ 2); }',
fixed: 'a { padding: 10px calc(1px / 2); }',
message: messages.expectedBefore('/'),
line: 1,
column: 27,
},
{
code: 'a { padding: 10px calc(1px /2); }',
fixed: 'a { padding: 10px calc(1px / 2); }',
message: messages.expectedAfter('/'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(calc(1px* 2px) + 3px); }',
fixed: 'a { padding: 10px calc(calc(1px * 2px) + 3px); }',
message: messages.expectedBefore('*'),
line: 1,
column: 32,
},
{
code: 'a { padding: 10px calc(calc(1px + 2px)* 3px); }',
fixed: 'a { padding: 10px calc(calc(1px + 2px) * 3px); }',
message: messages.expectedBefore('*'),
line: 1,
column: 39,
},
{
code: 'a { padding: 10px calc(1px +2px); }',
fixed: 'a { padding: 10px calc(1px + 2px); }',
message: messages.expectedOperatorBeforeSign('+'),
line: 1,
column: 28,
},
{
code: 'a { padding: 10px calc(1px -2px); }',
fixed: 'a { padding: 10px calc(1px - 2px); }',
message: messages.expectedOperatorBeforeSign('-'),
line: 1,
column: 28,
},
{
code: 'a { padding: calc(1rem\t + 1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several whitespace characters before operator starting from space',
message: messages.expectedBefore('+'),
line: 1,
column: 25,
},
{
code: 'a { padding: calc(1rem \t+ 1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several whitespace characters before operator starting from tab',
message: messages.expectedBefore('+'),
line: 1,
column: 26,
},
{
code: 'a { padding: calc(1rem\t\f\r\t+ 1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several incorrect whitespace characters before operator',
message: messages.expectedBefore('+'),
line: 1,
column: 27,
},
{
code: 'a { padding: calc(1rem + \t1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several whitespace characters after operator starting from space',
message: messages.expectedAfter('+'),
line: 1,
column: 24,
},
{
code: 'a { padding: calc(1rem +\t \t1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several whitespace characters after operator starting from tab',
message: messages.expectedAfter('+'),
line: 1,
column: 24,
},
{
code: 'a { padding: calc(1rem +\t\r\f\t1em)}',
fixed: 'a { padding: calc(1rem + 1em)}',
description: 'several incorrect whitespace characters after operator',
message: messages.expectedAfter('+'),
line: 1,
column: 24,
},
{
code: 'a { padding: calc(1rem +\t \t\f\n\f\t1em)}',
fixed: 'a { padding: calc(1rem +\n\f\t1em)}',
description: 'several whitespace characters after operator but before the \\n',
message: messages.expectedAfter('+'),
line: 1,
column: 24,
},
{
code: 'a { padding: calc(1rem + \t\r\n 1em)}',
fixed: 'a { padding: calc(1rem +\r\n 1em)}',
description: 'several whitespace characters after operator but before the \\r\\n',
message: messages.expectedAfter('+'),
line: 1,
column: 24,
},
],
});

testRule({
ruleName,
config: [true],
customSyntax: postcssScss,
fix: true,

reject: [
{
code: 'a { top: calc(100%- #{$foo}); }',
fixed: 'a { top: calc(100% - #{$foo}); }',
message: messages.expectedBefore('-'),
line: 1,
column: 19,
},
{
code: 'a { top: calc(100% *#{$foo}); }',
fixed: 'a { top: calc(100% * #{$foo}); }',
message: messages.expectedAfter('*'),
line: 1,
column: 20,
},
{
code: 'a { top: calc(100% -#{$foo}); }',
fixed: 'a { top: calc(100% - #{$foo}); }',
message: messages.expectedOperatorBeforeSign('-'),
line: 1,
column: 20,
Expand Down

0 comments on commit 3d5725e

Please sign in to comment.