@thethracian/oxlint-config 0.1.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/LICENSE +5 -0
- package/README.md +17 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/acronym-case.d.ts +5 -0
- package/dist/rules/acronym-case.d.ts.map +1 -0
- package/dist/rules/acronym-case.js +205 -0
- package/dist/rules/acronym-case.js.map +1 -0
- package/dist/rules/acronyms.d.ts +10 -0
- package/dist/rules/acronyms.d.ts.map +1 -0
- package/dist/rules/acronyms.js +1582 -0
- package/dist/rules/acronyms.js.map +1 -0
- package/dist/rules/boolean-prefix.d.ts +6 -0
- package/dist/rules/boolean-prefix.d.ts.map +1 -0
- package/dist/rules/boolean-prefix.js +96 -0
- package/dist/rules/boolean-prefix.js.map +1 -0
- package/dist/rules/camel-case-identifiers.d.ts +14 -0
- package/dist/rules/camel-case-identifiers.d.ts.map +1 -0
- package/dist/rules/camel-case-identifiers.js +68 -0
- package/dist/rules/camel-case-identifiers.js.map +1 -0
- package/dist/rules/char-class.d.ts +18 -0
- package/dist/rules/char-class.d.ts.map +1 -0
- package/dist/rules/char-class.js +29 -0
- package/dist/rules/char-class.js.map +1 -0
- package/dist/rules/max-import-depth.d.ts +6 -0
- package/dist/rules/max-import-depth.d.ts.map +1 -0
- package/dist/rules/max-import-depth.js +29 -0
- package/dist/rules/max-import-depth.js.map +1 -0
- package/dist/rules/max-line-length.d.ts +7 -0
- package/dist/rules/max-line-length.d.ts.map +1 -0
- package/dist/rules/max-line-length.js +15 -0
- package/dist/rules/max-line-length.js.map +1 -0
- package/dist/rules/no-commented-out-code.d.ts +12 -0
- package/dist/rules/no-commented-out-code.d.ts.map +1 -0
- package/dist/rules/no-commented-out-code.js +181 -0
- package/dist/rules/no-commented-out-code.js.map +1 -0
- package/dist/rules/pascal-case-types.d.ts +9 -0
- package/dist/rules/pascal-case-types.d.ts.map +1 -0
- package/dist/rules/pascal-case-types.js +74 -0
- package/dist/rules/pascal-case-types.js.map +1 -0
- package/dist/rules/plugin.d.ts +122 -0
- package/dist/rules/plugin.d.ts.map +1 -0
- package/dist/rules/plugin.js +373 -0
- package/dist/rules/plugin.js.map +1 -0
- package/dist/rules/private-underscore.d.ts +9 -0
- package/dist/rules/private-underscore.d.ts.map +1 -0
- package/dist/rules/private-underscore.js +13 -0
- package/dist/rules/private-underscore.js.map +1 -0
- package/dist/rules/require-file-doc.d.ts +12 -0
- package/dist/rules/require-file-doc.d.ts.map +1 -0
- package/dist/rules/require-file-doc.js +105 -0
- package/dist/rules/require-file-doc.js.map +1 -0
- package/dist/rules/require-function-doc.d.ts +23 -0
- package/dist/rules/require-function-doc.d.ts.map +1 -0
- package/dist/rules/require-function-doc.js +268 -0
- package/dist/rules/require-function-doc.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { CHAR_CLASS, CLS_UPPER, CLS_LOWER } from './char-class.js';
|
|
2
|
+
const isUp = (code) => (CHAR_CLASS[code] & CLS_UPPER) !== 0;
|
|
3
|
+
const isLo = (code) => (CHAR_CLASS[code] & CLS_LOWER) !== 0;
|
|
4
|
+
const isLt = (code) => (CHAR_CLASS[code] & (CLS_UPPER | CLS_LOWER)) !== 0;
|
|
5
|
+
/**
|
|
6
|
+
* Check if a name follows PascalCase convention.
|
|
7
|
+
*/
|
|
8
|
+
export default function isPascalCase(name) {
|
|
9
|
+
const len = name.length;
|
|
10
|
+
if (len === 0) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (!isUp(name.charCodeAt(0))) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (name.indexOf('_') !== -1) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
// Must not be entirely uppercase (that's the constant convention).
|
|
20
|
+
// Digits are fine — only check alphabetic characters.
|
|
21
|
+
let alphaCount = 0;
|
|
22
|
+
let allUpper = true;
|
|
23
|
+
for (let idx = 0; idx < len; idx++) {
|
|
24
|
+
const code = name.charCodeAt(idx);
|
|
25
|
+
if (isLt(code)) {
|
|
26
|
+
alphaCount++;
|
|
27
|
+
if (isLo(code)) {
|
|
28
|
+
allUpper = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return !(allUpper && alphaCount > 1);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert a name to PascalCase.
|
|
36
|
+
*/
|
|
37
|
+
export function toPascalCase(name) {
|
|
38
|
+
if (name.length === 0) {
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
if (name.indexOf('_') !== -1) {
|
|
42
|
+
let start = 0;
|
|
43
|
+
while (start < name.length && name.charCodeAt(start) === 95) {
|
|
44
|
+
start++;
|
|
45
|
+
}
|
|
46
|
+
if (start >= name.length) {
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
49
|
+
let end = start;
|
|
50
|
+
while (end < name.length && name.charCodeAt(end) !== 95) {
|
|
51
|
+
end++;
|
|
52
|
+
}
|
|
53
|
+
let result = name.charAt(start).toUpperCase() + name.slice(start + 1, end).toLowerCase();
|
|
54
|
+
let segStart = end + 1;
|
|
55
|
+
while (segStart < name.length) {
|
|
56
|
+
while (segStart < name.length && name.charCodeAt(segStart) === 95) {
|
|
57
|
+
segStart++;
|
|
58
|
+
}
|
|
59
|
+
if (segStart >= name.length) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
let segEnd = segStart;
|
|
63
|
+
while (segEnd < name.length && name.charCodeAt(segEnd) !== 95) {
|
|
64
|
+
segEnd++;
|
|
65
|
+
}
|
|
66
|
+
result +=
|
|
67
|
+
name.charAt(segStart).toUpperCase() + name.slice(segStart + 1, segEnd).toLowerCase();
|
|
68
|
+
segStart = segEnd + 1;
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=pascal-case-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pascal-case-types.js","sourceRoot":"","sources":["../../src/rules/pascal-case-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Oxlint plugin for The Thracian custom rules.
|
|
3
|
+
*/
|
|
4
|
+
interface NamedNode {
|
|
5
|
+
id?: {
|
|
6
|
+
name: string;
|
|
7
|
+
} | null;
|
|
8
|
+
key?: {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
type Context = {
|
|
13
|
+
report: (descriptor: {
|
|
14
|
+
message: string;
|
|
15
|
+
node: object;
|
|
16
|
+
}) => void;
|
|
17
|
+
filename?: string;
|
|
18
|
+
};
|
|
19
|
+
interface DeclNode extends NamedNode {
|
|
20
|
+
parent?: {
|
|
21
|
+
kind: string;
|
|
22
|
+
};
|
|
23
|
+
init?: {
|
|
24
|
+
type: string;
|
|
25
|
+
value: unknown;
|
|
26
|
+
};
|
|
27
|
+
typeAnnotation?: {
|
|
28
|
+
typeAnnotation: {
|
|
29
|
+
type: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
accessibility?: string;
|
|
33
|
+
type?: string;
|
|
34
|
+
value?: {
|
|
35
|
+
name: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
interface ImportNode {
|
|
39
|
+
source?: {
|
|
40
|
+
value: string;
|
|
41
|
+
raw: string;
|
|
42
|
+
} | null;
|
|
43
|
+
arguments?: Array<{
|
|
44
|
+
value: string;
|
|
45
|
+
}>;
|
|
46
|
+
callee?: {
|
|
47
|
+
name: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
declare const plugin: {
|
|
51
|
+
meta: {
|
|
52
|
+
name: string;
|
|
53
|
+
};
|
|
54
|
+
rules: {
|
|
55
|
+
'no-commented-out-code': {
|
|
56
|
+
create(context: Context): {
|
|
57
|
+
Program(node: object): void;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
'pascal-case-types': {
|
|
61
|
+
create(context: Context): {
|
|
62
|
+
ClassDeclaration(node: NamedNode): void;
|
|
63
|
+
TSInterfaceDeclaration(node: NamedNode): void;
|
|
64
|
+
TSTypeAliasDeclaration(node: NamedNode): void;
|
|
65
|
+
TSEnumDeclaration(node: NamedNode): void;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
'camel-case-identifiers': {
|
|
69
|
+
create(context: Context): {
|
|
70
|
+
VariableDeclarator(node: DeclNode): void;
|
|
71
|
+
FunctionDeclaration(node: NamedNode): void;
|
|
72
|
+
Parameter(node: DeclNode): void;
|
|
73
|
+
MethodDefinition(node: NamedNode): void;
|
|
74
|
+
PropertyDefinition(node: NamedNode): void;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
'boolean-prefix': {
|
|
78
|
+
create(context: Context): {
|
|
79
|
+
VariableDeclarator(node: DeclNode): void;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
'private-underscore': {
|
|
83
|
+
create(context: Context): {
|
|
84
|
+
PropertyDefinition(node: DeclNode): void;
|
|
85
|
+
MethodDefinition(node: DeclNode): void;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
'acronym-case': {
|
|
89
|
+
create(context: Context): {
|
|
90
|
+
VariableDeclarator(node: NamedNode): void;
|
|
91
|
+
FunctionDeclaration(node: NamedNode): void;
|
|
92
|
+
ClassDeclaration(node: NamedNode): void;
|
|
93
|
+
MethodDefinition(node: NamedNode): void;
|
|
94
|
+
PropertyDefinition(node: NamedNode): void;
|
|
95
|
+
Parameter(node: DeclNode): void;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
'max-import-depth': {
|
|
99
|
+
create(context: Context): {
|
|
100
|
+
ImportDeclaration(node: ImportNode): void;
|
|
101
|
+
CallExpression(node: ImportNode): void;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
'max-line-length': {
|
|
105
|
+
create(context: Context): {
|
|
106
|
+
Program(node: object): void;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
'require-file-doc': {
|
|
110
|
+
create(context: Context): {
|
|
111
|
+
Program(node: object): void;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
'require-function-doc': {
|
|
115
|
+
create(context: Context): {
|
|
116
|
+
Program(node: object): void;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
export default plugin;
|
|
122
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/rules/plugin.ts"],"names":[],"mappings":"AAYA;;GAEG;AAEH,UAAU,SAAS;IACjB,EAAE,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,CAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAiFF,UAAU,QAAS,SAAQ,SAAS;IAClC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IACxC,cAAc,CAAC,EAAE;QAAE,cAAc,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1B;AAsKD,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AA8HD,QAAA,MAAM,MAAM;;;;;;4BA7XM,OAAO;8BAEL,MAAM;;;;4BA2CR,OAAO;uCASI,SAAS;6CAKH,SAAS;6CAKT,SAAS;wCAKd,SAAS;;;;4BAmBrB,OAAO;yCAEM,QAAQ;0CAsBP,SAAS;gCAQnB,QAAQ;uCAQD,SAAS;yCAQP,SAAS;;;;4BAatB,OAAO;yCAgBM,QAAQ;;;;4BAgBrB,OAAO;yCAEM,QAAQ;uCAQV,QAAQ;;;;4BAanB,OAAO;yCAaM,SAAS;0CAKR,SAAS;uCAKZ,SAAS;uCAKT,SAAS;yCAKP,SAAS;gCAKlB,QAAQ;;;;4BAgBZ,OAAO;wCAcK,UAAU;qCAKb,UAAU;;;;4BAenB,OAAO;8BAEL,MAAM;;;;4BAwBR,OAAO;8BAEL,MAAM;;;;4BA8BR,OAAO;8BAEL,MAAM;;;;CA6CzB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import isCommentedOutCode from './no-commented-out-code.js';
|
|
3
|
+
import isPascalCase, { toPascalCase } from './pascal-case-types.js';
|
|
4
|
+
import { isCamelCase, isUpperCase, toCamelCase } from './camel-case-identifiers.js';
|
|
5
|
+
import hasBooleanPrefix, { suggestBooleanName } from './boolean-prefix.js';
|
|
6
|
+
import hasLeadingUnderscore, { suggestPrivateName } from './private-underscore.js';
|
|
7
|
+
import findMisCasedAcronyms, { fixAcronymCase } from './acronym-case.js';
|
|
8
|
+
import findLongLines from './max-line-length.js';
|
|
9
|
+
import countImportDepth from './max-import-depth.js';
|
|
10
|
+
import hasRequiredFileDoc from './require-file-doc.js';
|
|
11
|
+
import hasRequiredFunctionDocs from './require-function-doc.js';
|
|
12
|
+
const noCommentedOutCodeRule = {
|
|
13
|
+
create(context) {
|
|
14
|
+
return {
|
|
15
|
+
Program(node) {
|
|
16
|
+
if (!context.filename) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
let source = undefined;
|
|
20
|
+
try {
|
|
21
|
+
source = readFileSync(context.filename, 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!source) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const lines = source.split('\n');
|
|
30
|
+
const singleLineRe = /\/\/\s*(.+)$/;
|
|
31
|
+
for (let idx = 0; idx < lines.length; idx++) {
|
|
32
|
+
const match = singleLineRe.exec(lines[idx]);
|
|
33
|
+
if (match && isCommentedOutCode(match[1])) {
|
|
34
|
+
context.report({
|
|
35
|
+
message: 'Remove this commented-out code instead of leaving it dead.',
|
|
36
|
+
node,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const multiLineRe = /\/\*\s*([\s\S]*?)\s*\*\//g;
|
|
41
|
+
let mm = null;
|
|
42
|
+
while ((mm = multiLineRe.exec(source)) !== null) {
|
|
43
|
+
const [, body] = mm;
|
|
44
|
+
if (isCommentedOutCode(body)) {
|
|
45
|
+
context.report({
|
|
46
|
+
message: 'Remove this commented-out code instead of leaving it dead.',
|
|
47
|
+
node,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const pascalCaseTypesRule = {
|
|
56
|
+
create(context) {
|
|
57
|
+
function reportType(kind, name, node) {
|
|
58
|
+
context.report({
|
|
59
|
+
message: `Rename ${kind} from '${name}' to '${toPascalCase(name)}' (PascalCase required for types).`,
|
|
60
|
+
node,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
ClassDeclaration(node) {
|
|
65
|
+
if (node.id && !isPascalCase(node.id.name)) {
|
|
66
|
+
reportType('class', node.id.name, node);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
TSInterfaceDeclaration(node) {
|
|
70
|
+
if (node.id && !isPascalCase(node.id.name)) {
|
|
71
|
+
reportType('interface', node.id.name, node);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
TSTypeAliasDeclaration(node) {
|
|
75
|
+
if (node.id && !isPascalCase(node.id.name)) {
|
|
76
|
+
reportType('type', node.id.name, node);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
TSEnumDeclaration(node) {
|
|
80
|
+
if (node.id && !isPascalCase(node.id.name)) {
|
|
81
|
+
reportType('enum', node.id.name, node);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
const camelCaseIdentifiersRule = {
|
|
88
|
+
create(context) {
|
|
89
|
+
return {
|
|
90
|
+
VariableDeclarator(node) {
|
|
91
|
+
if (!node.id) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const { name } = node.id;
|
|
95
|
+
const isConst = node.parent && node.parent.kind === 'const';
|
|
96
|
+
if (isConst) {
|
|
97
|
+
if (!isCamelCase(name) && !isUpperCase(name)) {
|
|
98
|
+
context.report({
|
|
99
|
+
message: `Rename constant '${name}' to '${toCamelCase(name)}' for camelCase, or '${name.toUpperCase()}' for UPPER_CASE convention.`,
|
|
100
|
+
node,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
if (!isCamelCase(name)) {
|
|
106
|
+
context.report({
|
|
107
|
+
message: `Rename variable '${name}' to '${toCamelCase(name)}' (camelCase required).`,
|
|
108
|
+
node,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
FunctionDeclaration(node) {
|
|
114
|
+
if (node.id && !isCamelCase(node.id.name)) {
|
|
115
|
+
context.report({
|
|
116
|
+
message: `Rename function '${node.id.name}' to '${toCamelCase(node.id.name)}' (camelCase required).`,
|
|
117
|
+
node,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
Parameter(node) {
|
|
122
|
+
if (node.type === 'Identifier' && node.value && !isCamelCase(node.value.name)) {
|
|
123
|
+
context.report({
|
|
124
|
+
message: `Rename parameter '${node.value.name}' to '${toCamelCase(node.value.name)}' (camelCase required).`,
|
|
125
|
+
node,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
MethodDefinition(node) {
|
|
130
|
+
if (node.key && !isCamelCase(node.key.name)) {
|
|
131
|
+
context.report({
|
|
132
|
+
message: `Rename method '${node.key.name}' to '${toCamelCase(node.key.name)}' (camelCase required).`,
|
|
133
|
+
node,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
PropertyDefinition(node) {
|
|
138
|
+
if (node.key && !isCamelCase(node.key.name)) {
|
|
139
|
+
context.report({
|
|
140
|
+
message: `Rename property '${node.key.name}' to '${toCamelCase(node.key.name)}' (camelCase required).`,
|
|
141
|
+
node,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
const booleanPrefixRule = {
|
|
149
|
+
create(context) {
|
|
150
|
+
function isBooleanVar(node) {
|
|
151
|
+
if (node.typeAnnotation &&
|
|
152
|
+
node.typeAnnotation.typeAnnotation &&
|
|
153
|
+
node.typeAnnotation.typeAnnotation.type === 'TSBooleanKeyword') {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
if (node.init && node.init.type === 'Literal' && typeof node.init.value === 'boolean') {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
VariableDeclarator(node) {
|
|
163
|
+
if (!node.id) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (isBooleanVar(node) && !hasBooleanPrefix(node.id.name)) {
|
|
167
|
+
context.report({
|
|
168
|
+
message: `Rename boolean '${node.id.name}' to '${suggestBooleanName(node.id.name)}' (is_/has_/should_ prefix required for boolean variables).`,
|
|
169
|
+
node,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
const privateUnderscoreRule = {
|
|
177
|
+
create(context) {
|
|
178
|
+
return {
|
|
179
|
+
PropertyDefinition(node) {
|
|
180
|
+
if (node.key && node.accessibility === 'private' && !hasLeadingUnderscore(node.key.name)) {
|
|
181
|
+
context.report({
|
|
182
|
+
message: `Rename private property '${node.key.name}' to '${suggestPrivateName(node.key.name)}' (leading underscore required for private members).`,
|
|
183
|
+
node,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
MethodDefinition(node) {
|
|
188
|
+
if (node.key && node.accessibility === 'private' && !hasLeadingUnderscore(node.key.name)) {
|
|
189
|
+
context.report({
|
|
190
|
+
message: `Rename private method '${node.key.name}' to '${suggestPrivateName(node.key.name)}' (leading underscore required for private members).`,
|
|
191
|
+
node,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
const acronymCaseRule = {
|
|
199
|
+
create(context) {
|
|
200
|
+
function checkAcronyms(name, node) {
|
|
201
|
+
const violations = findMisCasedAcronyms(name);
|
|
202
|
+
if (violations.length > 0) {
|
|
203
|
+
const listed = violations.map((acr) => `'${acr}'`).join(', ');
|
|
204
|
+
context.report({
|
|
205
|
+
message: `Rename '${name}' to '${fixAcronymCase(name)}' — acronym${violations.length > 1 ? 's' : ''} ${listed} must be uppercase.`,
|
|
206
|
+
node,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
VariableDeclarator(node) {
|
|
212
|
+
if (node.id) {
|
|
213
|
+
checkAcronyms(node.id.name, node);
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
FunctionDeclaration(node) {
|
|
217
|
+
if (node.id) {
|
|
218
|
+
checkAcronyms(node.id.name, node);
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
ClassDeclaration(node) {
|
|
222
|
+
if (node.id) {
|
|
223
|
+
checkAcronyms(node.id.name, node);
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
MethodDefinition(node) {
|
|
227
|
+
if (node.key) {
|
|
228
|
+
checkAcronyms(node.key.name, node);
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
PropertyDefinition(node) {
|
|
232
|
+
if (node.key) {
|
|
233
|
+
checkAcronyms(node.key.name, node);
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
Parameter(node) {
|
|
237
|
+
if (node.type === 'Identifier' && node.value) {
|
|
238
|
+
checkAcronyms(node.value.name, node);
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
const maxImportDepthRule = {
|
|
245
|
+
create(context) {
|
|
246
|
+
const MAX_DEPTH = 4;
|
|
247
|
+
function checkPath(importPath, node) {
|
|
248
|
+
const depth = countImportDepth(importPath);
|
|
249
|
+
if (depth > MAX_DEPTH) {
|
|
250
|
+
context.report({
|
|
251
|
+
message: `Import path depth ${depth} exceeds maximum of ${MAX_DEPTH} (found '${importPath}'). Use a flatter directory structure or path alias.`,
|
|
252
|
+
node,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
ImportDeclaration(node) {
|
|
258
|
+
if (node.source?.value) {
|
|
259
|
+
checkPath(node.source.value, node);
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
CallExpression(node) {
|
|
263
|
+
if (node.callee?.name === 'require' &&
|
|
264
|
+
node.arguments &&
|
|
265
|
+
node.arguments.length > 0 &&
|
|
266
|
+
typeof node.arguments[0].value === 'string') {
|
|
267
|
+
checkPath(node.arguments[0].value, node);
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
const maxLineLengthRule = {
|
|
274
|
+
create(context) {
|
|
275
|
+
return {
|
|
276
|
+
Program(node) {
|
|
277
|
+
if (!context.filename) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
let source = '';
|
|
281
|
+
try {
|
|
282
|
+
source = readFileSync(context.filename, 'utf-8');
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
for (const violation of findLongLines(source)) {
|
|
288
|
+
context.report({
|
|
289
|
+
message: `Line ${violation.line} has ${violation.length} characters, exceeding the maximum of 150.`,
|
|
290
|
+
node,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
const requireFileDocRule = {
|
|
298
|
+
create(context) {
|
|
299
|
+
return {
|
|
300
|
+
Program(node) {
|
|
301
|
+
if (!context.filename) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
let source = '';
|
|
305
|
+
try {
|
|
306
|
+
source = readFileSync(context.filename, 'utf-8');
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
if (source === '') {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (!hasRequiredFileDoc(source)) {
|
|
315
|
+
context.report({
|
|
316
|
+
message: 'File must have a JSDoc header comment (' +
|
|
317
|
+
'/** ... */)' +
|
|
318
|
+
' describing its purpose. Use // @internal to opt out for internal modules.',
|
|
319
|
+
node,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
},
|
|
325
|
+
};
|
|
326
|
+
const requireFunctionDocRule = {
|
|
327
|
+
create(context) {
|
|
328
|
+
return {
|
|
329
|
+
Program(node) {
|
|
330
|
+
if (!context.filename) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
let source = '';
|
|
334
|
+
try {
|
|
335
|
+
source = readFileSync(context.filename, 'utf-8');
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (source === '') {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (!hasRequiredFunctionDocs(source)) {
|
|
344
|
+
context.report({
|
|
345
|
+
message: 'Missing JSDoc on an exported declaration. Every public function, class, type, ' +
|
|
346
|
+
'interface, enum, and const must have a non-empty /** ... */ JSDoc comment with ' +
|
|
347
|
+
'a description of its purpose, parameters, return value, and error conditions.',
|
|
348
|
+
node,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
const plugin = {
|
|
356
|
+
meta: {
|
|
357
|
+
name: 'thethracian',
|
|
358
|
+
},
|
|
359
|
+
rules: {
|
|
360
|
+
'no-commented-out-code': noCommentedOutCodeRule,
|
|
361
|
+
'pascal-case-types': pascalCaseTypesRule,
|
|
362
|
+
'camel-case-identifiers': camelCaseIdentifiersRule,
|
|
363
|
+
'boolean-prefix': booleanPrefixRule,
|
|
364
|
+
'private-underscore': privateUnderscoreRule,
|
|
365
|
+
'acronym-case': acronymCaseRule,
|
|
366
|
+
'max-import-depth': maxImportDepthRule,
|
|
367
|
+
'max-line-length': maxLineLengthRule,
|
|
368
|
+
'require-file-doc': requireFileDocRule,
|
|
369
|
+
'require-function-doc': requireFunctionDocRule,
|
|
370
|
+
},
|
|
371
|
+
};
|
|
372
|
+
export default plugin;
|
|
373
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/rules/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a name has a leading underscore (private member convention).
|
|
3
|
+
*/
|
|
4
|
+
export default function hasLeadingUnderscore(name: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Suggest a private-underscore-prefixed name.
|
|
7
|
+
*/
|
|
8
|
+
export declare function suggestPrivateName(name: string): string;
|
|
9
|
+
//# sourceMappingURL=private-underscore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private-underscore.d.ts","sourceRoot":"","sources":["../../src/rules/private-underscore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a name has a leading underscore (private member convention).
|
|
3
|
+
*/
|
|
4
|
+
export default function hasLeadingUnderscore(name) {
|
|
5
|
+
return name.length > 1 && name.charCodeAt(0) === 95;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Suggest a private-underscore-prefixed name.
|
|
9
|
+
*/
|
|
10
|
+
export function suggestPrivateName(name) {
|
|
11
|
+
return name.length === 0 ? '_field' : `_${name}`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=private-underscore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private-underscore.js","sourceRoot":"","sources":["../../src/rules/private-underscore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAY;IACvD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the JSDoc file header comment from source text.
|
|
3
|
+
* Skips leading shebang lines and whitespace.
|
|
4
|
+
* Returns the full JSDoc block or null.
|
|
5
|
+
*/
|
|
6
|
+
export declare function extractDocHeader(source: string): string | null;
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the source file satisfies the file doc requirement.
|
|
9
|
+
* Requires: JSDoc header, opt-out marker, or empty/whitespace-only.
|
|
10
|
+
*/
|
|
11
|
+
export default function hasRequiredFileDoc(source: string): boolean;
|
|
12
|
+
//# sourceMappingURL=require-file-doc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-file-doc.d.ts","sourceRoot":"","sources":["../../src/rules/require-file-doc.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2C9D;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsDlE"}
|