@so1ve/eslint-plugin 0.36.1 → 0.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +231 -27
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +231 -27
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4,16 +4,16 @@ const utils = require('@typescript-eslint/utils');
|
|
|
4
4
|
|
|
5
5
|
const createEslintRule = utils.ESLintUtils.RuleCreator((ruleName) => ruleName);
|
|
6
6
|
|
|
7
|
-
const RULE_NAME$
|
|
7
|
+
const RULE_NAME$6 = "generic-spacing";
|
|
8
8
|
const genericSpacing = createEslintRule({
|
|
9
|
-
name: RULE_NAME$
|
|
9
|
+
name: RULE_NAME$6,
|
|
10
10
|
meta: {
|
|
11
|
-
type: "
|
|
11
|
+
type: "layout",
|
|
12
12
|
docs: {
|
|
13
13
|
description: "Spaces around generic type parameters",
|
|
14
14
|
recommended: "error"
|
|
15
15
|
},
|
|
16
|
-
fixable: "
|
|
16
|
+
fixable: "whitespace",
|
|
17
17
|
schema: [],
|
|
18
18
|
messages: {
|
|
19
19
|
genericSpacingMismatch: "Generic spaces mismatch"
|
|
@@ -22,6 +22,7 @@ const genericSpacing = createEslintRule({
|
|
|
22
22
|
defaultOptions: [],
|
|
23
23
|
create: (context) => {
|
|
24
24
|
const sourceCode = context.getSourceCode();
|
|
25
|
+
const text = sourceCode.getText();
|
|
25
26
|
return {
|
|
26
27
|
TSTypeParameterDeclaration: (node) => {
|
|
27
28
|
const params = node.params;
|
|
@@ -37,12 +38,12 @@ const genericSpacing = createEslintRule({
|
|
|
37
38
|
node,
|
|
38
39
|
loc: {
|
|
39
40
|
start: {
|
|
40
|
-
line: param.loc.
|
|
41
|
-
column: param.loc.
|
|
41
|
+
line: param.loc.start.line,
|
|
42
|
+
column: param.loc.start.column + 1 - preSpace.length
|
|
42
43
|
},
|
|
43
44
|
end: {
|
|
44
|
-
line: param.loc.
|
|
45
|
-
column: param.loc.
|
|
45
|
+
line: param.loc.start.line,
|
|
46
|
+
column: param.loc.start.column - 1
|
|
46
47
|
}
|
|
47
48
|
},
|
|
48
49
|
messageId: "genericSpacingMismatch",
|
|
@@ -165,14 +166,91 @@ const genericSpacing = createEslintRule({
|
|
|
165
166
|
});
|
|
166
167
|
}
|
|
167
168
|
}
|
|
169
|
+
},
|
|
170
|
+
TSTypeParameterInstantiation: (node) => {
|
|
171
|
+
const params = node.params;
|
|
172
|
+
for (let i = 0; i < params.length; i++) {
|
|
173
|
+
const param = params[i];
|
|
174
|
+
const pre = sourceCode.text.slice(0, param.range[0]);
|
|
175
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
176
|
+
const preComma = pre.match(/(,)\s+$/)?.[0];
|
|
177
|
+
const post = sourceCode.text.slice(param.range[1]);
|
|
178
|
+
const postSpace = post.match(/^(\s*)/)?.[0];
|
|
179
|
+
if (preSpace && preSpace.length && !preComma) {
|
|
180
|
+
context.report({
|
|
181
|
+
node,
|
|
182
|
+
loc: {
|
|
183
|
+
start: {
|
|
184
|
+
line: param.loc.start.line,
|
|
185
|
+
column: param.loc.start.column + 1 - preSpace.length
|
|
186
|
+
},
|
|
187
|
+
end: {
|
|
188
|
+
line: param.loc.start.line,
|
|
189
|
+
column: param.loc.start.column - 1
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
messageId: "genericSpacingMismatch",
|
|
193
|
+
*fix(fixer) {
|
|
194
|
+
yield fixer.replaceTextRange([param.range[0] - preSpace.length, param.range[0]], "");
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (postSpace && postSpace.length) {
|
|
199
|
+
context.report({
|
|
200
|
+
loc: {
|
|
201
|
+
start: {
|
|
202
|
+
line: param.loc.end.line,
|
|
203
|
+
column: param.loc.end.column
|
|
204
|
+
},
|
|
205
|
+
end: {
|
|
206
|
+
line: param.loc.end.line,
|
|
207
|
+
column: param.loc.end.column + postSpace.length
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
node,
|
|
211
|
+
messageId: "genericSpacingMismatch",
|
|
212
|
+
*fix(fixer) {
|
|
213
|
+
yield fixer.replaceTextRange([param.range[1], param.range[1] + postSpace.length], "");
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
TSInterfaceDeclaration: (node) => {
|
|
220
|
+
if (!node.extends || !node.typeParameters) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const { typeParameters } = node;
|
|
224
|
+
const extendsKeywordStart = typeParameters.range[1];
|
|
225
|
+
const extendsKeywordEnd = node.extends[0].range[0];
|
|
226
|
+
const extendsText = text.slice(extendsKeywordStart, extendsKeywordEnd);
|
|
227
|
+
if (!/^\s+/.test(extendsText)) {
|
|
228
|
+
context.report({
|
|
229
|
+
loc: {
|
|
230
|
+
start: {
|
|
231
|
+
line: typeParameters.loc.end.line,
|
|
232
|
+
column: typeParameters.loc.end.column
|
|
233
|
+
},
|
|
234
|
+
end: {
|
|
235
|
+
line: typeParameters.loc.end.line,
|
|
236
|
+
column: typeParameters.loc.end.column + 7
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
node,
|
|
240
|
+
messageId: "genericSpacingMismatch",
|
|
241
|
+
*fix(fixer) {
|
|
242
|
+
yield fixer.replaceTextRange([extendsKeywordStart, extendsKeywordEnd - 8], " ");
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
168
246
|
}
|
|
169
247
|
};
|
|
170
248
|
}
|
|
171
249
|
});
|
|
172
250
|
|
|
173
|
-
const RULE_NAME$
|
|
251
|
+
const RULE_NAME$5 = "import-dedupe";
|
|
174
252
|
const importDedupe = createEslintRule({
|
|
175
|
-
name: RULE_NAME$
|
|
253
|
+
name: RULE_NAME$5,
|
|
176
254
|
meta: {
|
|
177
255
|
type: "problem",
|
|
178
256
|
docs: {
|
|
@@ -220,16 +298,16 @@ const importDedupe = createEslintRule({
|
|
|
220
298
|
}
|
|
221
299
|
});
|
|
222
300
|
|
|
223
|
-
const RULE_NAME$
|
|
301
|
+
const RULE_NAME$4 = "space-between-generic-and-paren";
|
|
224
302
|
const spaceBetweenGenericAndParen = createEslintRule({
|
|
225
|
-
name: RULE_NAME$
|
|
303
|
+
name: RULE_NAME$4,
|
|
226
304
|
meta: {
|
|
227
|
-
type: "
|
|
305
|
+
type: "layout",
|
|
228
306
|
docs: {
|
|
229
307
|
description: "Spaces between generic type parameters and paren",
|
|
230
308
|
recommended: "error"
|
|
231
309
|
},
|
|
232
|
-
fixable: "
|
|
310
|
+
fixable: "whitespace",
|
|
233
311
|
schema: [],
|
|
234
312
|
messages: {
|
|
235
313
|
noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
|
|
@@ -296,16 +374,16 @@ const spaceBetweenGenericAndParen = createEslintRule({
|
|
|
296
374
|
}
|
|
297
375
|
});
|
|
298
376
|
|
|
299
|
-
const RULE_NAME$
|
|
377
|
+
const RULE_NAME$3 = "space-in-empty-block";
|
|
300
378
|
const spaceInEmptyBlock = createEslintRule({
|
|
301
|
-
name: RULE_NAME$
|
|
379
|
+
name: RULE_NAME$3,
|
|
302
380
|
meta: {
|
|
303
|
-
type: "
|
|
381
|
+
type: "layout",
|
|
304
382
|
docs: {
|
|
305
383
|
description: "Disallow spaces in empty block",
|
|
306
384
|
recommended: "error"
|
|
307
385
|
},
|
|
308
|
-
fixable: "
|
|
386
|
+
fixable: "whitespace",
|
|
309
387
|
schema: [],
|
|
310
388
|
messages: {
|
|
311
389
|
noSpaceInEmptyBlock: "Expected no space in empty block"
|
|
@@ -316,7 +394,7 @@ const spaceInEmptyBlock = createEslintRule({
|
|
|
316
394
|
const sourceCode = context.getSourceCode();
|
|
317
395
|
return {
|
|
318
396
|
BlockStatement: (node) => {
|
|
319
|
-
if (node.body.length) {
|
|
397
|
+
if (node.body.length || sourceCode.getCommentsInside(node).length) {
|
|
320
398
|
return;
|
|
321
399
|
}
|
|
322
400
|
const spaceStartRange = node.range[1] - 2;
|
|
@@ -363,16 +441,16 @@ const spaceInEmptyBlock = createEslintRule({
|
|
|
363
441
|
}
|
|
364
442
|
});
|
|
365
443
|
|
|
366
|
-
const RULE_NAME$
|
|
444
|
+
const RULE_NAME$2 = "semi-spacing";
|
|
367
445
|
const semiSpacing = createEslintRule({
|
|
368
|
-
name: RULE_NAME$
|
|
446
|
+
name: RULE_NAME$2,
|
|
369
447
|
meta: {
|
|
370
|
-
type: "
|
|
448
|
+
type: "layout",
|
|
371
449
|
docs: {
|
|
372
450
|
description: "Semicolon spacing",
|
|
373
451
|
recommended: "error"
|
|
374
452
|
},
|
|
375
|
-
fixable: "
|
|
453
|
+
fixable: "whitespace",
|
|
376
454
|
schema: [],
|
|
377
455
|
messages: {
|
|
378
456
|
noSpaceBeforeSemi: "Expected no space before semicolon"
|
|
@@ -412,11 +490,11 @@ const semiSpacing = createEslintRule({
|
|
|
412
490
|
}
|
|
413
491
|
});
|
|
414
492
|
|
|
415
|
-
const RULE_NAME = "no-inline-type-import";
|
|
493
|
+
const RULE_NAME$1 = "no-inline-type-import";
|
|
416
494
|
const noInlineTypeImport = createEslintRule({
|
|
417
|
-
name: RULE_NAME,
|
|
495
|
+
name: RULE_NAME$1,
|
|
418
496
|
meta: {
|
|
419
|
-
type: "
|
|
497
|
+
type: "layout",
|
|
420
498
|
docs: {
|
|
421
499
|
description: "Disallow inline type import",
|
|
422
500
|
recommended: "error"
|
|
@@ -461,6 +539,131 @@ import { ${valueSpecifiersText} } from "${node.source.value}";`);
|
|
|
461
539
|
}
|
|
462
540
|
});
|
|
463
541
|
|
|
542
|
+
const RULE_NAME = "space-before-function-paren";
|
|
543
|
+
const spaceBeforeFunctionParen = createEslintRule({
|
|
544
|
+
name: RULE_NAME,
|
|
545
|
+
meta: {
|
|
546
|
+
type: "layout",
|
|
547
|
+
docs: {
|
|
548
|
+
description: "Enforce consistent spacing before function parenthesis",
|
|
549
|
+
recommended: "error",
|
|
550
|
+
extendsBaseRule: true
|
|
551
|
+
},
|
|
552
|
+
fixable: "whitespace",
|
|
553
|
+
schema: [],
|
|
554
|
+
messages: {
|
|
555
|
+
spaceBeforeFunctionParenMismatch: "Space before function paren mismatch"
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
defaultOptions: [],
|
|
559
|
+
create: (context) => {
|
|
560
|
+
const sourceCode = context.getSourceCode();
|
|
561
|
+
return {
|
|
562
|
+
FunctionDeclaration: (node) => {
|
|
563
|
+
console.log(node);
|
|
564
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
565
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
566
|
+
if (!preSpace || !preSpace.length) {
|
|
567
|
+
context.report({
|
|
568
|
+
node,
|
|
569
|
+
loc: {
|
|
570
|
+
start: node.loc.start,
|
|
571
|
+
end: {
|
|
572
|
+
line: node.loc.start.line,
|
|
573
|
+
column: node.loc.start.column + 1
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
577
|
+
*fix(fixer) {
|
|
578
|
+
yield fixer.insertTextBefore(node, " ");
|
|
579
|
+
}
|
|
580
|
+
});
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
FunctionExpression: (node) => {
|
|
584
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
585
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
586
|
+
if (!preSpace || !preSpace.length) {
|
|
587
|
+
context.report({
|
|
588
|
+
node,
|
|
589
|
+
loc: {
|
|
590
|
+
start: node.loc.start,
|
|
591
|
+
end: {
|
|
592
|
+
line: node.loc.start.line,
|
|
593
|
+
column: node.loc.start.column + 1
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
597
|
+
*fix(fixer) {
|
|
598
|
+
yield fixer.insertTextBefore(node, " ");
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
ArrowFunctionExpression: (node) => {
|
|
604
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
605
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
606
|
+
if (!preSpace || !preSpace.length) {
|
|
607
|
+
context.report({
|
|
608
|
+
node,
|
|
609
|
+
loc: {
|
|
610
|
+
start: node.loc.start,
|
|
611
|
+
end: {
|
|
612
|
+
line: node.loc.start.line,
|
|
613
|
+
column: node.loc.start.column + 1
|
|
614
|
+
}
|
|
615
|
+
},
|
|
616
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
617
|
+
*fix(fixer) {
|
|
618
|
+
yield fixer.insertTextBefore(node, " ");
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
},
|
|
623
|
+
TSDeclareFunction: (node) => {
|
|
624
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
625
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
626
|
+
if (!preSpace || !preSpace.length) {
|
|
627
|
+
context.report({
|
|
628
|
+
node,
|
|
629
|
+
loc: {
|
|
630
|
+
start: node.loc.start,
|
|
631
|
+
end: {
|
|
632
|
+
line: node.loc.start.line,
|
|
633
|
+
column: node.loc.start.column + 1
|
|
634
|
+
}
|
|
635
|
+
},
|
|
636
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
637
|
+
*fix(fixer) {
|
|
638
|
+
yield fixer.insertTextBefore(node, " ");
|
|
639
|
+
}
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
TSTypeReference: (node) => {
|
|
644
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
645
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
646
|
+
if (!preSpace || !preSpace.length) {
|
|
647
|
+
context.report({
|
|
648
|
+
node,
|
|
649
|
+
loc: {
|
|
650
|
+
start: node.loc.start,
|
|
651
|
+
end: {
|
|
652
|
+
line: node.loc.start.line,
|
|
653
|
+
column: node.loc.start.column + 1
|
|
654
|
+
}
|
|
655
|
+
},
|
|
656
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
657
|
+
*fix(fixer) {
|
|
658
|
+
yield fixer.insertTextBefore(node, " ");
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
};
|
|
664
|
+
}
|
|
665
|
+
});
|
|
666
|
+
|
|
464
667
|
const index = {
|
|
465
668
|
rules: {
|
|
466
669
|
"import-dedupe": importDedupe,
|
|
@@ -468,7 +671,8 @@ const index = {
|
|
|
468
671
|
"space-between-generic-and-paren": spaceBetweenGenericAndParen,
|
|
469
672
|
"space-in-empty-block": spaceInEmptyBlock,
|
|
470
673
|
"semi-spacing": semiSpacing,
|
|
471
|
-
"no-inline-type-import": noInlineTypeImport
|
|
674
|
+
"no-inline-type-import": noInlineTypeImport,
|
|
675
|
+
"space-before-function-paren": spaceBeforeFunctionParen
|
|
472
676
|
}
|
|
473
677
|
};
|
|
474
678
|
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ declare const _default: {
|
|
|
8
8
|
"space-in-empty-block": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noSpaceInEmptyBlock", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
|
|
9
9
|
"semi-spacing": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noSpaceBeforeSemi", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
|
|
10
10
|
"no-inline-type-import": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noInlineTypeImport", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
|
|
11
|
+
"space-before-function-paren": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"spaceBeforeFunctionParenMismatch", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
|
package/dist/index.mjs
CHANGED
|
@@ -2,16 +2,16 @@ import { ESLintUtils } from '@typescript-eslint/utils';
|
|
|
2
2
|
|
|
3
3
|
const createEslintRule = ESLintUtils.RuleCreator((ruleName) => ruleName);
|
|
4
4
|
|
|
5
|
-
const RULE_NAME$
|
|
5
|
+
const RULE_NAME$6 = "generic-spacing";
|
|
6
6
|
const genericSpacing = createEslintRule({
|
|
7
|
-
name: RULE_NAME$
|
|
7
|
+
name: RULE_NAME$6,
|
|
8
8
|
meta: {
|
|
9
|
-
type: "
|
|
9
|
+
type: "layout",
|
|
10
10
|
docs: {
|
|
11
11
|
description: "Spaces around generic type parameters",
|
|
12
12
|
recommended: "error"
|
|
13
13
|
},
|
|
14
|
-
fixable: "
|
|
14
|
+
fixable: "whitespace",
|
|
15
15
|
schema: [],
|
|
16
16
|
messages: {
|
|
17
17
|
genericSpacingMismatch: "Generic spaces mismatch"
|
|
@@ -20,6 +20,7 @@ const genericSpacing = createEslintRule({
|
|
|
20
20
|
defaultOptions: [],
|
|
21
21
|
create: (context) => {
|
|
22
22
|
const sourceCode = context.getSourceCode();
|
|
23
|
+
const text = sourceCode.getText();
|
|
23
24
|
return {
|
|
24
25
|
TSTypeParameterDeclaration: (node) => {
|
|
25
26
|
const params = node.params;
|
|
@@ -35,12 +36,12 @@ const genericSpacing = createEslintRule({
|
|
|
35
36
|
node,
|
|
36
37
|
loc: {
|
|
37
38
|
start: {
|
|
38
|
-
line: param.loc.
|
|
39
|
-
column: param.loc.
|
|
39
|
+
line: param.loc.start.line,
|
|
40
|
+
column: param.loc.start.column + 1 - preSpace.length
|
|
40
41
|
},
|
|
41
42
|
end: {
|
|
42
|
-
line: param.loc.
|
|
43
|
-
column: param.loc.
|
|
43
|
+
line: param.loc.start.line,
|
|
44
|
+
column: param.loc.start.column - 1
|
|
44
45
|
}
|
|
45
46
|
},
|
|
46
47
|
messageId: "genericSpacingMismatch",
|
|
@@ -163,14 +164,91 @@ const genericSpacing = createEslintRule({
|
|
|
163
164
|
});
|
|
164
165
|
}
|
|
165
166
|
}
|
|
167
|
+
},
|
|
168
|
+
TSTypeParameterInstantiation: (node) => {
|
|
169
|
+
const params = node.params;
|
|
170
|
+
for (let i = 0; i < params.length; i++) {
|
|
171
|
+
const param = params[i];
|
|
172
|
+
const pre = sourceCode.text.slice(0, param.range[0]);
|
|
173
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
174
|
+
const preComma = pre.match(/(,)\s+$/)?.[0];
|
|
175
|
+
const post = sourceCode.text.slice(param.range[1]);
|
|
176
|
+
const postSpace = post.match(/^(\s*)/)?.[0];
|
|
177
|
+
if (preSpace && preSpace.length && !preComma) {
|
|
178
|
+
context.report({
|
|
179
|
+
node,
|
|
180
|
+
loc: {
|
|
181
|
+
start: {
|
|
182
|
+
line: param.loc.start.line,
|
|
183
|
+
column: param.loc.start.column + 1 - preSpace.length
|
|
184
|
+
},
|
|
185
|
+
end: {
|
|
186
|
+
line: param.loc.start.line,
|
|
187
|
+
column: param.loc.start.column - 1
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
messageId: "genericSpacingMismatch",
|
|
191
|
+
*fix(fixer) {
|
|
192
|
+
yield fixer.replaceTextRange([param.range[0] - preSpace.length, param.range[0]], "");
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (postSpace && postSpace.length) {
|
|
197
|
+
context.report({
|
|
198
|
+
loc: {
|
|
199
|
+
start: {
|
|
200
|
+
line: param.loc.end.line,
|
|
201
|
+
column: param.loc.end.column
|
|
202
|
+
},
|
|
203
|
+
end: {
|
|
204
|
+
line: param.loc.end.line,
|
|
205
|
+
column: param.loc.end.column + postSpace.length
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
node,
|
|
209
|
+
messageId: "genericSpacingMismatch",
|
|
210
|
+
*fix(fixer) {
|
|
211
|
+
yield fixer.replaceTextRange([param.range[1], param.range[1] + postSpace.length], "");
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
TSInterfaceDeclaration: (node) => {
|
|
218
|
+
if (!node.extends || !node.typeParameters) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const { typeParameters } = node;
|
|
222
|
+
const extendsKeywordStart = typeParameters.range[1];
|
|
223
|
+
const extendsKeywordEnd = node.extends[0].range[0];
|
|
224
|
+
const extendsText = text.slice(extendsKeywordStart, extendsKeywordEnd);
|
|
225
|
+
if (!/^\s+/.test(extendsText)) {
|
|
226
|
+
context.report({
|
|
227
|
+
loc: {
|
|
228
|
+
start: {
|
|
229
|
+
line: typeParameters.loc.end.line,
|
|
230
|
+
column: typeParameters.loc.end.column
|
|
231
|
+
},
|
|
232
|
+
end: {
|
|
233
|
+
line: typeParameters.loc.end.line,
|
|
234
|
+
column: typeParameters.loc.end.column + 7
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
node,
|
|
238
|
+
messageId: "genericSpacingMismatch",
|
|
239
|
+
*fix(fixer) {
|
|
240
|
+
yield fixer.replaceTextRange([extendsKeywordStart, extendsKeywordEnd - 8], " ");
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
166
244
|
}
|
|
167
245
|
};
|
|
168
246
|
}
|
|
169
247
|
});
|
|
170
248
|
|
|
171
|
-
const RULE_NAME$
|
|
249
|
+
const RULE_NAME$5 = "import-dedupe";
|
|
172
250
|
const importDedupe = createEslintRule({
|
|
173
|
-
name: RULE_NAME$
|
|
251
|
+
name: RULE_NAME$5,
|
|
174
252
|
meta: {
|
|
175
253
|
type: "problem",
|
|
176
254
|
docs: {
|
|
@@ -218,16 +296,16 @@ const importDedupe = createEslintRule({
|
|
|
218
296
|
}
|
|
219
297
|
});
|
|
220
298
|
|
|
221
|
-
const RULE_NAME$
|
|
299
|
+
const RULE_NAME$4 = "space-between-generic-and-paren";
|
|
222
300
|
const spaceBetweenGenericAndParen = createEslintRule({
|
|
223
|
-
name: RULE_NAME$
|
|
301
|
+
name: RULE_NAME$4,
|
|
224
302
|
meta: {
|
|
225
|
-
type: "
|
|
303
|
+
type: "layout",
|
|
226
304
|
docs: {
|
|
227
305
|
description: "Spaces between generic type parameters and paren",
|
|
228
306
|
recommended: "error"
|
|
229
307
|
},
|
|
230
|
-
fixable: "
|
|
308
|
+
fixable: "whitespace",
|
|
231
309
|
schema: [],
|
|
232
310
|
messages: {
|
|
233
311
|
noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
|
|
@@ -294,16 +372,16 @@ const spaceBetweenGenericAndParen = createEslintRule({
|
|
|
294
372
|
}
|
|
295
373
|
});
|
|
296
374
|
|
|
297
|
-
const RULE_NAME$
|
|
375
|
+
const RULE_NAME$3 = "space-in-empty-block";
|
|
298
376
|
const spaceInEmptyBlock = createEslintRule({
|
|
299
|
-
name: RULE_NAME$
|
|
377
|
+
name: RULE_NAME$3,
|
|
300
378
|
meta: {
|
|
301
|
-
type: "
|
|
379
|
+
type: "layout",
|
|
302
380
|
docs: {
|
|
303
381
|
description: "Disallow spaces in empty block",
|
|
304
382
|
recommended: "error"
|
|
305
383
|
},
|
|
306
|
-
fixable: "
|
|
384
|
+
fixable: "whitespace",
|
|
307
385
|
schema: [],
|
|
308
386
|
messages: {
|
|
309
387
|
noSpaceInEmptyBlock: "Expected no space in empty block"
|
|
@@ -314,7 +392,7 @@ const spaceInEmptyBlock = createEslintRule({
|
|
|
314
392
|
const sourceCode = context.getSourceCode();
|
|
315
393
|
return {
|
|
316
394
|
BlockStatement: (node) => {
|
|
317
|
-
if (node.body.length) {
|
|
395
|
+
if (node.body.length || sourceCode.getCommentsInside(node).length) {
|
|
318
396
|
return;
|
|
319
397
|
}
|
|
320
398
|
const spaceStartRange = node.range[1] - 2;
|
|
@@ -361,16 +439,16 @@ const spaceInEmptyBlock = createEslintRule({
|
|
|
361
439
|
}
|
|
362
440
|
});
|
|
363
441
|
|
|
364
|
-
const RULE_NAME$
|
|
442
|
+
const RULE_NAME$2 = "semi-spacing";
|
|
365
443
|
const semiSpacing = createEslintRule({
|
|
366
|
-
name: RULE_NAME$
|
|
444
|
+
name: RULE_NAME$2,
|
|
367
445
|
meta: {
|
|
368
|
-
type: "
|
|
446
|
+
type: "layout",
|
|
369
447
|
docs: {
|
|
370
448
|
description: "Semicolon spacing",
|
|
371
449
|
recommended: "error"
|
|
372
450
|
},
|
|
373
|
-
fixable: "
|
|
451
|
+
fixable: "whitespace",
|
|
374
452
|
schema: [],
|
|
375
453
|
messages: {
|
|
376
454
|
noSpaceBeforeSemi: "Expected no space before semicolon"
|
|
@@ -410,11 +488,11 @@ const semiSpacing = createEslintRule({
|
|
|
410
488
|
}
|
|
411
489
|
});
|
|
412
490
|
|
|
413
|
-
const RULE_NAME = "no-inline-type-import";
|
|
491
|
+
const RULE_NAME$1 = "no-inline-type-import";
|
|
414
492
|
const noInlineTypeImport = createEslintRule({
|
|
415
|
-
name: RULE_NAME,
|
|
493
|
+
name: RULE_NAME$1,
|
|
416
494
|
meta: {
|
|
417
|
-
type: "
|
|
495
|
+
type: "layout",
|
|
418
496
|
docs: {
|
|
419
497
|
description: "Disallow inline type import",
|
|
420
498
|
recommended: "error"
|
|
@@ -459,6 +537,131 @@ import { ${valueSpecifiersText} } from "${node.source.value}";`);
|
|
|
459
537
|
}
|
|
460
538
|
});
|
|
461
539
|
|
|
540
|
+
const RULE_NAME = "space-before-function-paren";
|
|
541
|
+
const spaceBeforeFunctionParen = createEslintRule({
|
|
542
|
+
name: RULE_NAME,
|
|
543
|
+
meta: {
|
|
544
|
+
type: "layout",
|
|
545
|
+
docs: {
|
|
546
|
+
description: "Enforce consistent spacing before function parenthesis",
|
|
547
|
+
recommended: "error",
|
|
548
|
+
extendsBaseRule: true
|
|
549
|
+
},
|
|
550
|
+
fixable: "whitespace",
|
|
551
|
+
schema: [],
|
|
552
|
+
messages: {
|
|
553
|
+
spaceBeforeFunctionParenMismatch: "Space before function paren mismatch"
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
defaultOptions: [],
|
|
557
|
+
create: (context) => {
|
|
558
|
+
const sourceCode = context.getSourceCode();
|
|
559
|
+
return {
|
|
560
|
+
FunctionDeclaration: (node) => {
|
|
561
|
+
console.log(node);
|
|
562
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
563
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
564
|
+
if (!preSpace || !preSpace.length) {
|
|
565
|
+
context.report({
|
|
566
|
+
node,
|
|
567
|
+
loc: {
|
|
568
|
+
start: node.loc.start,
|
|
569
|
+
end: {
|
|
570
|
+
line: node.loc.start.line,
|
|
571
|
+
column: node.loc.start.column + 1
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
575
|
+
*fix(fixer) {
|
|
576
|
+
yield fixer.insertTextBefore(node, " ");
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
},
|
|
581
|
+
FunctionExpression: (node) => {
|
|
582
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
583
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
584
|
+
if (!preSpace || !preSpace.length) {
|
|
585
|
+
context.report({
|
|
586
|
+
node,
|
|
587
|
+
loc: {
|
|
588
|
+
start: node.loc.start,
|
|
589
|
+
end: {
|
|
590
|
+
line: node.loc.start.line,
|
|
591
|
+
column: node.loc.start.column + 1
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
595
|
+
*fix(fixer) {
|
|
596
|
+
yield fixer.insertTextBefore(node, " ");
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
ArrowFunctionExpression: (node) => {
|
|
602
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
603
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
604
|
+
if (!preSpace || !preSpace.length) {
|
|
605
|
+
context.report({
|
|
606
|
+
node,
|
|
607
|
+
loc: {
|
|
608
|
+
start: node.loc.start,
|
|
609
|
+
end: {
|
|
610
|
+
line: node.loc.start.line,
|
|
611
|
+
column: node.loc.start.column + 1
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
615
|
+
*fix(fixer) {
|
|
616
|
+
yield fixer.insertTextBefore(node, " ");
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
TSDeclareFunction: (node) => {
|
|
622
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
623
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
624
|
+
if (!preSpace || !preSpace.length) {
|
|
625
|
+
context.report({
|
|
626
|
+
node,
|
|
627
|
+
loc: {
|
|
628
|
+
start: node.loc.start,
|
|
629
|
+
end: {
|
|
630
|
+
line: node.loc.start.line,
|
|
631
|
+
column: node.loc.start.column + 1
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
635
|
+
*fix(fixer) {
|
|
636
|
+
yield fixer.insertTextBefore(node, " ");
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
TSTypeReference: (node) => {
|
|
642
|
+
const pre = sourceCode.text.slice(0, node.range[0]);
|
|
643
|
+
const preSpace = pre.match(/(\s+)$/)?.[0];
|
|
644
|
+
if (!preSpace || !preSpace.length) {
|
|
645
|
+
context.report({
|
|
646
|
+
node,
|
|
647
|
+
loc: {
|
|
648
|
+
start: node.loc.start,
|
|
649
|
+
end: {
|
|
650
|
+
line: node.loc.start.line,
|
|
651
|
+
column: node.loc.start.column + 1
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
messageId: "spaceBeforeFunctionParenMismatch",
|
|
655
|
+
*fix(fixer) {
|
|
656
|
+
yield fixer.insertTextBefore(node, " ");
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
|
|
462
665
|
const index = {
|
|
463
666
|
rules: {
|
|
464
667
|
"import-dedupe": importDedupe,
|
|
@@ -466,7 +669,8 @@ const index = {
|
|
|
466
669
|
"space-between-generic-and-paren": spaceBetweenGenericAndParen,
|
|
467
670
|
"space-in-empty-block": spaceInEmptyBlock,
|
|
468
671
|
"semi-spacing": semiSpacing,
|
|
469
|
-
"no-inline-type-import": noInlineTypeImport
|
|
672
|
+
"no-inline-type-import": noInlineTypeImport,
|
|
673
|
+
"space-before-function-paren": spaceBeforeFunctionParen
|
|
470
674
|
}
|
|
471
675
|
};
|
|
472
676
|
|