oh-my-claudecode 0.2.4 → 0.2.7
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/README.md +103 -4
- package/commands/necronomicon-bind.md +45 -82
- package/dist/agents/builtin-agents.d.ts.map +1 -1
- package/dist/agents/builtin-agents.js +8 -0
- package/dist/agents/builtin-agents.js.map +1 -1
- package/dist/agents/cthulhu.d.ts.map +1 -1
- package/dist/agents/cthulhu.js +11 -0
- package/dist/agents/cthulhu.js.map +1 -1
- package/dist/agents/dagon.d.ts.map +1 -1
- package/dist/agents/dagon.js +13 -0
- package/dist/agents/dagon.js.map +1 -1
- package/dist/agents/nodens-advanced.d.ts +182 -0
- package/dist/agents/nodens-advanced.d.ts.map +1 -0
- package/dist/agents/nodens-advanced.js +297 -0
- package/dist/agents/nodens-advanced.js.map +1 -0
- package/dist/agents/nodens.d.ts +42 -0
- package/dist/agents/nodens.d.ts.map +1 -0
- package/dist/agents/nodens.js +147 -0
- package/dist/agents/nodens.js.map +1 -0
- package/dist/agents/shoggoth.d.ts.map +1 -1
- package/dist/agents/shoggoth.js +11 -1
- package/dist/agents/shoggoth.js.map +1 -1
- package/dist/cli/bind.d.ts +24 -0
- package/dist/cli/bind.d.ts.map +1 -1
- package/dist/cli/bind.js +92 -25
- package/dist/cli/bind.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -5
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +54 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +28 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/config/schema.d.ts +648 -17
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +21 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/features/web-research-background/advanced-patterns.d.ts +44 -0
- package/dist/features/web-research-background/advanced-patterns.d.ts.map +1 -0
- package/dist/features/web-research-background/advanced-patterns.js +139 -0
- package/dist/features/web-research-background/advanced-patterns.js.map +1 -0
- package/dist/features/web-research-background/index.d.ts +73 -0
- package/dist/features/web-research-background/index.d.ts.map +1 -0
- package/dist/features/web-research-background/index.js +131 -0
- package/dist/features/web-research-background/index.js.map +1 -0
- package/dist/features/yith-archive/functions/opencode-import.d.ts.map +1 -1
- package/dist/features/yith-archive/functions/opencode-import.js +129 -90
- package/dist/features/yith-archive/functions/opencode-import.js.map +1 -1
- package/dist/features/yith-archive/index.d.ts +8 -0
- package/dist/features/yith-archive/index.d.ts.map +1 -1
- package/dist/features/yith-archive/index.js +1 -0
- package/dist/features/yith-archive/index.js.map +1 -1
- package/dist/features/yith-archive/types.d.ts +15 -0
- package/dist/features/yith-archive/types.d.ts.map +1 -1
- package/dist/hooks/design-detector-hook.d.ts +12 -0
- package/dist/hooks/design-detector-hook.d.ts.map +1 -0
- package/dist/hooks/design-detector-hook.js +42 -0
- package/dist/hooks/design-detector-hook.js.map +1 -0
- package/dist/hooks/design-detector.d.ts +47 -0
- package/dist/hooks/design-detector.d.ts.map +1 -0
- package/dist/hooks/design-detector.js +251 -0
- package/dist/hooks/design-detector.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +27 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/web-research-detector.d.ts +58 -0
- package/dist/hooks/web-research-detector.d.ts.map +1 -0
- package/dist/hooks/web-research-detector.js +205 -0
- package/dist/hooks/web-research-detector.js.map +1 -0
- package/dist/hooks/web-research-hook.d.ts +12 -0
- package/dist/hooks/web-research-hook.d.ts.map +1 -0
- package/dist/hooks/web-research-hook.js +43 -0
- package/dist/hooks/web-research-hook.js.map +1 -0
- package/dist/hooks/yith-capture.d.ts +35 -0
- package/dist/hooks/yith-capture.d.ts.map +1 -0
- package/dist/hooks/yith-capture.js +113 -0
- package/dist/hooks/yith-capture.js.map +1 -0
- package/dist/linters/type-safety-ast.d.ts +108 -0
- package/dist/linters/type-safety-ast.d.ts.map +1 -0
- package/dist/linters/type-safety-ast.js +293 -0
- package/dist/linters/type-safety-ast.js.map +1 -0
- package/dist/linters/type-safety-linter.d.ts +66 -0
- package/dist/linters/type-safety-linter.d.ts.map +1 -0
- package/dist/linters/type-safety-linter.js +317 -0
- package/dist/linters/type-safety-linter.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Type Safety Linter
|
|
3
|
+
*
|
|
4
|
+
* Enforces type safety rules via regex patterns.
|
|
5
|
+
* Core rules:
|
|
6
|
+
* 1. TS_ANY_TYPE - ban 'any' type (exception: @ts-safety:allow-any)
|
|
7
|
+
* 2. TS_UNSAFE_CAST - ban unsafe casts like 'as any', 'as unknown' (exception: @ts-safety:allow-cast)
|
|
8
|
+
* 3. TS_IGNORE_WITHOUT_REASON - @ts-ignore must have comment
|
|
9
|
+
* 4. MISSING_RETURN_TYPE - function must have return type (exception: arrow functions with implicit returns)
|
|
10
|
+
* 5. MISSING_PROMISE_TYPE - Promise must have type parameter (exception: Promise<void>)
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Rule identifiers
|
|
14
|
+
*/
|
|
15
|
+
export declare enum TypeSafetyRuleId {
|
|
16
|
+
TS_ANY_TYPE = "TS_ANY_TYPE",
|
|
17
|
+
TS_UNSAFE_CAST = "TS_UNSAFE_CAST",
|
|
18
|
+
TS_IGNORE_WITHOUT_REASON = "TS_IGNORE_WITHOUT_REASON",
|
|
19
|
+
MISSING_RETURN_TYPE = "MISSING_RETURN_TYPE",
|
|
20
|
+
MISSING_PROMISE_TYPE = "MISSING_PROMISE_TYPE"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Severity levels for linting issues
|
|
24
|
+
*/
|
|
25
|
+
export declare enum TypeSafetySeverity {
|
|
26
|
+
ERROR = "error",
|
|
27
|
+
WARN = "warn",
|
|
28
|
+
INFO = "info"
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A type safety issue found by the linter
|
|
32
|
+
*/
|
|
33
|
+
export interface TypeSafetyIssue {
|
|
34
|
+
ruleId: TypeSafetyRuleId;
|
|
35
|
+
message: string;
|
|
36
|
+
line: number;
|
|
37
|
+
column: number;
|
|
38
|
+
severity: TypeSafetySeverity;
|
|
39
|
+
fix?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Configuration for a type safety rule
|
|
43
|
+
*/
|
|
44
|
+
export interface TypeSafetyRule {
|
|
45
|
+
id: TypeSafetyRuleId;
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
severity: TypeSafetySeverity;
|
|
48
|
+
description: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Linter configuration
|
|
52
|
+
*/
|
|
53
|
+
export interface TypeSafetyLinterConfig {
|
|
54
|
+
enabled: boolean;
|
|
55
|
+
rules?: Record<TypeSafetyRuleId, TypeSafetySeverity>;
|
|
56
|
+
ignore_patterns?: string[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Lints a TypeScript file for type safety issues.
|
|
60
|
+
*
|
|
61
|
+
* @param filePath - Path to the TypeScript file
|
|
62
|
+
* @param config - Linter configuration
|
|
63
|
+
* @returns Array of issues found
|
|
64
|
+
*/
|
|
65
|
+
export declare function lintFile(filePath: string, config?: TypeSafetyLinterConfig): TypeSafetyIssue[];
|
|
66
|
+
//# sourceMappingURL=type-safety-linter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-safety-linter.d.ts","sourceRoot":"","sources":["../../src/linters/type-safety-linter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,wBAAwB,6BAA6B;IACrD,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;CAC9C;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,gBAAgB,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;IACpD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAsCD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,sBAAsB,GAAG,eAAe,EAAE,CAgD7F"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Type Safety Linter
|
|
3
|
+
*
|
|
4
|
+
* Enforces type safety rules via regex patterns.
|
|
5
|
+
* Core rules:
|
|
6
|
+
* 1. TS_ANY_TYPE - ban 'any' type (exception: @ts-safety:allow-any)
|
|
7
|
+
* 2. TS_UNSAFE_CAST - ban unsafe casts like 'as any', 'as unknown' (exception: @ts-safety:allow-cast)
|
|
8
|
+
* 3. TS_IGNORE_WITHOUT_REASON - @ts-ignore must have comment
|
|
9
|
+
* 4. MISSING_RETURN_TYPE - function must have return type (exception: arrow functions with implicit returns)
|
|
10
|
+
* 5. MISSING_PROMISE_TYPE - Promise must have type parameter (exception: Promise<void>)
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from "fs";
|
|
13
|
+
/**
|
|
14
|
+
* Rule identifiers
|
|
15
|
+
*/
|
|
16
|
+
export var TypeSafetyRuleId;
|
|
17
|
+
(function (TypeSafetyRuleId) {
|
|
18
|
+
TypeSafetyRuleId["TS_ANY_TYPE"] = "TS_ANY_TYPE";
|
|
19
|
+
TypeSafetyRuleId["TS_UNSAFE_CAST"] = "TS_UNSAFE_CAST";
|
|
20
|
+
TypeSafetyRuleId["TS_IGNORE_WITHOUT_REASON"] = "TS_IGNORE_WITHOUT_REASON";
|
|
21
|
+
TypeSafetyRuleId["MISSING_RETURN_TYPE"] = "MISSING_RETURN_TYPE";
|
|
22
|
+
TypeSafetyRuleId["MISSING_PROMISE_TYPE"] = "MISSING_PROMISE_TYPE";
|
|
23
|
+
})(TypeSafetyRuleId || (TypeSafetyRuleId = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Severity levels for linting issues
|
|
26
|
+
*/
|
|
27
|
+
export var TypeSafetySeverity;
|
|
28
|
+
(function (TypeSafetySeverity) {
|
|
29
|
+
TypeSafetySeverity["ERROR"] = "error";
|
|
30
|
+
TypeSafetySeverity["WARN"] = "warn";
|
|
31
|
+
TypeSafetySeverity["INFO"] = "info";
|
|
32
|
+
})(TypeSafetySeverity || (TypeSafetySeverity = {}));
|
|
33
|
+
/**
|
|
34
|
+
* Core linting rules with patterns and detection logic
|
|
35
|
+
*/
|
|
36
|
+
const DEFAULT_RULES = [
|
|
37
|
+
{
|
|
38
|
+
id: TypeSafetyRuleId.TS_ANY_TYPE,
|
|
39
|
+
enabled: true,
|
|
40
|
+
severity: TypeSafetySeverity.ERROR,
|
|
41
|
+
description: "Disallow 'any' type without @ts-safety:allow-any comment",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: TypeSafetyRuleId.TS_UNSAFE_CAST,
|
|
45
|
+
enabled: true,
|
|
46
|
+
severity: TypeSafetySeverity.ERROR,
|
|
47
|
+
description: "Disallow unsafe casts (as any, as unknown, as Record<...>)",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: TypeSafetyRuleId.TS_IGNORE_WITHOUT_REASON,
|
|
51
|
+
enabled: true,
|
|
52
|
+
severity: TypeSafetySeverity.WARN,
|
|
53
|
+
description: "@ts-ignore must have a reason comment",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: TypeSafetyRuleId.MISSING_RETURN_TYPE,
|
|
57
|
+
enabled: true,
|
|
58
|
+
severity: TypeSafetySeverity.WARN,
|
|
59
|
+
description: "Function must have explicit return type",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: TypeSafetyRuleId.MISSING_PROMISE_TYPE,
|
|
63
|
+
enabled: true,
|
|
64
|
+
severity: TypeSafetySeverity.WARN,
|
|
65
|
+
description: "Promise must have type parameter",
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Lints a TypeScript file for type safety issues.
|
|
70
|
+
*
|
|
71
|
+
* @param filePath - Path to the TypeScript file
|
|
72
|
+
* @param config - Linter configuration
|
|
73
|
+
* @returns Array of issues found
|
|
74
|
+
*/
|
|
75
|
+
export function lintFile(filePath, config) {
|
|
76
|
+
if (!fs.existsSync(filePath)) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
80
|
+
const lines = content.split("\n");
|
|
81
|
+
const issues = [];
|
|
82
|
+
const enabledRules = getEnabledRules(config);
|
|
83
|
+
// Check each line for issues
|
|
84
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
85
|
+
const line = lines[lineIndex];
|
|
86
|
+
const lineNumber = lineIndex + 1;
|
|
87
|
+
// Rule: TS_ANY_TYPE
|
|
88
|
+
if (enabledRules.has(TypeSafetyRuleId.TS_ANY_TYPE)) {
|
|
89
|
+
const anyIssues = checkAnyType(line, lineNumber, lines);
|
|
90
|
+
issues.push(...anyIssues);
|
|
91
|
+
}
|
|
92
|
+
// Rule: TS_UNSAFE_CAST
|
|
93
|
+
if (enabledRules.has(TypeSafetyRuleId.TS_UNSAFE_CAST)) {
|
|
94
|
+
const castIssues = checkUnsafeCast(line, lineNumber, lines);
|
|
95
|
+
issues.push(...castIssues);
|
|
96
|
+
}
|
|
97
|
+
// Rule: TS_IGNORE_WITHOUT_REASON
|
|
98
|
+
if (enabledRules.has(TypeSafetyRuleId.TS_IGNORE_WITHOUT_REASON)) {
|
|
99
|
+
const ignoreIssues = checkTsIgnore(line, lineNumber);
|
|
100
|
+
issues.push(...ignoreIssues);
|
|
101
|
+
}
|
|
102
|
+
// Rule: MISSING_RETURN_TYPE
|
|
103
|
+
if (enabledRules.has(TypeSafetyRuleId.MISSING_RETURN_TYPE)) {
|
|
104
|
+
const returnTypeIssues = checkMissingReturnType(line, lineNumber, lines, lineIndex);
|
|
105
|
+
issues.push(...returnTypeIssues);
|
|
106
|
+
}
|
|
107
|
+
// Rule: MISSING_PROMISE_TYPE
|
|
108
|
+
if (enabledRules.has(TypeSafetyRuleId.MISSING_PROMISE_TYPE)) {
|
|
109
|
+
const promiseIssues = checkPromiseType(line, lineNumber);
|
|
110
|
+
issues.push(...promiseIssues);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return issues;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Gets enabled rules from configuration
|
|
117
|
+
* If no config provided, defaults to all rules enabled
|
|
118
|
+
*/
|
|
119
|
+
function getEnabledRules(config) {
|
|
120
|
+
const enabled = new Set();
|
|
121
|
+
// If explicitly disabled, return empty set
|
|
122
|
+
if (config && config.enabled === false) {
|
|
123
|
+
return enabled;
|
|
124
|
+
}
|
|
125
|
+
// Default to enabling all rules if:
|
|
126
|
+
// - No config provided, OR
|
|
127
|
+
// - Config is enabled (or not explicitly disabled)
|
|
128
|
+
if (!config || config.enabled === true || config.enabled === undefined) {
|
|
129
|
+
if (config?.rules) {
|
|
130
|
+
Object.entries(config.rules).forEach(([ruleId]) => {
|
|
131
|
+
enabled.add(ruleId);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Use defaults - enable all rules by default
|
|
136
|
+
DEFAULT_RULES.forEach(rule => {
|
|
137
|
+
enabled.add(rule.id);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return enabled;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Checks for 'any' type usage without allowlist comment
|
|
145
|
+
*/
|
|
146
|
+
function checkAnyType(line, lineNumber, lines) {
|
|
147
|
+
const issues = [];
|
|
148
|
+
// Skip if line has allowlist comment
|
|
149
|
+
if (line.includes("@ts-safety:allow-any")) {
|
|
150
|
+
return issues;
|
|
151
|
+
}
|
|
152
|
+
// Skip if previous line has allowlist comment
|
|
153
|
+
if (lines && lineNumber > 1 && lines[lineNumber - 2]?.includes("@ts-safety:allow-any")) {
|
|
154
|
+
return issues;
|
|
155
|
+
}
|
|
156
|
+
// Skip comments and strings
|
|
157
|
+
if (line.trim().startsWith("//") || line.trim().startsWith("*")) {
|
|
158
|
+
return issues;
|
|
159
|
+
}
|
|
160
|
+
// Pattern: 'any' as a standalone type
|
|
161
|
+
// Matches: : any, <any>, (any), [any], = any, as any
|
|
162
|
+
// But NOT: "any" (in strings), "anything", "anyway"
|
|
163
|
+
const anyPatterns = [
|
|
164
|
+
/:\s*any\b/, // ": any"
|
|
165
|
+
/\bany\s*[,})\];=]/, // "any," "any}" "any)"
|
|
166
|
+
/\bany\s*$/, // "any" at end of line
|
|
167
|
+
];
|
|
168
|
+
for (const pattern of anyPatterns) {
|
|
169
|
+
const match = pattern.exec(line);
|
|
170
|
+
if (match) {
|
|
171
|
+
const column = match.index + 1;
|
|
172
|
+
issues.push({
|
|
173
|
+
ruleId: TypeSafetyRuleId.TS_ANY_TYPE,
|
|
174
|
+
message: "Use of 'any' type is not allowed. Use specific type or @ts-safety:allow-any comment",
|
|
175
|
+
line: lineNumber,
|
|
176
|
+
column,
|
|
177
|
+
severity: TypeSafetySeverity.ERROR,
|
|
178
|
+
fix: "Replace 'any' with a specific type (e.g., unknown, Record<string, any>, etc.)",
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return issues;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Checks for unsafe casts (as any, as unknown, as Record<...>)
|
|
186
|
+
*/
|
|
187
|
+
function checkUnsafeCast(line, lineNumber, lines) {
|
|
188
|
+
const issues = [];
|
|
189
|
+
// Skip if line has allowlist comment
|
|
190
|
+
if (line.includes("@ts-safety:allow-cast")) {
|
|
191
|
+
return issues;
|
|
192
|
+
}
|
|
193
|
+
// Skip if previous line has allowlist comment
|
|
194
|
+
if (lines && lineNumber > 1 && lines[lineNumber - 2]?.includes("@ts-safety:allow-cast")) {
|
|
195
|
+
return issues;
|
|
196
|
+
}
|
|
197
|
+
// Skip comments
|
|
198
|
+
if (line.trim().startsWith("//") || line.trim().startsWith("*")) {
|
|
199
|
+
return issues;
|
|
200
|
+
}
|
|
201
|
+
// Pattern: "as any", "as unknown", "as Record<...>"
|
|
202
|
+
const castPatterns = [
|
|
203
|
+
{ pattern: /\bas\s+any\b/, description: "unsafe cast 'as any'" },
|
|
204
|
+
{ pattern: /\bas\s+unknown\b/, description: "unsafe cast 'as unknown'" },
|
|
205
|
+
{ pattern: /\bas\s+Record</, description: "unsafe cast 'as Record<...>'" },
|
|
206
|
+
{ pattern: /\bas\s+\{\}/, description: "unsafe cast 'as {}'" },
|
|
207
|
+
];
|
|
208
|
+
for (const { pattern, description } of castPatterns) {
|
|
209
|
+
const match = pattern.exec(line);
|
|
210
|
+
if (match) {
|
|
211
|
+
const column = match.index + 1;
|
|
212
|
+
issues.push({
|
|
213
|
+
ruleId: TypeSafetyRuleId.TS_UNSAFE_CAST,
|
|
214
|
+
message: `Found ${description}. This bypasses type safety. Use specific type or @ts-safety:allow-cast`,
|
|
215
|
+
line: lineNumber,
|
|
216
|
+
column,
|
|
217
|
+
severity: TypeSafetySeverity.ERROR,
|
|
218
|
+
fix: `Replace '${match[0]}' with a specific type or add @ts-safety:allow-cast comment`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return issues;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Checks that @ts-ignore has a reason comment
|
|
226
|
+
*/
|
|
227
|
+
function checkTsIgnore(line, lineNumber) {
|
|
228
|
+
const issues = [];
|
|
229
|
+
// Pattern: @ts-ignore followed by reason comment or not
|
|
230
|
+
const ignorePattern = /@ts-ignore/;
|
|
231
|
+
if (!ignorePattern.test(line)) {
|
|
232
|
+
return issues;
|
|
233
|
+
}
|
|
234
|
+
// Check if there's a reason comment after @ts-ignore
|
|
235
|
+
const reasonPattern = /@ts-ignore\s*(?:\/\/|$)/;
|
|
236
|
+
if (reasonPattern.test(line)) {
|
|
237
|
+
// No reason provided
|
|
238
|
+
issues.push({
|
|
239
|
+
ruleId: TypeSafetyRuleId.TS_IGNORE_WITHOUT_REASON,
|
|
240
|
+
message: "@ts-ignore must have a reason comment (e.g., @ts-ignore - reason here)",
|
|
241
|
+
line: lineNumber,
|
|
242
|
+
column: line.indexOf("@ts-ignore") + 1,
|
|
243
|
+
severity: TypeSafetySeverity.WARN,
|
|
244
|
+
fix: "Add a reason comment after @ts-ignore (e.g., @ts-ignore - complex type from library)",
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return issues;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Checks for functions without return type annotations
|
|
251
|
+
*/
|
|
252
|
+
function checkMissingReturnType(line, lineNumber, lines, lineIndex) {
|
|
253
|
+
const issues = [];
|
|
254
|
+
// Skip comments and strings
|
|
255
|
+
if (line.trim().startsWith("//") || line.trim().startsWith("*")) {
|
|
256
|
+
return issues;
|
|
257
|
+
}
|
|
258
|
+
// Skip private/protected/property functions (TypeScript handles these)
|
|
259
|
+
if (/private|protected|readonly|\bget\s+|\bset\s+/.test(line)) {
|
|
260
|
+
return issues;
|
|
261
|
+
}
|
|
262
|
+
// Patterns:
|
|
263
|
+
// - "function foo() {" - missing return type
|
|
264
|
+
// - "public foo() {" - missing return type
|
|
265
|
+
// - "foo(): ReturnType" - has return type (OK)
|
|
266
|
+
// - "async foo()" - async functions should have return type
|
|
267
|
+
// - Arrow functions with {} block - should have return type
|
|
268
|
+
// - Constructor, getters/setters - skip
|
|
269
|
+
const functionPattern = /(?:async\s+)?(?:function\s+\w+|(?:public|protected)?\s*\w+)\s*\([^)]*\)\s*(?!:|\{)/;
|
|
270
|
+
if (functionPattern.test(line) && !line.includes("=>") && !line.includes(":")) {
|
|
271
|
+
// This might be a function declaration without return type
|
|
272
|
+
// Double-check it's actually a function
|
|
273
|
+
if (/^\s*((?:async\s+)?(?:public\s+)?function|(?:async\s+)?\w+\s*\()/.test(line)) {
|
|
274
|
+
issues.push({
|
|
275
|
+
ruleId: TypeSafetyRuleId.MISSING_RETURN_TYPE,
|
|
276
|
+
message: "Function missing explicit return type annotation",
|
|
277
|
+
line: lineNumber,
|
|
278
|
+
column: 1,
|
|
279
|
+
severity: TypeSafetySeverity.WARN,
|
|
280
|
+
fix: "Add return type annotation: function name(): ReturnType { ... }",
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return issues;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Checks for Promise without type parameter
|
|
288
|
+
*/
|
|
289
|
+
function checkPromiseType(line, lineNumber) {
|
|
290
|
+
const issues = [];
|
|
291
|
+
// Skip comments
|
|
292
|
+
if (line.trim().startsWith("//") || line.trim().startsWith("*")) {
|
|
293
|
+
return issues;
|
|
294
|
+
}
|
|
295
|
+
// Pattern: Promise<...> vs Promise without parameter
|
|
296
|
+
// "Promise<T>" is OK
|
|
297
|
+
// "Promise<unknown>" or "Promise<any>" should be flagged
|
|
298
|
+
// "Promise" without any type parameter is an issue
|
|
299
|
+
// This is a simplified check - looks for Promise without brackets
|
|
300
|
+
const promiseWithoutTypePattern = /\bPromise\b(?!\s*<)/;
|
|
301
|
+
if (promiseWithoutTypePattern.test(line)) {
|
|
302
|
+
// Make sure it's not in a comment or string
|
|
303
|
+
const match = promiseWithoutTypePattern.exec(line);
|
|
304
|
+
if (match && !line.substring(0, match.index).includes("//")) {
|
|
305
|
+
issues.push({
|
|
306
|
+
ruleId: TypeSafetyRuleId.MISSING_PROMISE_TYPE,
|
|
307
|
+
message: "Promise must have type parameter (e.g., Promise<void>, Promise<string>)",
|
|
308
|
+
line: lineNumber,
|
|
309
|
+
column: match.index + 1,
|
|
310
|
+
severity: TypeSafetySeverity.WARN,
|
|
311
|
+
fix: "Add type parameter: Promise<ReturnType>",
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return issues;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=type-safety-linter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-safety-linter.js","sourceRoot":"","sources":["../../src/linters/type-safety-linter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-claudecode",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Cthulhu-themed agentic harness for Claude Code — 11 Elder God agents, lifecycle hooks, skill system, and multi-tier orchestration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|