@checkdigit/eslint-plugin 7.13.0-PR.57-b371 → 7.13.0-PR.57-1728
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-mjs/file-path-comment.mjs +69 -65
- package/dist-mjs/no-util.mjs +7 -13
- package/dist-types/file-path-comment.d.ts +3 -5
- package/dist-types/no-util.d.ts +3 -3
- package/package.json +1 -1
- package/src/file-path-comment.ts +70 -68
- package/src/index.ts +1 -1
- package/src/no-util.ts +7 -13
|
@@ -1,85 +1,89 @@
|
|
|
1
1
|
// src/file-path-comment.ts
|
|
2
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
var ruleId = "validate-first-line-path";
|
|
4
|
-
var VALIDATE_FIRST_LINE_PATH = "VALIDATE_FIRST_LINE_PATH";
|
|
5
2
|
var DISABLE_NEXT_LINE = "eslint-disable-next-line";
|
|
6
|
-
var
|
|
7
|
-
var createRule = ESLintUtils.RuleCreator((name) => name);
|
|
8
|
-
var rule = createRule({
|
|
9
|
-
name: ruleId,
|
|
3
|
+
var file_path_comment_default = {
|
|
10
4
|
meta: {
|
|
11
5
|
type: "suggestion",
|
|
12
6
|
docs: {
|
|
13
7
|
description: "Validate that first line of file is a path to the file",
|
|
14
8
|
url: "https://github.com/checkdigit/eslint-plugin"
|
|
15
9
|
},
|
|
16
|
-
fixable: "code"
|
|
17
|
-
schema: [],
|
|
18
|
-
messages: {
|
|
19
|
-
[VALIDATE_FIRST_LINE_PATH]: "First line '{{firstLine}}' is not a valid path to the file."
|
|
20
|
-
}
|
|
10
|
+
fixable: "code"
|
|
21
11
|
},
|
|
22
|
-
defaultOptions: [],
|
|
23
12
|
create(context) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
column: 1
|
|
41
|
-
}
|
|
13
|
+
const firstLine = context.sourceCode.getLines()[0];
|
|
14
|
+
const expectedPath = context.filename.split("src/")[1];
|
|
15
|
+
if (firstLine === void 0 || expectedPath === void 0) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
const firstComment = firstLine.split("// ")[1];
|
|
19
|
+
if (firstComment?.startsWith(DISABLE_NEXT_LINE) === true) {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
if (!firstLine.startsWith("//")) {
|
|
23
|
+
if (firstLine.startsWith("/*")) {
|
|
24
|
+
context.report({
|
|
25
|
+
loc: {
|
|
26
|
+
start: {
|
|
27
|
+
line: 0,
|
|
28
|
+
column: 0
|
|
42
29
|
},
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
30
|
+
end: {
|
|
31
|
+
line: 0,
|
|
32
|
+
column: 1
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
message: "first line cannot be a block comment",
|
|
36
|
+
fix(fixer) {
|
|
37
|
+
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}
|
|
47
38
|
|
|
48
39
|
`);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
} else {
|
|
43
|
+
context.report({
|
|
44
|
+
loc: {
|
|
45
|
+
start: {
|
|
46
|
+
line: 0,
|
|
47
|
+
column: 0
|
|
48
|
+
},
|
|
49
|
+
end: {
|
|
50
|
+
line: 0,
|
|
51
|
+
column: 1
|
|
49
52
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
},
|
|
54
|
+
message: "first line is not a comment with the file path",
|
|
55
|
+
fix(fixer) {
|
|
56
|
+
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}
|
|
57
|
+
|
|
58
|
+
`);
|
|
55
59
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
} else {
|
|
63
|
+
const actualComment = firstLine.split("// ")[1];
|
|
64
|
+
if (expectedPath !== actualComment) {
|
|
65
|
+
context.report({
|
|
66
|
+
loc: {
|
|
67
|
+
start: {
|
|
68
|
+
line: 0,
|
|
69
|
+
column: 0
|
|
70
|
+
},
|
|
71
|
+
end: {
|
|
72
|
+
line: 0,
|
|
73
|
+
column: 1
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
message: "first line is a comment but is not a path to the file",
|
|
77
|
+
fix(fixer) {
|
|
78
|
+
return fixer.replaceTextRange([0, firstLine.length], `// ${expectedPath}`);
|
|
74
79
|
}
|
|
75
|
-
}
|
|
80
|
+
});
|
|
76
81
|
}
|
|
77
|
-
}
|
|
82
|
+
}
|
|
83
|
+
return {};
|
|
78
84
|
}
|
|
79
|
-
}
|
|
80
|
-
var file_path_comment_default = rule;
|
|
85
|
+
};
|
|
81
86
|
export {
|
|
82
|
-
file_path_comment_default as default
|
|
83
|
-
ruleId
|
|
87
|
+
file_path_comment_default as default
|
|
84
88
|
};
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZpbGUtcGF0aC1jb21tZW50LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVVBLElBQU0sb0JBQW9CO0FBRTFCLElBQU8sNEJBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxNQUNiLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxTQUFTO0FBQUEsRUFDWDtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsVUFBTSxZQUFZLFFBQVEsV0FBVyxTQUFTLEVBQUUsQ0FBQztBQUNqRCxVQUFNLGVBQWUsUUFBUSxTQUFTLE1BQU0sTUFBTSxFQUFFLENBQUM7QUFFckQsUUFBSSxjQUFjLFVBQWEsaUJBQWlCLFFBQVc7QUFDekQsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFVBQU0sZUFBZSxVQUFVLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDN0MsUUFBSSxjQUFjLFdBQVcsaUJBQWlCLE1BQU0sTUFBTTtBQUN4RCxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxDQUFDLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDL0IsVUFBSSxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQzlCLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULElBQUksT0FBdUI7QUFDekIsbUJBQU8sTUFBTSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLFlBQVk7QUFBQTtBQUFBLENBQU07QUFBQSxVQUNyRTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULElBQUksT0FBdUI7QUFDekIsbUJBQU8sTUFBTSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLFlBQVk7QUFBQTtBQUFBLENBQU07QUFBQSxVQUNyRTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLE9BQU87QUFDTCxZQUFNLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDOUMsVUFBSSxpQkFBaUIsZUFBZTtBQUNsQyxnQkFBUSxPQUFPO0FBQUEsVUFDYixLQUFLO0FBQUEsWUFDSCxPQUFPO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFlBQ0EsS0FBSztBQUFBLGNBQ0gsTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVCxJQUFJLE9BQXVCO0FBQ3pCLG1CQUFPLE1BQU0saUJBQWlCLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLFlBQVksRUFBRTtBQUFBLFVBQzNFO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist-mjs/no-util.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/no-util.ts
|
|
2
2
|
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
3
|
-
var ruleId = "no-util
|
|
4
|
-
var
|
|
3
|
+
var ruleId = "no-util";
|
|
4
|
+
var NO_UTIL = "NO_UTIL";
|
|
5
5
|
var createRule = ESLintUtils.RuleCreator((name) => name);
|
|
6
6
|
var rule = createRule({
|
|
7
7
|
name: ruleId,
|
|
@@ -12,7 +12,7 @@ var rule = createRule({
|
|
|
12
12
|
},
|
|
13
13
|
schema: [],
|
|
14
14
|
messages: {
|
|
15
|
-
[
|
|
15
|
+
[NO_UTIL]: "File name '{{filename}}' contains banned 'util' pattern."
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
defaultOptions: [],
|
|
@@ -23,17 +23,11 @@ var rule = createRule({
|
|
|
23
23
|
const utilRegex = /(?:^|[-_/])util(?=[-_./]|$)/iu;
|
|
24
24
|
if (utilRegex.test(filename)) {
|
|
25
25
|
context.report({
|
|
26
|
-
messageId:
|
|
26
|
+
messageId: NO_UTIL,
|
|
27
27
|
data: { filename },
|
|
28
28
|
loc: {
|
|
29
|
-
start: {
|
|
30
|
-
|
|
31
|
-
column: 0
|
|
32
|
-
},
|
|
33
|
-
end: {
|
|
34
|
-
line: 0,
|
|
35
|
-
column: 1
|
|
36
|
-
}
|
|
29
|
+
start: { line: 0, column: 0 },
|
|
30
|
+
end: { line: 0, column: 1 }
|
|
37
31
|
}
|
|
38
32
|
});
|
|
39
33
|
}
|
|
@@ -46,4 +40,4 @@ export {
|
|
|
46
40
|
no_util_default as default,
|
|
47
41
|
ruleId
|
|
48
42
|
};
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXV0aWwudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxtQkFBbUI7QUFFckIsSUFBTSxTQUFTO0FBQ3RCLElBQU0sVUFBVTtBQUVoQixJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxJQUFJO0FBRXpELElBQU0sT0FBK0MsV0FBVztBQUFBLEVBQzlELE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULFVBQVU7QUFBQSxNQUNSLENBQUMsT0FBTyxHQUFHO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGdCQUFnQixDQUFDO0FBQUEsRUFDakIsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsVUFBVTtBQUNSLGNBQU0sV0FBVyxRQUFRO0FBQ3pCLGNBQU0sWUFBWTtBQUNsQixZQUFJLFVBQVUsS0FBSyxRQUFRLEdBQUc7QUFDNUIsa0JBQVEsT0FBTztBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsTUFBTSxFQUFFLFNBQVM7QUFBQSxZQUNqQixLQUFLO0FBQUEsY0FDSCxPQUFPLEVBQUUsTUFBTSxHQUFHLFFBQVEsRUFBRTtBQUFBLGNBQzVCLEtBQUssRUFBRSxNQUFNLEdBQUcsUUFBUSxFQUFFO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sa0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
declare const rule: ESLintUtils.RuleModule<typeof VALIDATE_FIRST_LINE_PATH>;
|
|
5
|
-
export default rule;
|
|
1
|
+
import type { Rule } from 'eslint';
|
|
2
|
+
declare const _default: Rule.RuleModule;
|
|
3
|
+
export default _default;
|
package/dist-types/no-util.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
2
|
-
export declare const ruleId = "no-util
|
|
3
|
-
declare const
|
|
4
|
-
declare const rule: ESLintUtils.RuleModule<typeof
|
|
2
|
+
export declare const ruleId = "no-util";
|
|
3
|
+
declare const NO_UTIL = "NO_UTIL";
|
|
4
|
+
declare const rule: ESLintUtils.RuleModule<typeof NO_UTIL>;
|
|
5
5
|
export default rule;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"7.13.0-PR.57-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.13.0-PR.57-1728","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-mjs","!src/**/test/**","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/test/**","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-mjs/**/test/**","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 .","lint:fix":"eslint --max-warnings 0 --fix .","prepare":"","prepublishOnly":"npm run build:dist-types && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@typescript-eslint/type-utils":"^8.23.0","@typescript-eslint/utils":"^8.23.0","http-status-codes":"^2.3.0","ts-api-utils":"^2.0.1"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^6.1.0","@checkdigit/typescript-config":"^9.0.0","@eslint/js":"^9.19.0","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@typescript-eslint/parser":"^8.23.0","@typescript-eslint/rule-tester":"^8.23.0","eslint":"^9.19.0","eslint-config-prettier":"^10.0.1","eslint-import-resolver-typescript":"^3.7.0","eslint-plugin-eslint-plugin":"^6.4.0","eslint-plugin-import":"^2.31.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-no-secrets":"^2.2.1","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"1.0.4","rimraf":"^6.0.1","typescript-eslint":"^8.23.0"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.11"}}
|
package/src/file-path-comment.ts
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
// file-path-comment.ts
|
|
2
2
|
|
|
3
|
+
import type { Rule } from 'eslint';
|
|
4
|
+
|
|
3
5
|
/*
|
|
4
6
|
* Copyright (c) 2021-2025 Check Digit, LLC
|
|
5
7
|
*
|
|
6
8
|
* This code is licensed under the MIT license (see LICENSE.txt for details).
|
|
7
9
|
*/
|
|
8
10
|
|
|
9
|
-
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
10
|
-
|
|
11
|
-
export const ruleId = 'validate-first-line-path';
|
|
12
|
-
const VALIDATE_FIRST_LINE_PATH = 'VALIDATE_FIRST_LINE_PATH';
|
|
13
11
|
const DISABLE_NEXT_LINE = 'eslint-disable-next-line';
|
|
14
|
-
const DISABLED_RULE = 'no-util';
|
|
15
|
-
|
|
16
|
-
const createRule = ESLintUtils.RuleCreator((name) => name);
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
name: ruleId,
|
|
13
|
+
export default {
|
|
20
14
|
meta: {
|
|
21
15
|
type: 'suggestion',
|
|
22
16
|
docs: {
|
|
@@ -24,70 +18,78 @@ const rule: ESLintUtils.RuleModule<typeof VALIDATE_FIRST_LINE_PATH> = createRule
|
|
|
24
18
|
url: 'https://github.com/checkdigit/eslint-plugin',
|
|
25
19
|
},
|
|
26
20
|
fixable: 'code',
|
|
27
|
-
schema: [],
|
|
28
|
-
messages: {
|
|
29
|
-
[VALIDATE_FIRST_LINE_PATH]: "First line '{{firstLine}}' is not a valid path to the file.",
|
|
30
|
-
},
|
|
31
21
|
},
|
|
32
|
-
defaultOptions: [],
|
|
33
22
|
create(context) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
const firstLine = context.sourceCode.getLines()[0];
|
|
24
|
+
const expectedPath = context.filename.split('src/')[1];
|
|
25
|
+
|
|
26
|
+
if (firstLine === undefined || expectedPath === undefined) {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
38
29
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
const firstComment = firstLine.split('// ')[1];
|
|
31
|
+
if (firstComment?.startsWith(DISABLE_NEXT_LINE) === true) {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
end: {
|
|
51
|
-
line: 0,
|
|
52
|
-
column: 1,
|
|
53
|
-
},
|
|
35
|
+
if (!firstLine.startsWith('//')) {
|
|
36
|
+
if (firstLine.startsWith('/*')) {
|
|
37
|
+
context.report({
|
|
38
|
+
loc: {
|
|
39
|
+
start: {
|
|
40
|
+
line: 0,
|
|
41
|
+
column: 0,
|
|
54
42
|
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}\n\n`);
|
|
43
|
+
end: {
|
|
44
|
+
line: 0,
|
|
45
|
+
column: 1,
|
|
59
46
|
},
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
},
|
|
48
|
+
message: 'first line cannot be a block comment',
|
|
49
|
+
fix(fixer: Rule.RuleFixer) {
|
|
50
|
+
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}\n\n`);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
} else {
|
|
54
|
+
context.report({
|
|
55
|
+
loc: {
|
|
56
|
+
start: {
|
|
57
|
+
line: 0,
|
|
58
|
+
column: 0,
|
|
59
|
+
},
|
|
60
|
+
end: {
|
|
61
|
+
line: 0,
|
|
62
|
+
column: 1,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
message: 'first line is not a comment with the file path',
|
|
66
|
+
fix(fixer: Rule.RuleFixer) {
|
|
67
|
+
return fixer.insertTextBeforeRange([0, 0], `// ${expectedPath}\n\n`);
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
const actualComment = firstLine.split('// ')[1];
|
|
73
|
+
if (expectedPath !== actualComment) {
|
|
74
|
+
context.report({
|
|
75
|
+
loc: {
|
|
76
|
+
start: {
|
|
77
|
+
line: 0,
|
|
78
|
+
column: 0,
|
|
79
|
+
},
|
|
80
|
+
end: {
|
|
81
|
+
line: 0,
|
|
82
|
+
column: 1,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
message: 'first line is a comment but is not a path to the file',
|
|
86
|
+
fix(fixer: Rule.RuleFixer) {
|
|
87
|
+
return fixer.replaceTextRange([0, firstLine.length], `// ${expectedPath}`);
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
67
92
|
|
|
68
|
-
|
|
69
|
-
context.report({
|
|
70
|
-
loc: {
|
|
71
|
-
start: {
|
|
72
|
-
line: 0,
|
|
73
|
-
column: 0,
|
|
74
|
-
},
|
|
75
|
-
end: {
|
|
76
|
-
line: 0,
|
|
77
|
-
column: 1,
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
messageId: VALIDATE_FIRST_LINE_PATH,
|
|
81
|
-
data: { firstLine },
|
|
82
|
-
fix(fixer) {
|
|
83
|
-
return fixer.replaceTextRange([0, firstLine.length], `// ${expectedPath}`);
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
};
|
|
93
|
+
return {};
|
|
90
94
|
},
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export default rule;
|
|
95
|
+
} as Rule.RuleModule;
|
package/src/index.ts
CHANGED
|
@@ -32,7 +32,7 @@ import noEnum from './no-enum.ts';
|
|
|
32
32
|
import noSideEffects from './no-side-effects.ts';
|
|
33
33
|
import noRandomV4UUID from './no-random-v4-uuid.ts';
|
|
34
34
|
import noTestImport from './no-test-import.ts';
|
|
35
|
-
import noUtil from './no-util';
|
|
35
|
+
import noUtil from './no-util.ts';
|
|
36
36
|
import noUuid from './no-uuid.ts';
|
|
37
37
|
import noWallabyComment from './no-wallaby-comment.ts';
|
|
38
38
|
import objectLiteralResponse from './object-literal-response.ts';
|
package/src/no-util.ts
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
10
10
|
|
|
11
|
-
export const ruleId = 'no-util
|
|
12
|
-
const
|
|
11
|
+
export const ruleId = 'no-util';
|
|
12
|
+
const NO_UTIL = 'NO_UTIL';
|
|
13
13
|
|
|
14
14
|
const createRule = ESLintUtils.RuleCreator((name) => name);
|
|
15
15
|
|
|
16
|
-
const rule: ESLintUtils.RuleModule<typeof
|
|
16
|
+
const rule: ESLintUtils.RuleModule<typeof NO_UTIL> = createRule({
|
|
17
17
|
name: ruleId,
|
|
18
18
|
meta: {
|
|
19
19
|
type: 'problem',
|
|
@@ -22,7 +22,7 @@ const rule: ESLintUtils.RuleModule<typeof NO_UTIL_FILENAME> = createRule({
|
|
|
22
22
|
},
|
|
23
23
|
schema: [],
|
|
24
24
|
messages: {
|
|
25
|
-
[
|
|
25
|
+
[NO_UTIL]: "File name '{{filename}}' contains banned 'util' pattern.",
|
|
26
26
|
},
|
|
27
27
|
},
|
|
28
28
|
defaultOptions: [],
|
|
@@ -33,17 +33,11 @@ const rule: ESLintUtils.RuleModule<typeof NO_UTIL_FILENAME> = createRule({
|
|
|
33
33
|
const utilRegex = /(?:^|[-_/])util(?=[-_./]|$)/iu;
|
|
34
34
|
if (utilRegex.test(filename)) {
|
|
35
35
|
context.report({
|
|
36
|
-
messageId:
|
|
36
|
+
messageId: NO_UTIL,
|
|
37
37
|
data: { filename },
|
|
38
38
|
loc: {
|
|
39
|
-
start: {
|
|
40
|
-
|
|
41
|
-
column: 0,
|
|
42
|
-
},
|
|
43
|
-
end: {
|
|
44
|
-
line: 0,
|
|
45
|
-
column: 1,
|
|
46
|
-
},
|
|
39
|
+
start: { line: 0, column: 0 },
|
|
40
|
+
end: { line: 0, column: 1 },
|
|
47
41
|
},
|
|
48
42
|
});
|
|
49
43
|
}
|