@nahisaho/musubix-codegraph 2.3.2 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +200 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/pr/git-operations.d.ts +186 -0
- package/dist/pr/git-operations.d.ts.map +1 -0
- package/dist/pr/git-operations.js +441 -0
- package/dist/pr/git-operations.js.map +1 -0
- package/dist/pr/github-adapter.d.ts +163 -0
- package/dist/pr/github-adapter.d.ts.map +1 -0
- package/dist/pr/github-adapter.js +467 -0
- package/dist/pr/github-adapter.js.map +1 -0
- package/dist/pr/index.d.ts +19 -0
- package/dist/pr/index.d.ts.map +1 -0
- package/dist/pr/index.js +24 -0
- package/dist/pr/index.js.map +1 -0
- package/dist/pr/pr-creator.d.ts +135 -0
- package/dist/pr/pr-creator.d.ts.map +1 -0
- package/dist/pr/pr-creator.js +387 -0
- package/dist/pr/pr-creator.js.map +1 -0
- package/dist/pr/pr-template.d.ts +105 -0
- package/dist/pr/pr-template.d.ts.map +1 -0
- package/dist/pr/pr-template.js +273 -0
- package/dist/pr/pr-template.js.map +1 -0
- package/dist/pr/refactoring-applier.d.ts +143 -0
- package/dist/pr/refactoring-applier.d.ts.map +1 -0
- package/dist/pr/refactoring-applier.js +412 -0
- package/dist/pr/refactoring-applier.js.map +1 -0
- package/dist/pr/types.d.ts +362 -0
- package/dist/pr/types.d.ts.map +1 -0
- package/dist/pr/types.js +63 -0
- package/dist/pr/types.js.map +1 -0
- package/package.json +11 -2
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - PR Creator
|
|
3
|
+
*
|
|
4
|
+
* Main orchestrator for creating PRs from refactoring suggestions
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module @nahisaho/musubix-codegraph/pr
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-CG-PR-001 - GitHub Authentication
|
|
10
|
+
* @see REQ-CG-PR-002 - Auto Apply Refactoring
|
|
11
|
+
* @see REQ-CG-PR-003 - Git Branch Creation
|
|
12
|
+
* @see REQ-CG-PR-004 - Auto Commit
|
|
13
|
+
* @see REQ-CG-PR-005 - GitHub PR Creation
|
|
14
|
+
* @see DES-CG-PR-001 - Component Design
|
|
15
|
+
* @see DES-CG-PR-005 - Sequence Diagram
|
|
16
|
+
*/
|
|
17
|
+
import { EventEmitter } from 'node:events';
|
|
18
|
+
import { GitOperations } from './git-operations.js';
|
|
19
|
+
import { GitHubAdapter } from './github-adapter.js';
|
|
20
|
+
import { RefactoringApplier } from './refactoring-applier.js';
|
|
21
|
+
import { PRTemplateGenerator } from './pr-template.js';
|
|
22
|
+
import { generateBranchName, generateCommitMessage, } from './types.js';
|
|
23
|
+
/**
|
|
24
|
+
* PR Creator
|
|
25
|
+
*
|
|
26
|
+
* Orchestrates the entire PR creation workflow:
|
|
27
|
+
* 1. Authenticate with GitHub
|
|
28
|
+
* 2. Create a new branch
|
|
29
|
+
* 3. Apply refactoring changes
|
|
30
|
+
* 4. Commit changes
|
|
31
|
+
* 5. Push to remote
|
|
32
|
+
* 6. Create PR on GitHub
|
|
33
|
+
*
|
|
34
|
+
* @see DES-CG-PR-001
|
|
35
|
+
* @see DES-CG-PR-005
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const creator = new PRCreator({ repoPath: '/path/to/repo' });
|
|
39
|
+
* await creator.initialize();
|
|
40
|
+
*
|
|
41
|
+
* const result = await creator.create({
|
|
42
|
+
* suggestion: refactoringSuggestion,
|
|
43
|
+
* baseBranch: 'main',
|
|
44
|
+
* labels: ['refactoring', 'auto-generated'],
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* console.log(`PR created: ${result.pr?.url}`);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export class PRCreator extends EventEmitter {
|
|
51
|
+
config;
|
|
52
|
+
git = null;
|
|
53
|
+
github = null;
|
|
54
|
+
applier = null;
|
|
55
|
+
templateGenerator;
|
|
56
|
+
initialized = false;
|
|
57
|
+
originalBranch = null;
|
|
58
|
+
/**
|
|
59
|
+
* Create a new PRCreator
|
|
60
|
+
* @param config - Configuration options
|
|
61
|
+
*/
|
|
62
|
+
constructor(config) {
|
|
63
|
+
super();
|
|
64
|
+
this.config = {
|
|
65
|
+
remote: 'origin',
|
|
66
|
+
createBackups: true,
|
|
67
|
+
...config,
|
|
68
|
+
};
|
|
69
|
+
this.templateGenerator = new PRTemplateGenerator();
|
|
70
|
+
}
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Initialization
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Initialize the PR creator
|
|
76
|
+
* Sets up Git operations and authenticates with GitHub
|
|
77
|
+
*/
|
|
78
|
+
async initialize() {
|
|
79
|
+
try {
|
|
80
|
+
// Initialize Git operations
|
|
81
|
+
this.git = new GitOperations({
|
|
82
|
+
repoPath: this.config.repoPath,
|
|
83
|
+
remote: this.config.remote,
|
|
84
|
+
});
|
|
85
|
+
// Parse GitHub owner/repo from remote
|
|
86
|
+
const remoteInfo = this.git.parseRemoteUrl();
|
|
87
|
+
if (!remoteInfo) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
error: 'Could not parse GitHub owner/repo from remote URL',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// Initialize GitHub adapter
|
|
94
|
+
this.github = new GitHubAdapter({
|
|
95
|
+
owner: remoteInfo.owner,
|
|
96
|
+
repo: remoteInfo.repo,
|
|
97
|
+
token: this.config.githubToken,
|
|
98
|
+
});
|
|
99
|
+
// Authenticate with GitHub
|
|
100
|
+
const authResult = await this.github.authenticate();
|
|
101
|
+
if (!authResult.authenticated) {
|
|
102
|
+
return {
|
|
103
|
+
success: false,
|
|
104
|
+
error: `GitHub authentication failed: ${authResult.error}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Initialize refactoring applier
|
|
108
|
+
this.applier = new RefactoringApplier({
|
|
109
|
+
repoPath: this.config.repoPath,
|
|
110
|
+
createBackups: this.config.createBackups,
|
|
111
|
+
});
|
|
112
|
+
// Store current branch for potential rollback
|
|
113
|
+
this.originalBranch = this.git.getCurrentBranch();
|
|
114
|
+
this.initialized = true;
|
|
115
|
+
return { success: true };
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: error instanceof Error ? error.message : String(error),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if initialized
|
|
126
|
+
*/
|
|
127
|
+
isInitialized() {
|
|
128
|
+
return this.initialized;
|
|
129
|
+
}
|
|
130
|
+
// ============================================================================
|
|
131
|
+
// Main Operations
|
|
132
|
+
// ============================================================================
|
|
133
|
+
/**
|
|
134
|
+
* Create a PR from a refactoring suggestion
|
|
135
|
+
* @see REQ-CG-PR-002, REQ-CG-PR-003, REQ-CG-PR-004, REQ-CG-PR-005
|
|
136
|
+
*/
|
|
137
|
+
async create(options) {
|
|
138
|
+
this.ensureInitialized();
|
|
139
|
+
const { suggestion, dryRun } = options;
|
|
140
|
+
const warnings = [];
|
|
141
|
+
try {
|
|
142
|
+
this.emit('pr:start', { suggestion });
|
|
143
|
+
// Generate branch name
|
|
144
|
+
const branchName = options.branchName ?? generateBranchName(suggestion);
|
|
145
|
+
// Check for uncommitted changes
|
|
146
|
+
if (this.git.hasUncommittedChanges()) {
|
|
147
|
+
warnings.push('Repository has uncommitted changes. They will be stashed.');
|
|
148
|
+
this.git.stash('musubix-pr-creator-auto-stash');
|
|
149
|
+
}
|
|
150
|
+
// Dry run mode - just preview
|
|
151
|
+
if (dryRun) {
|
|
152
|
+
return this.dryRun(options, branchName);
|
|
153
|
+
}
|
|
154
|
+
// Determine base branch
|
|
155
|
+
const baseBranch = options.baseBranch ?? this.git.getDefaultBranch();
|
|
156
|
+
// Create and checkout new branch
|
|
157
|
+
this.emit('pr:branch', { name: branchName });
|
|
158
|
+
this.git.createBranch(branchName, baseBranch);
|
|
159
|
+
// Apply refactoring changes
|
|
160
|
+
const diffs = this.applier.preview(suggestion);
|
|
161
|
+
for (const diff of diffs) {
|
|
162
|
+
this.emit('pr:applying', { file: diff.filePath, changes: 1 });
|
|
163
|
+
}
|
|
164
|
+
const applyResult = this.applier.apply(suggestion);
|
|
165
|
+
if (!applyResult.success) {
|
|
166
|
+
// Rollback branch
|
|
167
|
+
this.git.checkout(this.originalBranch);
|
|
168
|
+
this.git.deleteBranch(branchName, true);
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
branchName,
|
|
172
|
+
filesChanged: [],
|
|
173
|
+
linesAdded: 0,
|
|
174
|
+
linesDeleted: 0,
|
|
175
|
+
error: `Failed to apply changes: ${applyResult.error}`,
|
|
176
|
+
warnings,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Stage all changes
|
|
180
|
+
this.git.stageAll();
|
|
181
|
+
// Generate commit message
|
|
182
|
+
const commitMessage = generateCommitMessage(suggestion);
|
|
183
|
+
// Commit
|
|
184
|
+
const commitInfo = this.git.commit(commitMessage);
|
|
185
|
+
this.emit('pr:commit', { hash: commitInfo.hash, message: commitMessage });
|
|
186
|
+
// Push to remote
|
|
187
|
+
this.emit('pr:push', { branch: branchName, remote: this.config.remote });
|
|
188
|
+
this.git.push({ setUpstream: true });
|
|
189
|
+
// Generate PR body
|
|
190
|
+
const prTitle = options.title ?? this.templateGenerator.generateTitle(suggestion);
|
|
191
|
+
const prBody = options.body ?? this.templateGenerator.generate(suggestion, diffs);
|
|
192
|
+
// Create PR
|
|
193
|
+
const pr = await this.github.createPullRequest({
|
|
194
|
+
title: prTitle,
|
|
195
|
+
body: prBody,
|
|
196
|
+
head: branchName,
|
|
197
|
+
base: baseBranch,
|
|
198
|
+
draft: options.draft,
|
|
199
|
+
});
|
|
200
|
+
this.emit('pr:created', { pr });
|
|
201
|
+
// Add labels, assignees, reviewers
|
|
202
|
+
if (options.labels && options.labels.length > 0) {
|
|
203
|
+
await this.github.addLabels(pr.number, options.labels);
|
|
204
|
+
}
|
|
205
|
+
if (options.assignees && options.assignees.length > 0) {
|
|
206
|
+
await this.github.addAssignees(pr.number, options.assignees);
|
|
207
|
+
}
|
|
208
|
+
if (options.reviewers && options.reviewers.length > 0) {
|
|
209
|
+
await this.github.addReviewers(pr.number, options.reviewers);
|
|
210
|
+
}
|
|
211
|
+
// Calculate stats
|
|
212
|
+
const stats = this.git.getDiffStats(baseBranch);
|
|
213
|
+
const result = {
|
|
214
|
+
success: true,
|
|
215
|
+
pr,
|
|
216
|
+
branchName,
|
|
217
|
+
commitHash: commitInfo.hash,
|
|
218
|
+
filesChanged: applyResult.filesModified,
|
|
219
|
+
linesAdded: stats.additions,
|
|
220
|
+
linesDeleted: stats.deletions,
|
|
221
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
222
|
+
};
|
|
223
|
+
this.emit('pr:complete', { result });
|
|
224
|
+
// Switch back to original branch
|
|
225
|
+
this.git.checkout(this.originalBranch);
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
230
|
+
this.emit('pr:error', { error: error, stage: 'create' });
|
|
231
|
+
// Attempt cleanup
|
|
232
|
+
try {
|
|
233
|
+
if (this.git && this.originalBranch) {
|
|
234
|
+
const currentBranch = this.git.getCurrentBranch();
|
|
235
|
+
if (currentBranch !== this.originalBranch) {
|
|
236
|
+
this.git.checkout(this.originalBranch);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Ignore cleanup errors
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
success: false,
|
|
245
|
+
branchName: options.branchName ?? generateBranchName(suggestion),
|
|
246
|
+
filesChanged: [],
|
|
247
|
+
linesAdded: 0,
|
|
248
|
+
linesDeleted: 0,
|
|
249
|
+
error: errorMessage,
|
|
250
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Preview PR creation without actually creating
|
|
256
|
+
* @see REQ-CG-PR-007
|
|
257
|
+
*/
|
|
258
|
+
async preview(options) {
|
|
259
|
+
this.ensureInitialized();
|
|
260
|
+
const { suggestion } = options;
|
|
261
|
+
const branchName = options.branchName ?? generateBranchName(suggestion);
|
|
262
|
+
const baseBranch = options.baseBranch ?? this.git.getDefaultBranch();
|
|
263
|
+
// Generate preview
|
|
264
|
+
const diffs = this.applier.preview(suggestion);
|
|
265
|
+
const title = options.title ?? this.templateGenerator.generateTitle(suggestion);
|
|
266
|
+
const body = options.body ?? this.templateGenerator.generate(suggestion, diffs);
|
|
267
|
+
const commitMessage = generateCommitMessage(suggestion);
|
|
268
|
+
return {
|
|
269
|
+
branchName,
|
|
270
|
+
baseBranch,
|
|
271
|
+
title,
|
|
272
|
+
body,
|
|
273
|
+
diffs,
|
|
274
|
+
commitMessage,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Validate a suggestion can be applied
|
|
279
|
+
*/
|
|
280
|
+
validate(suggestion) {
|
|
281
|
+
this.ensureInitialized();
|
|
282
|
+
const result = this.applier.canApply(suggestion);
|
|
283
|
+
return { valid: result.canApply, reason: result.reason };
|
|
284
|
+
}
|
|
285
|
+
// ============================================================================
|
|
286
|
+
// Private Helpers
|
|
287
|
+
// ============================================================================
|
|
288
|
+
/**
|
|
289
|
+
* Dry run implementation
|
|
290
|
+
*/
|
|
291
|
+
dryRun(options, branchName) {
|
|
292
|
+
const { suggestion } = options;
|
|
293
|
+
const baseBranch = options.baseBranch ?? this.git.getDefaultBranch();
|
|
294
|
+
// Generate preview
|
|
295
|
+
const diffs = this.applier.preview(suggestion);
|
|
296
|
+
const title = options.title ?? this.templateGenerator.generateTitle(suggestion);
|
|
297
|
+
const body = options.body ?? this.templateGenerator.generate(suggestion, diffs);
|
|
298
|
+
const commitMessage = generateCommitMessage(suggestion);
|
|
299
|
+
// Calculate stats from diffs
|
|
300
|
+
let linesAdded = 0;
|
|
301
|
+
let linesDeleted = 0;
|
|
302
|
+
for (const diff of diffs) {
|
|
303
|
+
linesAdded += diff.additions;
|
|
304
|
+
linesDeleted += diff.deletions;
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
success: true,
|
|
308
|
+
branchName,
|
|
309
|
+
filesChanged: diffs.map(d => d.filePath),
|
|
310
|
+
linesAdded,
|
|
311
|
+
linesDeleted,
|
|
312
|
+
preview: {
|
|
313
|
+
branchName,
|
|
314
|
+
baseBranch,
|
|
315
|
+
title,
|
|
316
|
+
body,
|
|
317
|
+
diffs,
|
|
318
|
+
commitMessage,
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Ensure initialized before operations
|
|
324
|
+
*/
|
|
325
|
+
ensureInitialized() {
|
|
326
|
+
if (!this.initialized) {
|
|
327
|
+
throw new Error('PRCreator not initialized. Call initialize() first.');
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// ============================================================================
|
|
331
|
+
// Event Typing
|
|
332
|
+
// ============================================================================
|
|
333
|
+
/**
|
|
334
|
+
* Typed event emitter methods
|
|
335
|
+
*/
|
|
336
|
+
emit(event, data) {
|
|
337
|
+
return super.emit(event, data);
|
|
338
|
+
}
|
|
339
|
+
on(event, listener) {
|
|
340
|
+
return super.on(event, listener);
|
|
341
|
+
}
|
|
342
|
+
once(event, listener) {
|
|
343
|
+
return super.once(event, listener);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Create a PRCreator instance
|
|
348
|
+
*/
|
|
349
|
+
export function createPRCreator(repoPath, options) {
|
|
350
|
+
return new PRCreator({
|
|
351
|
+
repoPath,
|
|
352
|
+
...options,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Quick PR creation helper
|
|
357
|
+
*
|
|
358
|
+
* One-shot function to create a PR from a suggestion.
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* const result = await createRefactoringPR(
|
|
363
|
+
* '/path/to/repo',
|
|
364
|
+
* suggestion,
|
|
365
|
+
* { labels: ['refactoring'] }
|
|
366
|
+
* );
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
export async function createRefactoringPR(repoPath, suggestion, options) {
|
|
370
|
+
const creator = createPRCreator(repoPath);
|
|
371
|
+
const initResult = await creator.initialize();
|
|
372
|
+
if (!initResult.success) {
|
|
373
|
+
return {
|
|
374
|
+
success: false,
|
|
375
|
+
branchName: generateBranchName(suggestion),
|
|
376
|
+
filesChanged: [],
|
|
377
|
+
linesAdded: 0,
|
|
378
|
+
linesDeleted: 0,
|
|
379
|
+
error: initResult.error,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
return creator.create({
|
|
383
|
+
suggestion,
|
|
384
|
+
...options,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=pr-creator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-creator.js","sourceRoot":"","sources":["../../src/pr/pr-creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - PR Template Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates PR body content from refactoring suggestions
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module @nahisaho/musubix-codegraph/pr
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-CG-PR-006 - PR Body Generation
|
|
10
|
+
* @see DES-CG-PR-006 - PR Body Template
|
|
11
|
+
*/
|
|
12
|
+
import type { RefactoringSuggestion, FileDiff } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* PR Template options
|
|
15
|
+
*/
|
|
16
|
+
export interface PRTemplateOptions {
|
|
17
|
+
/** Include file diffs in PR body */
|
|
18
|
+
includeDiffs?: boolean;
|
|
19
|
+
/** Maximum diff lines to include (default: 50) */
|
|
20
|
+
maxDiffLines?: number;
|
|
21
|
+
/** Include checklist */
|
|
22
|
+
includeChecklist?: boolean;
|
|
23
|
+
/** Custom checklist items */
|
|
24
|
+
checklistItems?: string[];
|
|
25
|
+
/** Include related issues section */
|
|
26
|
+
includeRelatedIssues?: boolean;
|
|
27
|
+
/** Related issue numbers */
|
|
28
|
+
relatedIssues?: number[];
|
|
29
|
+
/** Custom footer text */
|
|
30
|
+
footer?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* PR Template Generator
|
|
34
|
+
*
|
|
35
|
+
* Generates well-formatted PR bodies from refactoring suggestions.
|
|
36
|
+
*
|
|
37
|
+
* @see DES-CG-PR-006
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const generator = new PRTemplateGenerator();
|
|
41
|
+
* const body = generator.generate(suggestion, diffs);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class PRTemplateGenerator {
|
|
45
|
+
private readonly options;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new PRTemplateGenerator
|
|
48
|
+
* @param options - Template options
|
|
49
|
+
*/
|
|
50
|
+
constructor(options?: PRTemplateOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Generate PR body
|
|
53
|
+
* @see REQ-CG-PR-006
|
|
54
|
+
*/
|
|
55
|
+
generate(suggestion: RefactoringSuggestion, diffs?: FileDiff[]): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate PR title
|
|
58
|
+
*/
|
|
59
|
+
generateTitle(suggestion: RefactoringSuggestion): string;
|
|
60
|
+
/**
|
|
61
|
+
* Generate header section
|
|
62
|
+
*/
|
|
63
|
+
private generateHeader;
|
|
64
|
+
/**
|
|
65
|
+
* Generate summary section
|
|
66
|
+
*/
|
|
67
|
+
private generateSummary;
|
|
68
|
+
/**
|
|
69
|
+
* Generate reason section
|
|
70
|
+
*/
|
|
71
|
+
private generateChangesSection;
|
|
72
|
+
/**
|
|
73
|
+
* Generate diffs section
|
|
74
|
+
*/
|
|
75
|
+
private generateDiffsSection;
|
|
76
|
+
/**
|
|
77
|
+
* Generate impact analysis section
|
|
78
|
+
*/
|
|
79
|
+
private generateImpactSection;
|
|
80
|
+
/**
|
|
81
|
+
* Generate checklist section
|
|
82
|
+
*/
|
|
83
|
+
private generateChecklist;
|
|
84
|
+
/**
|
|
85
|
+
* Generate related issues section
|
|
86
|
+
*/
|
|
87
|
+
private generateRelatedIssues;
|
|
88
|
+
/**
|
|
89
|
+
* Generate footer section
|
|
90
|
+
*/
|
|
91
|
+
private generateFooter;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a PR template generator
|
|
95
|
+
*/
|
|
96
|
+
export declare function createPRTemplateGenerator(options?: PRTemplateOptions): PRTemplateGenerator;
|
|
97
|
+
/**
|
|
98
|
+
* Generate a simple PR body without advanced options
|
|
99
|
+
*/
|
|
100
|
+
export declare function generateSimplePRBody(suggestion: RefactoringSuggestion): string;
|
|
101
|
+
/**
|
|
102
|
+
* Generate PR title from suggestion
|
|
103
|
+
*/
|
|
104
|
+
export declare function generatePRTitle(suggestion: RefactoringSuggestion): string;
|
|
105
|
+
//# sourceMappingURL=pr-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-template.d.ts","sourceRoot":"","sources":["../../src/pr/pr-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EAIT,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4BD;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C;;;OAGG;gBACS,OAAO,GAAE,iBAAsB;IAY3C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM;IAoCvE;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM;IASxD;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;CAcvB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,CAE1F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAG9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAGzE"}
|