@m3hti/commit-genie 1.0.0 → 1.1.1
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 +164 -2
- package/dist/commands/generate.d.ts +2 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +248 -11
- package/dist/commands/generate.js.map +1 -1
- package/dist/data/wordlist.d.ts +11 -0
- package/dist/data/wordlist.d.ts.map +1 -0
- package/dist/data/wordlist.js +170 -0
- package/dist/data/wordlist.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/aiService.d.ts +4 -0
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +37 -0
- package/dist/services/aiService.js.map +1 -1
- package/dist/services/analyzerService.d.ts.map +1 -1
- package/dist/services/analyzerService.js +44 -42
- package/dist/services/analyzerService.js.map +1 -1
- package/dist/services/configService.d.ts.map +1 -1
- package/dist/services/configService.js +21 -0
- package/dist/services/configService.js.map +1 -1
- package/dist/services/gitService.d.ts +20 -0
- package/dist/services/gitService.d.ts.map +1 -1
- package/dist/services/gitService.js +86 -0
- package/dist/services/gitService.js.map +1 -1
- package/dist/services/lintService.d.ts +32 -0
- package/dist/services/lintService.d.ts.map +1 -0
- package/dist/services/lintService.js +191 -0
- package/dist/services/lintService.js.map +1 -0
- package/dist/services/spellService.d.ts +42 -0
- package/dist/services/spellService.d.ts.map +1 -0
- package/dist/services/spellService.js +175 -0
- package/dist/services/spellService.js.map +1 -0
- package/dist/services/splitService.d.ts +32 -0
- package/dist/services/splitService.d.ts.map +1 -0
- package/dist/services/splitService.js +184 -0
- package/dist/services/splitService.js.map +1 -0
- package/dist/types/index.d.ts +66 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -70,6 +70,27 @@ const DEFAULT_CONFIG = {
|
|
|
70
70
|
provider: 'openai',
|
|
71
71
|
model: 'gpt-4o-mini',
|
|
72
72
|
},
|
|
73
|
+
linting: {
|
|
74
|
+
enabled: true,
|
|
75
|
+
blockOnError: true,
|
|
76
|
+
rules: {
|
|
77
|
+
subjectMaxLength: { enabled: true, maxLength: 72 },
|
|
78
|
+
typeRequired: { enabled: true },
|
|
79
|
+
scopeFormat: { enabled: true },
|
|
80
|
+
imperativeMood: { enabled: true },
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
splitting: {
|
|
84
|
+
enabled: true,
|
|
85
|
+
minFilesForSuggestion: 2,
|
|
86
|
+
groupByScope: true,
|
|
87
|
+
groupByType: true,
|
|
88
|
+
},
|
|
89
|
+
spellCheck: {
|
|
90
|
+
enabled: true,
|
|
91
|
+
customDictionary: [],
|
|
92
|
+
ignorePatterns: [],
|
|
93
|
+
},
|
|
73
94
|
};
|
|
74
95
|
class ConfigService {
|
|
75
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configService.js","sourceRoot":"","sources":["../../src/services/configService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configService.js","sourceRoot":"","sources":["../../src/services/configService.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,26 @@ export declare class GitService {
|
|
|
24
24
|
* Commit staged changes with the given message (supports multi-line)
|
|
25
25
|
*/
|
|
26
26
|
static commit(message: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Amend the last commit with a new message
|
|
29
|
+
*/
|
|
30
|
+
static amendCommit(message: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get the last commit's message
|
|
33
|
+
*/
|
|
34
|
+
static getLastCommitMessage(): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Get files changed in the last commit
|
|
37
|
+
*/
|
|
38
|
+
static getLastCommitFiles(): FileChange[];
|
|
39
|
+
/**
|
|
40
|
+
* Get diff of the last commit
|
|
41
|
+
*/
|
|
42
|
+
static getLastCommitDiff(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Check if there are any commits in the repository
|
|
45
|
+
*/
|
|
46
|
+
static hasCommits(): boolean;
|
|
27
47
|
/**
|
|
28
48
|
* Get the root directory of the git repository
|
|
29
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/services/gitService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,qBAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IASjC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,SAAS;IAuC7B;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,SAAS;IA0BhC;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM;IAYxB;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,UAAU,EAAE;IAKrC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBpC;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAW3B;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,MAAM;IAqB1B;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAYxC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;CAsChE"}
|
|
1
|
+
{"version":3,"file":"gitService.d.ts","sourceRoot":"","sources":["../../src/services/gitService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,qBAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IASjC;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,SAAS;IAuC7B;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,SAAS;IA0BhC;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM;IAYxB;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,UAAU,EAAE;IAKrC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBpC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAoBzC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAW5C;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,UAAU,EAAE;IAwBzC;;OAEG;IACH,MAAM,CAAC,iBAAiB,IAAI,MAAM;IAWlC;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,OAAO;IAS5B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAW3B;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,MAAM;IAqB1B;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAYxC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;CAsChE"}
|
|
@@ -124,6 +124,92 @@ class GitService {
|
|
|
124
124
|
throw new Error('Failed to commit: Unknown error');
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Amend the last commit with a new message
|
|
129
|
+
*/
|
|
130
|
+
static amendCommit(message) {
|
|
131
|
+
try {
|
|
132
|
+
const result = (0, child_process_1.spawnSync)('git', ['commit', '--amend', '-F', '-'], {
|
|
133
|
+
input: message,
|
|
134
|
+
encoding: 'utf-8',
|
|
135
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
136
|
+
});
|
|
137
|
+
if (result.status !== 0) {
|
|
138
|
+
const errorMsg = result.stderr?.trim() || result.stdout?.trim() || 'Unknown error';
|
|
139
|
+
throw new Error(errorMsg);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (error.message) {
|
|
144
|
+
throw new Error(`Failed to amend commit: ${error.message}`);
|
|
145
|
+
}
|
|
146
|
+
throw new Error('Failed to amend commit: Unknown error');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get the last commit's message
|
|
151
|
+
*/
|
|
152
|
+
static getLastCommitMessage() {
|
|
153
|
+
try {
|
|
154
|
+
const output = (0, child_process_1.execSync)('git log -1 --format=%B', {
|
|
155
|
+
encoding: 'utf-8',
|
|
156
|
+
});
|
|
157
|
+
return output.trim() || null;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get files changed in the last commit
|
|
165
|
+
*/
|
|
166
|
+
static getLastCommitFiles() {
|
|
167
|
+
try {
|
|
168
|
+
const output = (0, child_process_1.execSync)('git diff-tree --no-commit-id --name-status -r HEAD', {
|
|
169
|
+
encoding: 'utf-8',
|
|
170
|
+
});
|
|
171
|
+
const files = [];
|
|
172
|
+
const lines = output.split('\n').filter(l => l.trim());
|
|
173
|
+
for (const line of lines) {
|
|
174
|
+
const parts = line.split('\t');
|
|
175
|
+
if (parts.length >= 2) {
|
|
176
|
+
const status = parts[0].charAt(0);
|
|
177
|
+
const path = parts[1];
|
|
178
|
+
files.push({ status, path });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return files;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get diff of the last commit
|
|
189
|
+
*/
|
|
190
|
+
static getLastCommitDiff() {
|
|
191
|
+
try {
|
|
192
|
+
return (0, child_process_1.execSync)('git diff HEAD~1 HEAD', {
|
|
193
|
+
encoding: 'utf-8',
|
|
194
|
+
maxBuffer: 1024 * 1024 * 10,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return '';
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if there are any commits in the repository
|
|
203
|
+
*/
|
|
204
|
+
static hasCommits() {
|
|
205
|
+
try {
|
|
206
|
+
(0, child_process_1.execSync)('git rev-parse HEAD', { stdio: 'pipe' });
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
127
213
|
/**
|
|
128
214
|
* Get the root directory of the git repository
|
|
129
215
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/services/gitService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/services/gitService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CommitMessage, LintResult } from '../types';
|
|
2
|
+
export declare class LintService {
|
|
3
|
+
/**
|
|
4
|
+
* Validate a commit message against all enabled rules
|
|
5
|
+
*/
|
|
6
|
+
static lint(message: CommitMessage): LintResult;
|
|
7
|
+
/**
|
|
8
|
+
* Check if the subject line exceeds max length
|
|
9
|
+
*/
|
|
10
|
+
private static checkSubjectLength;
|
|
11
|
+
/**
|
|
12
|
+
* Check if the commit type is valid
|
|
13
|
+
*/
|
|
14
|
+
private static checkTypeRequired;
|
|
15
|
+
/**
|
|
16
|
+
* Check if the scope format is valid
|
|
17
|
+
*/
|
|
18
|
+
private static checkScopeFormat;
|
|
19
|
+
/**
|
|
20
|
+
* Check if the description uses imperative mood
|
|
21
|
+
*/
|
|
22
|
+
private static checkImperativeMood;
|
|
23
|
+
/**
|
|
24
|
+
* Get the imperative form of a common past tense or gerund verb
|
|
25
|
+
*/
|
|
26
|
+
private static getImperativeForm;
|
|
27
|
+
/**
|
|
28
|
+
* Check if linting should block the commit
|
|
29
|
+
*/
|
|
30
|
+
static shouldBlockCommit(result: LintResult): boolean;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=lintService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lintService.d.ts","sourceRoot":"","sources":["../../src/services/lintService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,UAAU,EAAiB,MAAM,UAAU,CAAC;AAiChF,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU;IA8C/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA2BhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAkB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAoBlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;CAOtD"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LintService = void 0;
|
|
4
|
+
const configService_1 = require("./configService");
|
|
5
|
+
const VALID_TYPES = [
|
|
6
|
+
'feat',
|
|
7
|
+
'fix',
|
|
8
|
+
'docs',
|
|
9
|
+
'style',
|
|
10
|
+
'refactor',
|
|
11
|
+
'test',
|
|
12
|
+
'chore',
|
|
13
|
+
'perf',
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_FORBIDDEN_PREFIXES = [
|
|
16
|
+
'added',
|
|
17
|
+
'adding',
|
|
18
|
+
'fixed',
|
|
19
|
+
'fixing',
|
|
20
|
+
'updated',
|
|
21
|
+
'updating',
|
|
22
|
+
'removed',
|
|
23
|
+
'removing',
|
|
24
|
+
'changed',
|
|
25
|
+
'changing',
|
|
26
|
+
'created',
|
|
27
|
+
'creating',
|
|
28
|
+
'deleted',
|
|
29
|
+
'deleting',
|
|
30
|
+
'implemented',
|
|
31
|
+
'implementing',
|
|
32
|
+
];
|
|
33
|
+
class LintService {
|
|
34
|
+
/**
|
|
35
|
+
* Validate a commit message against all enabled rules
|
|
36
|
+
*/
|
|
37
|
+
static lint(message) {
|
|
38
|
+
const config = configService_1.ConfigService.getConfig();
|
|
39
|
+
const lintConfig = config.linting;
|
|
40
|
+
if (lintConfig?.enabled === false) {
|
|
41
|
+
return { valid: true, violations: [] };
|
|
42
|
+
}
|
|
43
|
+
const violations = [];
|
|
44
|
+
const rules = lintConfig?.rules;
|
|
45
|
+
// Check subject max length
|
|
46
|
+
if (rules?.subjectMaxLength?.enabled !== false) {
|
|
47
|
+
const maxLength = rules?.subjectMaxLength?.maxLength || 72;
|
|
48
|
+
const violation = this.checkSubjectLength(message.full.split('\n')[0], maxLength);
|
|
49
|
+
if (violation)
|
|
50
|
+
violations.push(violation);
|
|
51
|
+
}
|
|
52
|
+
// Check type required
|
|
53
|
+
if (rules?.typeRequired?.enabled !== false) {
|
|
54
|
+
const allowedTypes = rules?.typeRequired?.allowedTypes || VALID_TYPES;
|
|
55
|
+
const violation = this.checkTypeRequired(message.type, allowedTypes);
|
|
56
|
+
if (violation)
|
|
57
|
+
violations.push(violation);
|
|
58
|
+
}
|
|
59
|
+
// Check scope format
|
|
60
|
+
if (rules?.scopeFormat?.enabled !== false && message.scope) {
|
|
61
|
+
const pattern = rules?.scopeFormat?.pattern || '^[a-z][a-z0-9-]*$';
|
|
62
|
+
const violation = this.checkScopeFormat(message.scope, pattern);
|
|
63
|
+
if (violation)
|
|
64
|
+
violations.push(violation);
|
|
65
|
+
}
|
|
66
|
+
// Check imperative mood
|
|
67
|
+
if (rules?.imperativeMood?.enabled !== false) {
|
|
68
|
+
const forbiddenPrefixes = rules?.imperativeMood?.forbiddenPrefixes || DEFAULT_FORBIDDEN_PREFIXES;
|
|
69
|
+
const violation = this.checkImperativeMood(message.description, forbiddenPrefixes);
|
|
70
|
+
if (violation)
|
|
71
|
+
violations.push(violation);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
valid: violations.length === 0,
|
|
75
|
+
violations,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if the subject line exceeds max length
|
|
80
|
+
*/
|
|
81
|
+
static checkSubjectLength(subject, maxLength) {
|
|
82
|
+
if (subject.length > maxLength) {
|
|
83
|
+
return {
|
|
84
|
+
ruleId: 'subject-max-length',
|
|
85
|
+
ruleName: 'Subject Max Length',
|
|
86
|
+
message: `Subject line is ${subject.length} characters, max allowed is ${maxLength}`,
|
|
87
|
+
severity: 'error',
|
|
88
|
+
suggestion: `Shorten to ${maxLength} characters or less`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if the commit type is valid
|
|
95
|
+
*/
|
|
96
|
+
static checkTypeRequired(type, allowedTypes) {
|
|
97
|
+
if (!type) {
|
|
98
|
+
return {
|
|
99
|
+
ruleId: 'type-required',
|
|
100
|
+
ruleName: 'Type Required',
|
|
101
|
+
message: 'Commit message must include a type prefix',
|
|
102
|
+
severity: 'error',
|
|
103
|
+
suggestion: `Use one of: ${allowedTypes.join(', ')}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (!allowedTypes.includes(type)) {
|
|
107
|
+
return {
|
|
108
|
+
ruleId: 'type-invalid',
|
|
109
|
+
ruleName: 'Invalid Type',
|
|
110
|
+
message: `Type "${type}" is not in the allowed list`,
|
|
111
|
+
severity: 'error',
|
|
112
|
+
suggestion: `Use one of: ${allowedTypes.join(', ')}`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if the scope format is valid
|
|
119
|
+
*/
|
|
120
|
+
static checkScopeFormat(scope, pattern) {
|
|
121
|
+
try {
|
|
122
|
+
const regex = new RegExp(pattern);
|
|
123
|
+
if (!regex.test(scope)) {
|
|
124
|
+
return {
|
|
125
|
+
ruleId: 'scope-format',
|
|
126
|
+
ruleName: 'Scope Format',
|
|
127
|
+
message: `Scope "${scope}" does not match required format`,
|
|
128
|
+
severity: 'warning',
|
|
129
|
+
suggestion: 'Use lowercase alphanumeric characters and hyphens',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Invalid regex pattern, skip check
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if the description uses imperative mood
|
|
140
|
+
*/
|
|
141
|
+
static checkImperativeMood(description, forbiddenPrefixes) {
|
|
142
|
+
const firstWord = description.split(/\s+/)[0]?.toLowerCase();
|
|
143
|
+
if (firstWord && forbiddenPrefixes.includes(firstWord)) {
|
|
144
|
+
const imperative = this.getImperativeForm(firstWord);
|
|
145
|
+
return {
|
|
146
|
+
ruleId: 'imperative-mood',
|
|
147
|
+
ruleName: 'Imperative Mood',
|
|
148
|
+
message: `Description should use imperative mood, not "${firstWord}"`,
|
|
149
|
+
severity: 'warning',
|
|
150
|
+
suggestion: imperative ? `Use "${imperative}" instead` : 'Start with a verb in imperative form',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the imperative form of a common past tense or gerund verb
|
|
157
|
+
*/
|
|
158
|
+
static getImperativeForm(word) {
|
|
159
|
+
const conversions = {
|
|
160
|
+
added: 'add',
|
|
161
|
+
adding: 'add',
|
|
162
|
+
fixed: 'fix',
|
|
163
|
+
fixing: 'fix',
|
|
164
|
+
updated: 'update',
|
|
165
|
+
updating: 'update',
|
|
166
|
+
removed: 'remove',
|
|
167
|
+
removing: 'remove',
|
|
168
|
+
changed: 'change',
|
|
169
|
+
changing: 'change',
|
|
170
|
+
created: 'create',
|
|
171
|
+
creating: 'create',
|
|
172
|
+
deleted: 'delete',
|
|
173
|
+
deleting: 'delete',
|
|
174
|
+
implemented: 'implement',
|
|
175
|
+
implementing: 'implement',
|
|
176
|
+
};
|
|
177
|
+
return conversions[word] || null;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if linting should block the commit
|
|
181
|
+
*/
|
|
182
|
+
static shouldBlockCommit(result) {
|
|
183
|
+
const config = configService_1.ConfigService.getConfig();
|
|
184
|
+
if (config.linting?.blockOnError === false) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
return result.violations.some(v => v.severity === 'error');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.LintService = LintService;
|
|
191
|
+
//# sourceMappingURL=lintService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lintService.js","sourceRoot":"","sources":["../../src/services/lintService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SpellCheckResult } from '../types';
|
|
2
|
+
export declare class SpellService {
|
|
3
|
+
private static customWords;
|
|
4
|
+
private static initialized;
|
|
5
|
+
/**
|
|
6
|
+
* Initialize custom dictionary from config
|
|
7
|
+
*/
|
|
8
|
+
private static init;
|
|
9
|
+
/**
|
|
10
|
+
* Check a commit message description for spelling errors
|
|
11
|
+
*/
|
|
12
|
+
static check(description: string): SpellCheckResult;
|
|
13
|
+
/**
|
|
14
|
+
* Extract words from text, handling camelCase and code-like tokens
|
|
15
|
+
*/
|
|
16
|
+
private static extractWords;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a word should be ignored based on patterns
|
|
19
|
+
*/
|
|
20
|
+
private static shouldIgnore;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a word is valid (in dictionary or custom words)
|
|
23
|
+
*/
|
|
24
|
+
private static isValidWord;
|
|
25
|
+
/**
|
|
26
|
+
* Get spelling suggestions using Levenshtein distance
|
|
27
|
+
*/
|
|
28
|
+
private static getSuggestions;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate Levenshtein distance between two strings
|
|
31
|
+
*/
|
|
32
|
+
private static levenshteinDistance;
|
|
33
|
+
/**
|
|
34
|
+
* Add a word to the session dictionary (not persisted)
|
|
35
|
+
*/
|
|
36
|
+
static addToSessionDictionary(word: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Clear the session dictionary
|
|
39
|
+
*/
|
|
40
|
+
static clearSessionDictionary(): void;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=spellService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spellService.d.ts","sourceRoot":"","sources":["../../src/services/spellService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAI7D,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,WAAW,CAA0B;IACpD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAEnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,IAAI;IAanB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IAmCnD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAmC3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAc3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAK1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAuB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkClC;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjD;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,IAAI;CAItC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpellService = void 0;
|
|
4
|
+
const configService_1 = require("./configService");
|
|
5
|
+
const wordlist_1 = require("../data/wordlist");
|
|
6
|
+
class SpellService {
|
|
7
|
+
/**
|
|
8
|
+
* Initialize custom dictionary from config
|
|
9
|
+
*/
|
|
10
|
+
static init() {
|
|
11
|
+
if (this.initialized)
|
|
12
|
+
return;
|
|
13
|
+
const config = configService_1.ConfigService.getConfig();
|
|
14
|
+
const customDictionary = config.spellCheck?.customDictionary || [];
|
|
15
|
+
for (const word of customDictionary) {
|
|
16
|
+
this.customWords.add(word.toLowerCase());
|
|
17
|
+
}
|
|
18
|
+
this.initialized = true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check a commit message description for spelling errors
|
|
22
|
+
*/
|
|
23
|
+
static check(description) {
|
|
24
|
+
const config = configService_1.ConfigService.getConfig();
|
|
25
|
+
if (config.spellCheck?.enabled === false) {
|
|
26
|
+
return { valid: true, errors: [] };
|
|
27
|
+
}
|
|
28
|
+
this.init();
|
|
29
|
+
const words = this.extractWords(description);
|
|
30
|
+
const errors = [];
|
|
31
|
+
const ignorePatterns = config.spellCheck?.ignorePatterns || [];
|
|
32
|
+
for (const { word, position } of words) {
|
|
33
|
+
// Skip if matches ignore pattern
|
|
34
|
+
if (this.shouldIgnore(word, ignorePatterns)) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!this.isValidWord(word)) {
|
|
38
|
+
const suggestions = this.getSuggestions(word);
|
|
39
|
+
errors.push({
|
|
40
|
+
word,
|
|
41
|
+
suggestions,
|
|
42
|
+
position,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
valid: errors.length === 0,
|
|
48
|
+
errors,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Extract words from text, handling camelCase and code-like tokens
|
|
53
|
+
*/
|
|
54
|
+
static extractWords(text) {
|
|
55
|
+
const results = [];
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
// Split camelCase and PascalCase
|
|
58
|
+
const expanded = text.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
59
|
+
// Replace separators with spaces
|
|
60
|
+
const cleaned = expanded
|
|
61
|
+
.replace(/[_\-./\\:;,!?'"()[\]{}]/g, ' ')
|
|
62
|
+
.replace(/\d+/g, ' ');
|
|
63
|
+
// Extract words
|
|
64
|
+
const regex = /[a-zA-Z]+/g;
|
|
65
|
+
let match;
|
|
66
|
+
while ((match = regex.exec(cleaned)) !== null) {
|
|
67
|
+
const word = match[0].toLowerCase();
|
|
68
|
+
// Skip very short words and already seen words
|
|
69
|
+
if (word.length <= 2 || seen.has(word)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
seen.add(word);
|
|
73
|
+
// Find original position in the text
|
|
74
|
+
const position = text.toLowerCase().indexOf(word);
|
|
75
|
+
results.push({ word, position: position >= 0 ? position : 0 });
|
|
76
|
+
}
|
|
77
|
+
return results;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if a word should be ignored based on patterns
|
|
81
|
+
*/
|
|
82
|
+
static shouldIgnore(word, patterns) {
|
|
83
|
+
for (const pattern of patterns) {
|
|
84
|
+
try {
|
|
85
|
+
const regex = new RegExp(pattern, 'i');
|
|
86
|
+
if (regex.test(word)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Invalid regex, skip
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if a word is valid (in dictionary or custom words)
|
|
98
|
+
*/
|
|
99
|
+
static isValidWord(word) {
|
|
100
|
+
const lower = word.toLowerCase();
|
|
101
|
+
return wordlist_1.WORDLIST.has(lower) || this.customWords.has(lower);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get spelling suggestions using Levenshtein distance
|
|
105
|
+
*/
|
|
106
|
+
static getSuggestions(word, maxSuggestions = 3) {
|
|
107
|
+
const lower = word.toLowerCase();
|
|
108
|
+
const suggestions = [];
|
|
109
|
+
// Only check words of similar length for performance
|
|
110
|
+
const minLen = Math.max(1, word.length - 2);
|
|
111
|
+
const maxLen = word.length + 2;
|
|
112
|
+
for (const dictWord of wordlist_1.WORDLIST) {
|
|
113
|
+
if (dictWord.length >= minLen && dictWord.length <= maxLen) {
|
|
114
|
+
const distance = this.levenshteinDistance(lower, dictWord);
|
|
115
|
+
if (distance <= 2 && distance > 0) {
|
|
116
|
+
suggestions.push({ word: dictWord, distance });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return suggestions
|
|
121
|
+
.sort((a, b) => a.distance - b.distance)
|
|
122
|
+
.slice(0, maxSuggestions)
|
|
123
|
+
.map(s => s.word);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate Levenshtein distance between two strings
|
|
127
|
+
*/
|
|
128
|
+
static levenshteinDistance(a, b) {
|
|
129
|
+
if (a.length === 0)
|
|
130
|
+
return b.length;
|
|
131
|
+
if (b.length === 0)
|
|
132
|
+
return a.length;
|
|
133
|
+
const matrix = [];
|
|
134
|
+
// Initialize first column
|
|
135
|
+
for (let i = 0; i <= b.length; i++) {
|
|
136
|
+
matrix[i] = [i];
|
|
137
|
+
}
|
|
138
|
+
// Initialize first row
|
|
139
|
+
for (let j = 0; j <= a.length; j++) {
|
|
140
|
+
matrix[0][j] = j;
|
|
141
|
+
}
|
|
142
|
+
// Fill in the rest of the matrix
|
|
143
|
+
for (let i = 1; i <= b.length; i++) {
|
|
144
|
+
for (let j = 1; j <= a.length; j++) {
|
|
145
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
146
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
150
|
+
matrix[i][j - 1] + 1, // insertion
|
|
151
|
+
matrix[i - 1][j] + 1 // deletion
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return matrix[b.length][a.length];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Add a word to the session dictionary (not persisted)
|
|
160
|
+
*/
|
|
161
|
+
static addToSessionDictionary(word) {
|
|
162
|
+
this.customWords.add(word.toLowerCase());
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Clear the session dictionary
|
|
166
|
+
*/
|
|
167
|
+
static clearSessionDictionary() {
|
|
168
|
+
this.customWords.clear();
|
|
169
|
+
this.initialized = false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.SpellService = SpellService;
|
|
173
|
+
SpellService.customWords = new Set();
|
|
174
|
+
SpellService.initialized = false;
|
|
175
|
+
//# sourceMappingURL=spellService.js.map
|