@definitelytyped/eslint-plugin 0.0.180 → 0.0.181

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/rules/index.d.ts +4 -4
  3. package/dist/rules/index.js +4 -4
  4. package/dist/rules/index.js.map +1 -1
  5. package/dist/rules/no-bad-reference.d.ts +1 -1
  6. package/dist/rules/no-bad-reference.js +7 -9
  7. package/dist/rules/no-bad-reference.js.map +1 -1
  8. package/dist/rules/no-import-of-dev-dependencies.d.ts +2 -0
  9. package/dist/rules/no-import-of-dev-dependencies.js +89 -0
  10. package/dist/rules/no-import-of-dev-dependencies.js.map +1 -0
  11. package/dist/rules/no-old-dt-header.d.ts +2 -0
  12. package/dist/rules/no-old-dt-header.js +37 -0
  13. package/dist/rules/no-old-dt-header.js.map +1 -0
  14. package/dist/rules/no-self-import.d.ts +1 -1
  15. package/dist/rules/no-self-import.js +8 -1
  16. package/dist/rules/no-self-import.js.map +1 -1
  17. package/dist/rules/no-useless-files.js +2 -8
  18. package/dist/rules/no-useless-files.js.map +1 -1
  19. package/dist/util.d.ts +3 -1
  20. package/dist/util.js +9 -1
  21. package/dist/util.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/rules/index.ts +4 -4
  24. package/src/rules/no-bad-reference.ts +9 -13
  25. package/src/rules/no-import-of-dev-dependencies.ts +84 -0
  26. package/src/rules/no-old-dt-header.ts +40 -0
  27. package/src/rules/no-self-import.ts +8 -2
  28. package/src/rules/no-useless-files.ts +3 -9
  29. package/src/util.ts +13 -2
  30. package/test/no-bad-reference.test.ts +68 -0
  31. package/test/no-import-of-dev-dependencies.test.ts +72 -0
  32. package/test/no-old-dt-header.test.ts +71 -0
  33. package/test/no-self-import.test.ts +68 -0
  34. package/tsconfig.tsbuildinfo +1 -1
  35. package/dist/rules/dt-header.d.ts +0 -2
  36. package/dist/rules/dt-header.js +0 -62
  37. package/dist/rules/dt-header.js.map +0 -1
  38. package/dist/rules/no-outside-dependencies.d.ts +0 -2
  39. package/dist/rules/no-outside-dependencies.js +0 -41
  40. package/dist/rules/no-outside-dependencies.js.map +0 -1
  41. package/src/rules/dt-header.ts +0 -74
  42. package/src/rules/no-outside-dependencies.ts +0 -42
  43. package/test/dt-header.test.ts +0 -189
@@ -0,0 +1,40 @@
1
+ import { createRule } from "../util";
2
+
3
+ const rule = createRule({
4
+ name: "no-bad-reference",
5
+ defaultOptions: [],
6
+ meta: {
7
+ type: "problem",
8
+ docs: {
9
+ description: `Forbids <reference path="./vNN"/> in all files, <reference path="../etc"/> in declaration files, and all <reference path> in test files.`,
10
+ recommended: "error",
11
+ },
12
+ messages: {
13
+ noOldDTHeader:
14
+ "Specify package metadata in package.json. Do not use a header like `// Type definitions for foo 1.2`",
15
+ },
16
+ schema: [],
17
+ },
18
+ create(context) {
19
+ const text = context.getSourceCode().text;
20
+ if (
21
+ context.getFilename().endsWith(".d.ts") &&
22
+ text.indexOf("// Type definitions for ") === 0 &&
23
+ text.indexOf("// Definitions by: ") > 0
24
+ ) {
25
+ context.report({
26
+ messageId: "noOldDTHeader",
27
+ loc: {
28
+ start: { column: 0, line: 1 },
29
+ end: {
30
+ column: "// Type definitions for ".length,
31
+ line: 1,
32
+ },
33
+ },
34
+ });
35
+ }
36
+ return {};
37
+ },
38
+ });
39
+
40
+ export = rule;
@@ -1,16 +1,17 @@
1
1
  import { createRule, getTypesPackageForDeclarationFile } from "../util";
