@so1ve/eslint-plugin 0.37.0 → 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 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$5 = "generic-spacing";
7
+ const RULE_NAME$6 = "generic-spacing";
8
8
  const genericSpacing = createEslintRule({
9
- name: RULE_NAME$5,
9
+ name: RULE_NAME$6,
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;
@@ -219,7 +220,6 @@ const genericSpacing = createEslintRule({
219
220
  if (!node.extends || !node.typeParameters) {
220
221
  return;
221
222
  }
222
- const text = sourceCode.getText();
223
223
  const { typeParameters } = node;
224
224
  const extendsKeywordStart = typeParameters.range[1];
225
225
  const extendsKeywordEnd = node.extends[0].range[0];
@@ -248,9 +248,9 @@ const genericSpacing = createEslintRule({
248
248
  }
249
249
  });
250
250
 
251
- const RULE_NAME$4 = "import-dedupe";
251
+ const RULE_NAME$5 = "import-dedupe";
252
252
  const importDedupe = createEslintRule({
253
- name: RULE_NAME$4,
253
+ name: RULE_NAME$5,
254
254
  meta: {
255
255
  type: "problem",
256
256
  docs: {
@@ -298,16 +298,16 @@ const importDedupe = createEslintRule({
298
298
  }
299
299
  });
300
300
 
301
- const RULE_NAME$3 = "space-between-generic-and-paren";
301
+ const RULE_NAME$4 = "space-between-generic-and-paren";
302
302
  const spaceBetweenGenericAndParen = createEslintRule({
303
- name: RULE_NAME$3,
303
+ name: RULE_NAME$4,
304
304
  meta: {
305
- type: "suggestion",
305
+ type: "layout",
306
306
  docs: {
307
307
  description: "Spaces between generic type parameters and paren",
308
308
  recommended: "error"
309
309
  },
310
- fixable: "code",
310
+ fixable: "whitespace",
311
311
  schema: [],
312
312
  messages: {
313
313
  noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
@@ -374,16 +374,16 @@ const spaceBetweenGenericAndParen = createEslintRule({
374
374
  }
375
375
  });
376
376
 
377
- const RULE_NAME$2 = "space-in-empty-block";
377
+ const RULE_NAME$3 = "space-in-empty-block";
378
378
  const spaceInEmptyBlock = createEslintRule({
379
- name: RULE_NAME$2,
379
+ name: RULE_NAME$3,
380
380
  meta: {
381
- type: "suggestion",
381
+ type: "layout",
382
382
  docs: {
383
383
  description: "Disallow spaces in empty block",
384
384
  recommended: "error"
385
385
  },
386
- fixable: "code",
386
+ fixable: "whitespace",
387
387
  schema: [],
388
388
  messages: {
389
389
  noSpaceInEmptyBlock: "Expected no space in empty block"
@@ -394,7 +394,7 @@ const spaceInEmptyBlock = createEslintRule({
394
394
  const sourceCode = context.getSourceCode();
395
395
  return {
396
396
  BlockStatement: (node) => {
397
- if (node.body.length) {
397
+ if (node.body.length || sourceCode.getCommentsInside(node).length) {
398
398
  return;
399
399
  }
400
400
  const spaceStartRange = node.range[1] - 2;
@@ -441,16 +441,16 @@ const spaceInEmptyBlock = createEslintRule({
441
441
  }
442
442
  });
443
443
 
444
- const RULE_NAME$1 = "semi-spacing";
444
+ const RULE_NAME$2 = "semi-spacing";
445
445
  const semiSpacing = createEslintRule({
446
- name: RULE_NAME$1,
446
+ name: RULE_NAME$2,
447
447
  meta: {
448
- type: "suggestion",
448
+ type: "layout",
449
449
  docs: {
450
450
  description: "Semicolon spacing",
451
451
  recommended: "error"
452
452
  },
453
- fixable: "code",
453
+ fixable: "whitespace",
454
454
  schema: [],
455
455
  messages: {
456
456
  noSpaceBeforeSemi: "Expected no space before semicolon"
@@ -490,11 +490,11 @@ const semiSpacing = createEslintRule({
490
490
  }
491
491
  });
492
492
 
493
- const RULE_NAME = "no-inline-type-import";
493
+ const RULE_NAME$1 = "no-inline-type-import";
494
494
  const noInlineTypeImport = createEslintRule({
495
- name: RULE_NAME,
495
+ name: RULE_NAME$1,
496
496
  meta: {
497
- type: "suggestion",
497
+ type: "layout",
498
498
  docs: {
499
499
  description: "Disallow inline type import",
500
500
  recommended: "error"
@@ -539,6 +539,131 @@ import { ${valueSpecifiersText} } from "${node.source.value}";`);
539
539
  }
540
540
  });
541
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
+
542
667
  const index = {
543
668
  rules: {
544
669
  "import-dedupe": importDedupe,
@@ -546,7 +671,8 @@ const index = {
546
671
  "space-between-generic-and-paren": spaceBetweenGenericAndParen,
547
672
  "space-in-empty-block": spaceInEmptyBlock,
548
673
  "semi-spacing": semiSpacing,
549
- "no-inline-type-import": noInlineTypeImport
674
+ "no-inline-type-import": noInlineTypeImport,
675
+ "space-before-function-paren": spaceBeforeFunctionParen
550
676
  }
551
677
  };
552
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 = "generic-spacing";
5
+ const RULE_NAME$6 = "generic-spacing";
6
6
  const genericSpacing = createEslintRule({
7
- name: RULE_NAME$5,
7
+ name: RULE_NAME$6,
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;
@@ -217,7 +218,6 @@ const genericSpacing = createEslintRule({
217
218
  if (!node.extends || !node.typeParameters) {
218
219
  return;
219
220
  }
220
- const text = sourceCode.getText();
221
221
  const { typeParameters } = node;
222
222
  const extendsKeywordStart = typeParameters.range[1];
223
223
  const extendsKeywordEnd = node.extends[0].range[0];
@@ -246,9 +246,9 @@ const genericSpacing = createEslintRule({
246
246
  }
247
247
  });
248
248
 
249
- const RULE_NAME$4 = "import-dedupe";
249
+ const RULE_NAME$5 = "import-dedupe";
250
250
  const importDedupe = createEslintRule({
251
- name: RULE_NAME$4,
251
+ name: RULE_NAME$5,
252
252
  meta: {
253
253
  type: "problem",
254
254
  docs: {
@@ -296,16 +296,16 @@ const importDedupe = createEslintRule({
296
296
  }
297
297
  });
298
298
 
299
- const RULE_NAME$3 = "space-between-generic-and-paren";
299
+ const RULE_NAME$4 = "space-between-generic-and-paren";
300
300
  const spaceBetweenGenericAndParen = createEslintRule({
301
- name: RULE_NAME$3,
301
+ name: RULE_NAME$4,
302
302
  meta: {
303
- type: "suggestion",
303
+ type: "layout",
304
304
  docs: {
305
305
  description: "Spaces between generic type parameters and paren",
306
306
  recommended: "error"
307
307
  },
308
- fixable: "code",
308
+ fixable: "whitespace",
309
309
  schema: [],
310
310
  messages: {
311
311
  noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
@@ -372,16 +372,16 @@ const spaceBetweenGenericAndParen = createEslintRule({
372
372
  }
373
373
  });
374
374
 
375
- const RULE_NAME$2 = "space-in-empty-block";
375
+ const RULE_NAME$3 = "space-in-empty-block";
376
376
  const spaceInEmptyBlock = createEslintRule({
377
- name: RULE_NAME$2,
377
+ name: RULE_NAME$3,
378
378
  meta: {
379
- type: "suggestion",
379
+ type: "layout",
380
380
  docs: {
381
381
  description: "Disallow spaces in empty block",
382
382
  recommended: "error"
383
383
  },
384
- fixable: "code",
384
+ fixable: "whitespace",
385
385
  schema: [],
386
386
  messages: {
387
387
  noSpaceInEmptyBlock: "Expected no space in empty block"
@@ -392,7 +392,7 @@ const spaceInEmptyBlock = createEslintRule({
392
392
  const sourceCode = context.getSourceCode();
393
393
  return {
394
394
  BlockStatement: (node) => {
395
- if (node.body.length) {
395
+ if (node.body.length || sourceCode.getCommentsInside(node).length) {
396
396
  return;
397
397
  }
398
398
  const spaceStartRange = node.range[1] - 2;
@@ -439,16 +439,16 @@ const spaceInEmptyBlock = createEslintRule({
439
439
  }
440
440
  });
441
441
 
442
- const RULE_NAME$1 = "semi-spacing";
442
+ const RULE_NAME$2 = "semi-spacing";
443
443
  const semiSpacing = createEslintRule({
444
- name: RULE_NAME$1,
444
+ name: RULE_NAME$2,
445
445
  meta: {
446
- type: "suggestion",
446
+ type: "layout",
447
447
  docs: {
448
448
  description: "Semicolon spacing",
449
449
  recommended: "error"
450
450
  },
451
- fixable: "code",
451
+ fixable: "whitespace",
452
452
  schema: [],
453
453
  messages: {
454
454
  noSpaceBeforeSemi: "Expected no space before semicolon"
@@ -488,11 +488,11 @@ const semiSpacing = createEslintRule({
488
488
  }
489
489
  });
490
490
 
491
- const RULE_NAME = "no-inline-type-import";
491
+ const RULE_NAME$1 = "no-inline-type-import";
492
492
  const noInlineTypeImport = createEslintRule({
493
- name: RULE_NAME,
493
+ name: RULE_NAME$1,
494
494
  meta: {
495
- type: "suggestion",
495
+ type: "layout",
496
496
  docs: {
497
497
  description: "Disallow inline type import",
498
498
  recommended: "error"
@@ -537,6 +537,131 @@ import { ${valueSpecifiersText} } from "${node.source.value}";`);
537
537
  }
538
538
  });
539
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
+
540
665
  const index = {
541
666
  rules: {
542
667
  "import-dedupe": importDedupe,
@@ -544,7 +669,8 @@ const index = {
544
669
  "space-between-generic-and-paren": spaceBetweenGenericAndParen,
545
670
  "space-in-empty-block": spaceInEmptyBlock,
546
671
  "semi-spacing": semiSpacing,
547
- "no-inline-type-import": noInlineTypeImport
672
+ "no-inline-type-import": noInlineTypeImport,
673
+ "space-before-function-paren": spaceBeforeFunctionParen
548
674
  }
549
675
  };
550
676
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@so1ve/eslint-plugin",
3
- "version": "0.37.0",
3
+ "version": "0.37.1",
4
4
  "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
5
5
  "contributors": [
6
6
  {