@so1ve/eslint-plugin 0.37.0 → 0.38.0

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 CHANGED
@@ -8,12 +8,12 @@ const RULE_NAME$5 = "generic-spacing";
8
8
  const genericSpacing = createEslintRule({
9
9
  name: RULE_NAME$5,
10
10
  meta: {
11
- type: "suggestion",
11
+ type: "layout",
12
12
  docs: {
13
13
  description: "Spaces around generic type parameters",
14
14
  recommended: "error"
15
15
  },
16
- fixable: "code",
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;
@@ -32,7 +33,27 @@ const genericSpacing = createEslintRule({
32
33
  const preComma = pre.match(/(,)\s+$/)?.[0];
33
34
  const post = sourceCode.text.slice(param.range[1]);
34
35
  const postSpace = post.match(/^(\s*)/)?.[0];
35
- if (preSpace && preSpace.length && !preComma) {
36
+ const expectedIndent = node.parent.loc.start.column + 2;
37
+ if (param.loc.start.column !== expectedIndent && param.loc.start.line !== node.parent.loc.start.line) {
38
+ context.report({
39
+ node,
40
+ loc: {
41
+ start: {
42
+ line: param.loc.start.line,
43
+ column: 0
44
+ },
45
+ end: {
46
+ line: param.loc.start.line,
47
+ column: param.loc.start.column - 1
48
+ }
49
+ },
50
+ messageId: "genericSpacingMismatch",
51
+ *fix(fixer) {
52
+ yield fixer.replaceTextRange([param.range[0] + 2 - preSpace.length, param.range[0]], " ".repeat(node.parent.loc.start.column + 2));
53
+ }
54
+ });
55
+ }
56
+ if (preSpace && preSpace.length && !preComma && param.loc.start.line === node.loc.start.line) {
36
57
  context.report({
37
58
  node,
38
59
  loc: {
@@ -47,11 +68,11 @@ const genericSpacing = createEslintRule({
47
68
  },
48
69
  messageId: "genericSpacingMismatch",
49
70
  *fix(fixer) {
50
- yield fixer.replaceTextRange([param.range[0] - preSpace.length, param.range[0]], "");
71
+ yield fixer.removeRange([param.range[0] - preSpace.length, param.range[0]]);
51
72
  }
52
73
  });
53
74
  }
54
- if (postSpace && postSpace.length) {
75
+ if (postSpace && postSpace.length && param.loc.end.line === node.loc.end.line) {
55
76
  context.report({
56
77
  loc: {
57
78
  start: {
@@ -81,7 +102,7 @@ const genericSpacing = createEslintRule({
81
102
  node,
82
103
  messageId: "genericSpacingMismatch",
83
104
  *fix(fixer) {
84
- yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], "");
105
+ yield fixer.removeRange([node.range[0] - preSpace.length, node.range[0]]);
85
106
  }
86
107
  });
87
108
  }
@@ -90,7 +111,7 @@ const genericSpacing = createEslintRule({
90
111
  node,
91
112
  messageId: "genericSpacingMismatch",
92
113
  *fix(fixer) {
93
- yield fixer.replaceTextRange([node.range[1], node.range[1] + postBracket.length - 1], "");
114
+ yield fixer.removeRange([node.range[1], node.range[1] + postBracket.length - 1]);
94
115
  }
95
116
  });
96
117
  }
@@ -219,7 +240,6 @@ const genericSpacing = createEslintRule({
219
240
  if (!node.extends || !node.typeParameters) {
220
241
  return;
221
242
  }
222
- const text = sourceCode.getText();
223
243
  const { typeParameters } = node;
224
244
  const extendsKeywordStart = typeParameters.range[1];
225
245
  const extendsKeywordEnd = node.extends[0].range[0];
@@ -302,12 +322,12 @@ const RULE_NAME$3 = "space-between-generic-and-paren";
302
322
  const spaceBetweenGenericAndParen = createEslintRule({
303
323
  name: RULE_NAME$3,
304
324
  meta: {
305
- type: "suggestion",
325
+ type: "layout",
306
326
  docs: {
307
327
  description: "Spaces between generic type parameters and paren",
308
328
  recommended: "error"
309
329
  },
310
- fixable: "code",
330
+ fixable: "whitespace",
311
331
  schema: [],
312
332
  messages: {
313
333
  noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
@@ -378,12 +398,12 @@ const RULE_NAME$2 = "space-in-empty-block";
378
398
  const spaceInEmptyBlock = createEslintRule({
379
399
  name: RULE_NAME$2,
380
400
  meta: {
381
- type: "suggestion",
401
+ type: "layout",
382
402
  docs: {
383
403
  description: "Disallow spaces in empty block",
384
404
  recommended: "error"
385
405
  },
386
- fixable: "code",
406
+ fixable: "whitespace",
387
407
  schema: [],
388
408
  messages: {
389
409
  noSpaceInEmptyBlock: "Expected no space in empty block"
@@ -394,7 +414,7 @@ const spaceInEmptyBlock = createEslintRule({
394
414
  const sourceCode = context.getSourceCode();
395
415
  return {
396
416
  BlockStatement: (node) => {
397
- if (node.body.length) {
417
+ if (node.body.length || sourceCode.getCommentsInside(node).length) {
398
418
  return;
399
419
  }
400
420
  const spaceStartRange = node.range[1] - 2;
@@ -445,12 +465,12 @@ const RULE_NAME$1 = "semi-spacing";
445
465
  const semiSpacing = createEslintRule({
446
466
  name: RULE_NAME$1,
447
467
  meta: {
448
- type: "suggestion",
468
+ type: "layout",
449
469
  docs: {
450
470
  description: "Semicolon spacing",
451
471
  recommended: "error"
452
472
  },
453
- fixable: "code",
473
+ fixable: "whitespace",
454
474
  schema: [],
455
475
  messages: {
456
476
  noSpaceBeforeSemi: "Expected no space before semicolon"
@@ -494,7 +514,7 @@ const RULE_NAME = "no-inline-type-import";
494
514
  const noInlineTypeImport = createEslintRule({
495
515
  name: RULE_NAME,
496
516
  meta: {
497
- type: "suggestion",
517
+ type: "layout",
498
518
  docs: {
499
519
  description: "Disallow inline type import",
500
520
  recommended: "error"
package/dist/index.mjs CHANGED
@@ -6,12 +6,12 @@ const RULE_NAME$5 = "generic-spacing";
6
6
  const genericSpacing = createEslintRule({
7
7
  name: RULE_NAME$5,
8
8
  meta: {
9
- type: "suggestion",
9
+ type: "layout",
10
10
  docs: {
11
11
  description: "Spaces around generic type parameters",
12
12
  recommended: "error"
13
13
  },
14
- fixable: "code",
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;
@@ -30,7 +31,27 @@ const genericSpacing = createEslintRule({
30
31
  const preComma = pre.match(/(,)\s+$/)?.[0];
31
32
  const post = sourceCode.text.slice(param.range[1]);
32
33
  const postSpace = post.match(/^(\s*)/)?.[0];
33
- if (preSpace && preSpace.length && !preComma) {
34
+ const expectedIndent = node.parent.loc.start.column + 2;
35
+ if (param.loc.start.column !== expectedIndent && param.loc.start.line !== node.parent.loc.start.line) {
36
+ context.report({
37
+ node,
38
+ loc: {
39
+ start: {
40
+ line: param.loc.start.line,
41
+ column: 0
42
+ },
43
+ end: {
44
+ line: param.loc.start.line,
45
+ column: param.loc.start.column - 1
46
+ }
47
+ },
48
+ messageId: "genericSpacingMismatch",
49
+ *fix(fixer) {
50
+ yield fixer.replaceTextRange([param.range[0] + 2 - preSpace.length, param.range[0]], " ".repeat(node.parent.loc.start.column + 2));
51
+ }
52
+ });
53
+ }
54
+ if (preSpace && preSpace.length && !preComma && param.loc.start.line === node.loc.start.line) {
34
55
  context.report({
35
56
  node,
36
57
  loc: {
@@ -45,11 +66,11 @@ const genericSpacing = createEslintRule({
45
66
  },
46
67
  messageId: "genericSpacingMismatch",
47
68
  *fix(fixer) {
48
- yield fixer.replaceTextRange([param.range[0] - preSpace.length, param.range[0]], "");
69
+ yield fixer.removeRange([param.range[0] - preSpace.length, param.range[0]]);
49
70
  }
50
71
  });
51
72
  }
52
- if (postSpace && postSpace.length) {
73
+ if (postSpace && postSpace.length && param.loc.end.line === node.loc.end.line) {
53
74
  context.report({
54
75
  loc: {
55
76
  start: {
@@ -79,7 +100,7 @@ const genericSpacing = createEslintRule({
79
100
  node,
80
101
  messageId: "genericSpacingMismatch",
81
102
  *fix(fixer) {
82
- yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], "");
103
+ yield fixer.removeRange([node.range[0] - preSpace.length, node.range[0]]);
83
104
  }
84
105
  });
85
106
  }
@@ -88,7 +109,7 @@ const genericSpacing = createEslintRule({
88
109
  node,
89
110
  messageId: "genericSpacingMismatch",
90
111
  *fix(fixer) {
91
- yield fixer.replaceTextRange([node.range[1], node.range[1] + postBracket.length - 1], "");
112
+ yield fixer.removeRange([node.range[1], node.range[1] + postBracket.length - 1]);
92
113
  }
93
114
  });
94
115
  }
@@ -217,7 +238,6 @@ const genericSpacing = createEslintRule({
217
238
  if (!node.extends || !node.typeParameters) {
218
239
  return;
219
240
  }
220
- const text = sourceCode.getText();
221
241
  const { typeParameters } = node;
222
242
  const extendsKeywordStart = typeParameters.range[1];
223
243
  const extendsKeywordEnd = node.extends[0].range[0];
@@ -300,12 +320,12 @@ const RULE_NAME$3 = "space-between-generic-and-paren";
300
320
  const spaceBetweenGenericAndParen = createEslintRule({
301
321
  name: RULE_NAME$3,
302
322
  meta: {
303
- type: "suggestion",
323
+ type: "layout",
304
324
  docs: {
305
325
  description: "Spaces between generic type parameters and paren",
306
326
  recommended: "error"
307
327
  },
308
- fixable: "code",
328
+ fixable: "whitespace",
309
329
  schema: [],
310
330
  messages: {
311
331
  noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
@@ -376,12 +396,12 @@ const RULE_NAME$2 = "space-in-empty-block";
376
396
  const spaceInEmptyBlock = createEslintRule({
377
397
  name: RULE_NAME$2,
378
398
  meta: {
379
- type: "suggestion",
399
+ type: "layout",
380
400
  docs: {
381
401
  description: "Disallow spaces in empty block",
382
402
  recommended: "error"
383
403
  },
384
- fixable: "code",
404
+ fixable: "whitespace",
385
405
  schema: [],
386
406
  messages: {
387
407
  noSpaceInEmptyBlock: "Expected no space in empty block"
@@ -392,7 +412,7 @@ const spaceInEmptyBlock = createEslintRule({
392
412
  const sourceCode = context.getSourceCode();
393
413
  return {
394
414
  BlockStatement: (node) => {
395
- if (node.body.length) {
415
+ if (node.body.length || sourceCode.getCommentsInside(node).length) {
396
416
  return;
397
417
  }
398
418
  const spaceStartRange = node.range[1] - 2;
@@ -443,12 +463,12 @@ const RULE_NAME$1 = "semi-spacing";
443
463
  const semiSpacing = createEslintRule({
444
464
  name: RULE_NAME$1,
445
465
  meta: {
446
- type: "suggestion",
466
+ type: "layout",
447
467
  docs: {
448
468
  description: "Semicolon spacing",
449
469
  recommended: "error"
450
470
  },
451
- fixable: "code",
471
+ fixable: "whitespace",
452
472
  schema: [],
453
473
  messages: {
454
474
  noSpaceBeforeSemi: "Expected no space before semicolon"
@@ -492,7 +512,7 @@ const RULE_NAME = "no-inline-type-import";
492
512
  const noInlineTypeImport = createEslintRule({
493
513
  name: RULE_NAME,
494
514
  meta: {
495
- type: "suggestion",
515
+ type: "layout",
496
516
  docs: {
497
517
  description: "Disallow inline type import",
498
518
  recommended: "error"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@so1ve/eslint-plugin",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
5
5
  "contributors": [
6
6
  {