2
-
3
2
  const rule = createRule({
4
3
  name: "no-self-import",
5
4
  defaultOptions: [],
6
5
  meta: {
7
6
  type: "problem",
8
7
  docs: {
9
- description: "Forbids declaration files to import the current package using a global import.",
8
+ description:
9
+ "Forbids declaration files to import the current package using a global import or old versions with a relative import.",
10
10
  recommended: "error",
11
11
  },
12
12
  messages: {
13
13
  useRelativeImport: "Declaration file should not use a global import of itself. Use a relative import.",
14
+ useOnlyCurrentVersion: "Don't import an old version of the current package.",
14
15
  },
15
16
  schema: [],
16
17
  },
@@ -25,6 +26,11 @@ const rule = createRule({
25
26
  messageId: "useRelativeImport",
26
27
  node,
27
28
  });
29
+ } else if (node.source.value.match(/^\.\/v\d+(?:\.\d+)?(?:\/.*)?$/)) {
30
+ context.report({
31
+ messageId: "useOnlyCurrentVersion",
32
+ node,
33
+ });
28
34
  }
29
35
  },
30
36
  };
@@ -1,4 +1,4 @@
1
- import { createRule } from "../util";
1
+ import { commentsMatching, createRule } from "../util";
2
2
 
3
3
  const rule = createRule({
4
4
  name: "no-useless-files",
@@ -25,15 +25,9 @@ const rule = createRule({
25
25
  } else {
26
26
  const referenceRegExp = /^\/\s*<reference\s*(types|path)\s*=\s*["|'](.*)["|']/;
27
27
  let noReferenceFound = true;
28
-
29
- for (const comment of comments) {
30
- const referenceMatch = comment.value.match(referenceRegExp)?.[1];
31
- if (!referenceMatch) {
32
- continue;
33
- }
28
+ commentsMatching(context.getSourceCode(), referenceRegExp, () => {
34
29
  noReferenceFound = false;
35
- break;
36
- }
30
+ });
37
31
 
38
32
  if (noReferenceFound) {
39
33
  reportNoContent();
package/src/util.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { unmangleScopedPackage } from "@definitelytyped/utils";
2
- import { ESLintUtils } from "@typescript-eslint/utils";
2
+ import { TSESTree, ESLintUtils } from "@typescript-eslint/utils";
3
3
  import { RuleWithMetaAndName } from "@typescript-eslint/utils/dist/eslint-utils";
4
- import { RuleListener, RuleModule } from "@typescript-eslint/utils/dist/ts-eslint";
4
+ import { RuleListener, RuleModule, SourceCode } from "@typescript-eslint/utils/dist/ts-eslint";
5
5
  import { basename, dirname } from "path";
6
6
 
7
7
  // Possible TS bug can't figure out how to do declaration emit of created rules
@@ -46,3 +46,14 @@ export function isMainFile(fileName: string, allowNested: boolean) {
46
46
  // Allow "types/foo/index.d.ts", not "types/foo/utils/index.d.ts"
47
47
  return basename(dirname(parent)) === "types";
48
48
  }
49
+
50
+ export function commentsMatching(
51
+ sourceFile: Readonly<SourceCode>,
52
+ regex: RegExp,
53
+ f: (match: string, c: TSESTree.Comment) => void
54
+ ): void {
55
+ for (const comment of sourceFile.ast.comments) {
56
+ const m = comment.value.match(regex);
57
+ if (m) f(m[1], comment);
58
+ }
59
+ }
@@ -44,6 +44,66 @@ ruleTester.run("@definitelytyped/no-bad-reference", noBadReference, {
44
44
  ],
45
45
  filename: "types.d.ts",
46
46
  },
47
+ {
48
+ code: `/// <reference path="./v11" />`,
49
+ errors: [
50
+ {
51
+ column: 20,
52
+ endColumn: 25,
53
+ line: 1,
54
+ messageId: "referencePathOldVersion",
55
+ },
56
+ ],
57
+ filename: "types.d.ts",
58
+ },
59
+ {
60
+ code: `/// <reference path="./v11/index" />`,
61
+ errors: [
62
+ {
63
+ column: 20,
64
+ endColumn: 31,
65
+ line: 1,
66
+ messageId: "referencePathOldVersion",
67
+ },
68
+ ],
69
+ filename: "types.d.ts",
70
+ },
71
+ {
72
+ code: `/// <reference path="./v11/subdir/file" />`,
73
+ errors: [
74
+ {
75
+ column: 20,
76
+ endColumn: 37,
77
+ line: 1,
78
+ messageId: "referencePathOldVersion",
79
+ },
80
+ ],
81
+ filename: "types.d.ts",
82
+ },
83
+ {
84
+ code: `/// <reference path="./v0.1" />`,
85
+ errors: [
86
+ {
87
+ column: 20,
88
+ endColumn: 26,
89
+ line: 1,
90
+ messageId: "referencePathOldVersion",
91
+ },
92
+ ],
93
+ filename: "types.d.ts",
94
+ },
95
+ {
96
+ code: `/// <reference path="./v0.1/index" />`,
97
+ errors: [
98
+ {
99
+ column: 20,
100
+ endColumn: 32,
101
+ line: 1,
102
+ messageId: "referencePathOldVersion",
103
+ },
104
+ ],
105
+ filename: "types.d.ts",
106
+ },
47
107
  ],
48
108
  valid: [
49
109
  ``,
@@ -57,6 +117,14 @@ ruleTester.run("@definitelytyped/no-bad-reference", noBadReference, {
57
117
  code: `/// <reference path="./other" />`,
58
118
  filename: "types.d.ts",
59
119
  },
120
+ {
121
+ code: `/// <reference path="./v1gardenpath" />`,
122
+ filename: "types.d.ts",
123
+ },
124
+ {
125
+ code: `/// <reference path="./v1verb/other" />`,
126
+ filename: "types.d.ts",
127
+ },
60
128
  {
61
129
  code: `/// <reference path="other" />
62
130
  /// <reference path="other2" />`,
@@ -0,0 +1,72 @@
1
+ import { ESLintUtils } from "@typescript-eslint/utils";
2
+
3
+ import * as noImportDefaultOfDevDependencies from "../src/rules/no-import-of-dev-dependencies";
4
+
5
+ const ruleTester = new ESLintUtils.RuleTester({
6
+ parser: "@typescript-eslint/parser",
7
+ parserOptions: {
8
+ ecmaVersion: 2018,
9
+ },
10
+ });
11
+
12
+ ruleTester.run("@definitelytyped/no-import-of-dev-dependencies", noImportDefaultOfDevDependencies, {
13
+ invalid: [
14
+ {
15
+ filename: "index.d.ts",
16
+ code: `import eslint from "eslint"`,
17
+ errors: [
18
+ {
19
+ line: 1,
20
+ messageId: "noImportOfDevDependencies",
21
+ },
22
+ ],
23
+ },
24
+ // test @types/ removal
25
+ {
26
+ filename: "index.d.ts",
27
+ code: `import yargs from "yargs"`,
28
+ errors: [
29
+ {
30
+ line: 1,
31
+ messageId: "noImportOfDevDependencies",
32
+ },
33
+ ],
34
+ },
35
+ {
36
+ filename: "index.d.ts",
37
+ code: `/// <reference types="node" />`,
38
+ errors: [
39
+ {
40
+ line: 1,
41
+ messageId: "noReferenceOfDevDependencies",
42
+ },
43
+ ],
44
+ },
45
+ ],
46
+ valid: [
47
+ {
48
+ filename: "index.d.ts",
49
+ code: `import other from 'other'`,
50
+ },
51
+ {
52
+ filename: "types/yargs/index.d.ts",
53
+ code: `import self from "yargs"`,
54
+ },
55
+ {
56
+ filename: "index.d.ts",
57
+ code: `/// <reference types="other"/>`,
58
+ },
59
+ {
60
+ filename: "test.ts",
61
+ code: `import eslint from "eslint"`,
62
+ },
63
+ {
64
+ filename: "test.ts",
65
+ code: `import yargs from "yargs"`,
66
+ },
67
+ {
68
+ filename: "test.ts",
69
+ code: `/// <reference types="node" />`,
70
+ },
71
+ ],
72
+ });
@@ -0,0 +1,71 @@
1
+ import { ESLintUtils } from "@typescript-eslint/utils";
2
+
3
+ import * as noOldDtHeader from "../src/rules/no-old-dt-header";
4
+
5
+ const ruleTester = new ESLintUtils.RuleTester({
6
+ parser: "@typescript-eslint/parser",
7
+ });
8
+
9
+ ruleTester.run("@definitelytyped/no-old-dt-header", noOldDtHeader, {
10
+ invalid: [
11
+ {
12
+ code: `// Type definitions for AFRAME 1.2
13
+ // Project: https://aframe.io/
14
+ // Definitions by: Paul Shannon <https://github.com/devpaul>
15
+ // Roberto Ritger <https://github.com/bertoritger>
16
+ // Trygve Wastvedt <https://github.com/twastvedt>
17
+ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
18
+ // TypeScript Version: 4.4
19
+
20
+ /**
21
+ * Extended tests and examples available at https://github.com/devpaul/aframe-experiments.git
22
+ */
23
+
24
+ import * as anime from "animejs";
25
+ import * as three from "three";`,
26
+ errors: [
27
+ {
28
+ column: 1,
29
+ endColumn: 25,
30
+ line: 1,
31
+ messageId: "noOldDTHeader",
32
+ },
33
+ ],
34
+ filename: "index.d.ts",
35
+ },
36
+ {
37
+ code: `// Type definitions for AFRAME 1.2
38
+ // Definitions by: Paul Shannon <https://github.com/devpaul>`,
39
+ errors: [
40
+ {
41
+ column: 1,
42
+ endColumn: 25,
43
+ line: 1,
44
+ messageId: "noOldDTHeader",
45
+ },
46
+ ],
47
+ filename: "types.d.ts",
48
+ },
49
+ ],
50
+ valid: [
51
+ {
52
+ code: `// Type definitions for AFRAME 1.2
53
+ // Definitions by: Paul Shannon <https://github.com/devpaul>`,
54
+ filename: "test.ts",
55
+ },
56
+ {
57
+ code: `// Type definitions for AFRAME 1.2`,
58
+ filename: "types.d.ts",
59
+ },
60
+ {
61
+ code: `// Definitions by: Paul Shannon <https://github.com/devpaul>`,
62
+ filename: "types.d.ts",
63
+ },
64
+ {
65
+ code: `// A line before the old header
66
+ // Type definitions for AFRAME 1.2
67
+ // Definitions by: Paul Shannon <https://github.com/devpaul>`,
68
+ filename: "types.d.ts",
69
+ },
70
+ ],
71
+ });
@@ -28,6 +28,66 @@ ruleTester.run("@definitelytyped/no-self-import", dtHeader, {
28
28
  ],
29
29
  filename: "types/this-package/index.d.ts",
30
30
  },
31
+ {
32
+ code: `import old from "./v11"`,
33
+ errors: [
34
+ {
35
+ column: 1,
36
+ endColumn: 24,
37
+ line: 1,
38
+ messageId: "useOnlyCurrentVersion",
39
+ },
40
+ ],
41
+ filename: "types.d.ts",
42
+ },
43
+ {
44
+ code: `import old from "./v11/index"`,
45
+ errors: [
46
+ {
47
+ column: 1,
48
+ endColumn: 30,
49
+ line: 1,
50
+ messageId: "useOnlyCurrentVersion",
51
+ },
52
+ ],
53
+ filename: "types.d.ts",
54
+ },
55
+ {
56
+ code: `import old from "./v11/subdir/file"`,
57
+ errors: [
58
+ {
59
+ column: 1,
60
+ endColumn: 36,
61
+ line: 1,
62
+ messageId: "useOnlyCurrentVersion",
63
+ },
64
+ ],
65
+ filename: "types.d.ts",
66
+ },
67
+ {
68
+ code: `import old from "./v0.1"`,
69
+ errors: [
70
+ {
71
+ column: 1,
72
+ endColumn: 25,
73
+ line: 1,
74
+ messageId: "useOnlyCurrentVersion",
75
+ },
76
+ ],
77
+ filename: "types.d.ts",
78
+ },
79
+ {
80
+ code: `import old from "./v0.1/index"`,
81
+ errors: [
82
+ {
83
+ column: 1,
84
+ endColumn: 31,
85
+ line: 1,
86
+ messageId: "useOnlyCurrentVersion",
87
+ },
88
+ ],
89
+ filename: "types.d.ts",
90
+ },
31
91
  ],
32
92
  valid: [
33
93
  {
@@ -42,5 +102,13 @@ ruleTester.run("@definitelytyped/no-self-import", dtHeader, {
42
102
  code: `import myself from "this-package";`,
43
103
  filename: "types/grandparent/this-package/index.d.ts",
44
104
  },
105
+ {
106
+ code: `import old from "./v1gardenpath"`,
107
+ filename: "types.d.ts",
108
+ },
109
+ {
110
+ code: `import old from "./v1verb/other"`,
111
+ filename: "types.d.ts",
112
+ },
45
113
  ],
46
114
  });