@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.
Files changed (59) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +17 -0
  3. package/dist/index.d.ts +86 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +84 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/rules/acronym-case.d.ts +5 -0
  8. package/dist/rules/acronym-case.d.ts.map +1 -0
  9. package/dist/rules/acronym-case.js +205 -0
  10. package/dist/rules/acronym-case.js.map +1 -0
  11. package/dist/rules/acronyms.d.ts +10 -0
  12. package/dist/rules/acronyms.d.ts.map +1 -0
  13. package/dist/rules/acronyms.js +1582 -0
  14. package/dist/rules/acronyms.js.map +1 -0
  15. package/dist/rules/boolean-prefix.d.ts +6 -0
  16. package/dist/rules/boolean-prefix.d.ts.map +1 -0
  17. package/dist/rules/boolean-prefix.js +96 -0
  18. package/dist/rules/boolean-prefix.js.map +1 -0
  19. package/dist/rules/camel-case-identifiers.d.ts +14 -0
  20. package/dist/rules/camel-case-identifiers.d.ts.map +1 -0
  21. package/dist/rules/camel-case-identifiers.js +68 -0
  22. package/dist/rules/camel-case-identifiers.js.map +1 -0
  23. package/dist/rules/char-class.d.ts +18 -0
  24. package/dist/rules/char-class.d.ts.map +1 -0
  25. package/dist/rules/char-class.js +29 -0
  26. package/dist/rules/char-class.js.map +1 -0
  27. package/dist/rules/max-import-depth.d.ts +6 -0
  28. package/dist/rules/max-import-depth.d.ts.map +1 -0
  29. package/dist/rules/max-import-depth.js +29 -0
  30. package/dist/rules/max-import-depth.js.map +1 -0
  31. package/dist/rules/max-line-length.d.ts +7 -0
  32. package/dist/rules/max-line-length.d.ts.map +1 -0
  33. package/dist/rules/max-line-length.js +15 -0
  34. package/dist/rules/max-line-length.js.map +1 -0
  35. package/dist/rules/no-commented-out-code.d.ts +12 -0
  36. package/dist/rules/no-commented-out-code.d.ts.map +1 -0
  37. package/dist/rules/no-commented-out-code.js +181 -0
  38. package/dist/rules/no-commented-out-code.js.map +1 -0
  39. package/dist/rules/pascal-case-types.d.ts +9 -0
  40. package/dist/rules/pascal-case-types.d.ts.map +1 -0
  41. package/dist/rules/pascal-case-types.js +74 -0
  42. package/dist/rules/pascal-case-types.js.map +1 -0
  43. package/dist/rules/plugin.d.ts +122 -0
  44. package/dist/rules/plugin.d.ts.map +1 -0
  45. package/dist/rules/plugin.js +373 -0
  46. package/dist/rules/plugin.js.map +1 -0
  47. package/dist/rules/private-underscore.d.ts +9 -0
  48. package/dist/rules/private-underscore.d.ts.map +1 -0
  49. package/dist/rules/private-underscore.js +13 -0
  50. package/dist/rules/private-underscore.js.map +1 -0
  51. package/dist/rules/require-file-doc.d.ts +12 -0
  52. package/dist/rules/require-file-doc.d.ts.map +1 -0
  53. package/dist/rules/require-file-doc.js +105 -0
  54. package/dist/rules/require-file-doc.js.map +1 -0
  55. package/dist/rules/require-function-doc.d.ts +23 -0
  56. package/dist/rules/require-function-doc.d.ts.map +1 -0
  57. package/dist/rules/require-function-doc.js +268 -0
  58. package/dist/rules/require-function-doc.js.map +1 -0
  59. 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"}