driftdetect-lsp 0.9.26 → 0.9.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +121 -0
- package/package.json +15 -15
- package/dist/bin/server.d.ts +0 -12
- package/dist/bin/server.js +0 -26
- package/dist/bin/server.js.map +0 -1
- package/dist/capabilities.d.ts +0 -91
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js +0 -183
- package/dist/capabilities.js.map +0 -1
- package/dist/commands/approve-pattern.d.ts +0 -15
- package/dist/commands/approve-pattern.js +0 -83
- package/dist/commands/approve-pattern.js.map +0 -1
- package/dist/commands/create-variant.d.ts +0 -22
- package/dist/commands/create-variant.js +0 -109
- package/dist/commands/create-variant.js.map +0 -1
- package/dist/commands/explain-ai.d.ts +0 -11
- package/dist/commands/explain-ai.js +0 -144
- package/dist/commands/explain-ai.js.map +0 -1
- package/dist/commands/fix-ai.d.ts +0 -11
- package/dist/commands/fix-ai.js +0 -146
- package/dist/commands/fix-ai.js.map +0 -1
- package/dist/commands/ignore-once.d.ts +0 -33
- package/dist/commands/ignore-once.js +0 -147
- package/dist/commands/ignore-once.js.map +0 -1
- package/dist/commands/ignore-pattern.d.ts +0 -15
- package/dist/commands/ignore-pattern.js +0 -77
- package/dist/commands/ignore-pattern.js.map +0 -1
- package/dist/commands/index.d.ts +0 -14
- package/dist/commands/index.js +0 -14
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/rescan.d.ts +0 -19
- package/dist/commands/rescan.js +0 -125
- package/dist/commands/rescan.js.map +0 -1
- package/dist/commands/show-patterns.d.ts +0 -30
- package/dist/commands/show-patterns.js +0 -175
- package/dist/commands/show-patterns.js.map +0 -1
- package/dist/commands/show-violations.d.ts +0 -11
- package/dist/commands/show-violations.js +0 -259
- package/dist/commands/show-violations.js.map +0 -1
- package/dist/handlers/code-actions.d.ts +0 -32
- package/dist/handlers/code-actions.js +0 -184
- package/dist/handlers/code-actions.js.map +0 -1
- package/dist/handlers/code-lens.d.ts +0 -32
- package/dist/handlers/code-lens.js +0 -162
- package/dist/handlers/code-lens.js.map +0 -1
- package/dist/handlers/commands.d.ts +0 -48
- package/dist/handlers/commands.js +0 -360
- package/dist/handlers/commands.js.map +0 -1
- package/dist/handlers/diagnostics.d.ts +0 -73
- package/dist/handlers/diagnostics.js +0 -259
- package/dist/handlers/diagnostics.js.map +0 -1
- package/dist/handlers/document-sync.d.ts +0 -37
- package/dist/handlers/document-sync.js +0 -49
- package/dist/handlers/document-sync.js.map +0 -1
- package/dist/handlers/hover.d.ts +0 -30
- package/dist/handlers/hover.js +0 -119
- package/dist/handlers/hover.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -23
- package/dist/handlers/index.js +0 -16
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/initialize.d.ts +0 -41
- package/dist/handlers/initialize.d.ts.map +0 -1
- package/dist/handlers/initialize.js +0 -33
- package/dist/handlers/initialize.js.map +0 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/integration/core-scanner.d.ts +0 -89
- package/dist/integration/core-scanner.js +0 -309
- package/dist/integration/core-scanner.js.map +0 -1
- package/dist/integration/index.d.ts +0 -11
- package/dist/integration/index.js +0 -11
- package/dist/integration/index.js.map +0 -1
- package/dist/integration/pattern-store-adapter.d.ts +0 -117
- package/dist/integration/pattern-store-adapter.js +0 -349
- package/dist/integration/pattern-store-adapter.js.map +0 -1
- package/dist/integration/types.d.ts +0 -134
- package/dist/integration/types.js +0 -39
- package/dist/integration/types.js.map +0 -1
- package/dist/server/index.d.ts +0 -5
- package/dist/server/index.js +0 -5
- package/dist/server/index.js.map +0 -1
- package/dist/server/types.d.ts +0 -139
- package/dist/server/types.js +0 -8
- package/dist/server/types.js.map +0 -1
- package/dist/server.d.ts +0 -63
- package/dist/server.js +0 -208
- package/dist/server.js.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -5
- package/dist/types/index.js.map +0 -1
- package/dist/types/lsp-types.d.ts +0 -321
- package/dist/types/lsp-types.js +0 -274
- package/dist/types/lsp-types.js.map +0 -1
- package/dist/utils/diagnostic.d.ts +0 -84
- package/dist/utils/diagnostic.js +0 -256
- package/dist/utils/diagnostic.js.map +0 -1
- package/dist/utils/document.d.ts +0 -40
- package/dist/utils/document.d.ts.map +0 -1
- package/dist/utils/document.js +0 -138
- package/dist/utils/document.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -8
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/position.d.ts +0 -44
- package/dist/utils/position.d.ts.map +0 -1
- package/dist/utils/position.js +0 -96
- package/dist/utils/position.js.map +0 -1
- package/dist/utils/workspace.d.ts +0 -98
- package/dist/utils/workspace.js +0 -241
- package/dist/utils/workspace.js.map +0 -1
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create Variant Command - drift.createVariant
|
|
3
|
-
* @requirements 28.4
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Execute create variant command
|
|
7
|
-
* Creates a new pattern variant from an existing violation
|
|
8
|
-
*/
|
|
9
|
-
export async function executeCreateVariant(context, patternId, violationId) {
|
|
10
|
-
const { state, logger, connection } = context;
|
|
11
|
-
if (!patternId) {
|
|
12
|
-
return {
|
|
13
|
-
success: false,
|
|
14
|
-
error: 'Pattern ID is required',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
logger.info(`Creating variant for pattern: ${patternId}`);
|
|
18
|
-
// Get the base pattern
|
|
19
|
-
const basePattern = state.patterns.get(patternId);
|
|
20
|
-
if (!basePattern) {
|
|
21
|
-
return {
|
|
22
|
-
success: false,
|
|
23
|
-
error: `Pattern not found: ${patternId}`,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
// If violation ID provided, get the violation for context
|
|
27
|
-
let violation = null;
|
|
28
|
-
if (violationId) {
|
|
29
|
-
for (const violations of state.violations.values()) {
|
|
30
|
-
const found = violations.find((v) => v.id === violationId);
|
|
31
|
-
if (found) {
|
|
32
|
-
violation = { file: found.file, location: found.range };
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// TODO: Integrate with driftdetect-core variant manager
|
|
38
|
-
// For now, we'll create a variant with a generated name
|
|
39
|
-
// Generate variant ID and name
|
|
40
|
-
const variantId = generateVariantId(patternId);
|
|
41
|
-
const variantName = `${basePattern.name ?? patternId} (variant)`;
|
|
42
|
-
// Create the variant (in-memory for now)
|
|
43
|
-
const variant = {
|
|
44
|
-
id: variantId,
|
|
45
|
-
basePatternId: patternId,
|
|
46
|
-
name: variantName,
|
|
47
|
-
description: undefined,
|
|
48
|
-
createdAt: new Date().toISOString(),
|
|
49
|
-
context: violation ? {
|
|
50
|
-
file: violation.file,
|
|
51
|
-
location: violation.location,
|
|
52
|
-
} : undefined,
|
|
53
|
-
};
|
|
54
|
-
logger.info(`Variant created: ${variantId}`);
|
|
55
|
-
// Show success message
|
|
56
|
-
connection.window.showInformationMessage(`Variant "${variantName}" created for pattern "${patternId}"`);
|
|
57
|
-
return {
|
|
58
|
-
success: true,
|
|
59
|
-
message: `Variant "${variantName}" created`,
|
|
60
|
-
data: {
|
|
61
|
-
variant,
|
|
62
|
-
basePatternId: patternId,
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Generate a unique variant ID
|
|
68
|
-
*/
|
|
69
|
-
function generateVariantId(basePatternId) {
|
|
70
|
-
const timestamp = Date.now().toString(36);
|
|
71
|
-
const random = Math.random().toString(36).substring(2, 6);
|
|
72
|
-
return `${basePatternId}:variant:${timestamp}${random}`;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Validate variant name
|
|
76
|
-
*/
|
|
77
|
-
export function validateVariantName(name) {
|
|
78
|
-
if (!name || name.trim().length === 0) {
|
|
79
|
-
return 'Variant name cannot be empty';
|
|
80
|
-
}
|
|
81
|
-
if (name.length > 100) {
|
|
82
|
-
return 'Variant name must be 100 characters or less';
|
|
83
|
-
}
|
|
84
|
-
if (!/^[a-zA-Z0-9\s\-_()]+$/.test(name)) {
|
|
85
|
-
return 'Variant name can only contain letters, numbers, spaces, hyphens, underscores, and parentheses';
|
|
86
|
-
}
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Get suggested variant names based on violation context
|
|
91
|
-
*/
|
|
92
|
-
export function getSuggestedVariantNames(basePatternName, violationContext) {
|
|
93
|
-
const suggestions = [];
|
|
94
|
-
// Base suggestion
|
|
95
|
-
suggestions.push(`${basePatternName} (variant)`);
|
|
96
|
-
// File-based suggestion
|
|
97
|
-
if (violationContext?.file) {
|
|
98
|
-
const fileName = violationContext.file.split('/').pop()?.replace(/\.[^.]+$/, '');
|
|
99
|
-
if (fileName) {
|
|
100
|
-
suggestions.push(`${basePatternName} (${fileName})`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Context-based suggestions
|
|
104
|
-
suggestions.push(`${basePatternName} (alternative)`);
|
|
105
|
-
suggestions.push(`${basePatternName} (exception)`);
|
|
106
|
-
suggestions.push(`${basePatternName} (legacy)`);
|
|
107
|
-
return suggestions;
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=create-variant.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-variant.js","sourceRoot":"","sources":["../../src/commands/create-variant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explain AI Command - drift.explainWithAI
|
|
3
|
-
* @requirements 28.5
|
|
4
|
-
*/
|
|
5
|
-
import type { ServerContext, CommandResult } from '../server/types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Execute explain with AI command
|
|
8
|
-
* Uses AI to explain why a violation occurred and how to fix it
|
|
9
|
-
*/
|
|
10
|
-
export declare function executeExplainAI(context: ServerContext, violationId: string, patternId: string): Promise<CommandResult>;
|
|
11
|
-
//# sourceMappingURL=explain-ai.d.ts.map
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explain AI Command - drift.explainWithAI
|
|
3
|
-
* @requirements 28.5
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Execute explain with AI command
|
|
7
|
-
* Uses AI to explain why a violation occurred and how to fix it
|
|
8
|
-
*/
|
|
9
|
-
export async function executeExplainAI(context, violationId, patternId) {
|
|
10
|
-
const { state, logger, connection } = context;
|
|
11
|
-
if (!state.configuration.aiEnabled) {
|
|
12
|
-
return {
|
|
13
|
-
success: false,
|
|
14
|
-
error: 'AI features are not enabled. Enable them in settings.',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
if (!violationId || !patternId) {
|
|
18
|
-
return {
|
|
19
|
-
success: false,
|
|
20
|
-
error: 'Violation ID and Pattern ID are required',
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
logger.info(`Explaining violation with AI: ${violationId}`);
|
|
24
|
-
// Find the violation
|
|
25
|
-
let violation = null;
|
|
26
|
-
let violationUri = '';
|
|
27
|
-
for (const [uri, violations] of state.violations) {
|
|
28
|
-
violation = violations.find((v) => v.id === violationId);
|
|
29
|
-
if (violation) {
|
|
30
|
-
violationUri = uri;
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (!violation) {
|
|
35
|
-
return {
|
|
36
|
-
success: false,
|
|
37
|
-
error: `Violation not found: ${violationId}`,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
// Get the pattern
|
|
41
|
-
const pattern = state.patterns.get(patternId);
|
|
42
|
-
// Get document content for context
|
|
43
|
-
const docState = state.documents.get(violationUri);
|
|
44
|
-
const documentContent = docState?.content ?? '';
|
|
45
|
-
// Extract relevant code snippet using range (ViolationInfo uses range, not location)
|
|
46
|
-
const startLine = violation.range.start.line;
|
|
47
|
-
const endLine = violation.range.end.line;
|
|
48
|
-
const codeSnippet = extractCodeSnippet(documentContent, startLine, endLine, 5 // context lines
|
|
49
|
-
);
|
|
50
|
-
// TODO: Integrate with @drift/ai package
|
|
51
|
-
// For now, show a placeholder explanation
|
|
52
|
-
// Build explanation context
|
|
53
|
-
const explanationContext = {
|
|
54
|
-
violation: {
|
|
55
|
-
id: violationId,
|
|
56
|
-
message: violation.message,
|
|
57
|
-
severity: violation.severity,
|
|
58
|
-
range: violation.range,
|
|
59
|
-
},
|
|
60
|
-
pattern: {
|
|
61
|
-
id: patternId,
|
|
62
|
-
name: pattern?.name,
|
|
63
|
-
description: pattern?.description,
|
|
64
|
-
category: pattern?.category,
|
|
65
|
-
},
|
|
66
|
-
codeSnippet,
|
|
67
|
-
file: violationUri,
|
|
68
|
-
};
|
|
69
|
-
// Note: withProgress is not available in vscode-languageserver
|
|
70
|
-
// Show a simple message instead
|
|
71
|
-
connection.window.showInformationMessage('Analyzing violation with AI...');
|
|
72
|
-
// Simulate AI processing
|
|
73
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
74
|
-
// Generate placeholder explanation
|
|
75
|
-
const explanation = generatePlaceholderExplanation(explanationContext);
|
|
76
|
-
// Show explanation in a message
|
|
77
|
-
connection.window.showInformationMessage(`AI Explanation for "${pattern?.name ?? patternId}":\n\n${explanation}`);
|
|
78
|
-
logger.info(`AI explanation generated for: ${violationId}`);
|
|
79
|
-
return {
|
|
80
|
-
success: true,
|
|
81
|
-
message: 'AI explanation generated',
|
|
82
|
-
data: {
|
|
83
|
-
violationId,
|
|
84
|
-
patternId,
|
|
85
|
-
explanation,
|
|
86
|
-
context: explanationContext,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Extract code snippet around a location
|
|
92
|
-
*/
|
|
93
|
-
function extractCodeSnippet(content, startLine, endLine, contextLines) {
|
|
94
|
-
const lines = content.split('\n');
|
|
95
|
-
const start = Math.max(0, startLine - contextLines - 1);
|
|
96
|
-
const end = Math.min(lines.length, endLine + contextLines);
|
|
97
|
-
return lines.slice(start, end).join('\n');
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Generate placeholder explanation (to be replaced with actual AI)
|
|
101
|
-
*/
|
|
102
|
-
function generatePlaceholderExplanation(context) {
|
|
103
|
-
const lines = [];
|
|
104
|
-
lines.push(`## Why This Violation Occurred`);
|
|
105
|
-
lines.push('');
|
|
106
|
-
lines.push(context.violation.message);
|
|
107
|
-
lines.push('');
|
|
108
|
-
if (context.pattern.description) {
|
|
109
|
-
lines.push(`## Pattern Description`);
|
|
110
|
-
lines.push('');
|
|
111
|
-
lines.push(context.pattern.description);
|
|
112
|
-
lines.push('');
|
|
113
|
-
}
|
|
114
|
-
lines.push(`## How to Fix`);
|
|
115
|
-
lines.push('');
|
|
116
|
-
lines.push('To resolve this violation, consider the following approaches:');
|
|
117
|
-
lines.push('');
|
|
118
|
-
lines.push('1. **Follow the established pattern** - Update your code to match the expected pattern');
|
|
119
|
-
lines.push('2. **Create a variant** - If this is an intentional deviation, create a pattern variant');
|
|
120
|
-
lines.push('3. **Ignore this occurrence** - If this is a one-time exception, ignore this specific violation');
|
|
121
|
-
lines.push('');
|
|
122
|
-
lines.push(`## Severity: ${context.violation.severity}`);
|
|
123
|
-
lines.push('');
|
|
124
|
-
lines.push(getSeverityExplanation(context.violation.severity));
|
|
125
|
-
return lines.join('\n');
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Get severity explanation
|
|
129
|
-
*/
|
|
130
|
-
function getSeverityExplanation(severity) {
|
|
131
|
-
switch (severity) {
|
|
132
|
-
case 'error':
|
|
133
|
-
return 'This is a critical violation that should be addressed before merging.';
|
|
134
|
-
case 'warning':
|
|
135
|
-
return 'This violation indicates a potential issue that should be reviewed.';
|
|
136
|
-
case 'info':
|
|
137
|
-
return 'This is an informational finding that may be worth considering.';
|
|
138
|
-
case 'hint':
|
|
139
|
-
return 'This is a suggestion for improvement.';
|
|
140
|
-
default:
|
|
141
|
-
return 'Review this violation and determine the appropriate action.';
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=explain-ai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"explain-ai.js","sourceRoot":"","sources":["../../src/commands/explain-ai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAsB,EACtB,WAAmB,EACnB,SAAiB;IAEjB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE9C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uDAAuD;SAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;IAE5D,qBAAqB;IACrB,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACjD,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QACzD,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,GAAG,GAAG,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wBAAwB,WAAW,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE9C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;IAEhD,qFAAqF;IACrF,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACzC,MAAM,WAAW,GAAG,kBAAkB,CACpC,eAAe,EACf,SAAS,EACT,OAAO,EACP,CAAC,CAAC,gBAAgB;KACnB,CAAC;IAEF,yCAAyC;IACzC,0CAA0C;IAE1C,4BAA4B;IAC5B,MAAM,kBAAkB,GAAG;QACzB,SAAS,EAAE;YACT,EAAE,EAAE,WAAW;YACf,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;SACvB;QACD,OAAO,EAAE;YACP,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC5B;QACD,WAAW;QACX,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,+DAA+D;IAC/D,gCAAgC;IAChC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,gCAAgC,CAAC,CAAC;IAE3E,yBAAyB;IACzB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1D,mCAAmC;IACnC,MAAM,WAAW,GAAG,8BAA8B,CAAC,kBAAkB,CAAC,CAAC;IAEvE,gCAAgC;IAChC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CACtC,uBAAuB,OAAO,EAAE,IAAI,IAAI,SAAS,SAAS,WAAW,EAAE,CACxE,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;IAE5D,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE;YACJ,WAAW;YACX,SAAS;YACT,WAAW;YACX,OAAO,EAAE,kBAAkB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,OAAe,EACf,SAAiB,EACjB,OAAe,EACf,YAAoB;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CAAC,OAIvC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;IACrG,KAAK,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;IACtG,KAAK,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAC9G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,uEAAuE,CAAC;QACjF,KAAK,SAAS;YACZ,OAAO,qEAAqE,CAAC;QAC/E,KAAK,MAAM;YACT,OAAO,iEAAiE,CAAC;QAC3E,KAAK,MAAM;YACT,OAAO,uCAAuC,CAAC;QACjD;YACE,OAAO,6DAA6D,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fix AI Command - drift.fixWithAI
|
|
3
|
-
* @requirements 28.6
|
|
4
|
-
*/
|
|
5
|
-
import type { ServerContext, CommandResult } from '../server/types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Execute fix with AI command
|
|
8
|
-
* Uses AI to generate a fix for a violation
|
|
9
|
-
*/
|
|
10
|
-
export declare function executeFixAI(context: ServerContext, violationId: string, uri: string): Promise<CommandResult>;
|
|
11
|
-
//# sourceMappingURL=fix-ai.d.ts.map
|
package/dist/commands/fix-ai.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fix AI Command - drift.fixWithAI
|
|
3
|
-
* @requirements 28.6
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Execute fix with AI command
|
|
7
|
-
* Uses AI to generate a fix for a violation
|
|
8
|
-
*/
|
|
9
|
-
export async function executeFixAI(context, violationId, uri) {
|
|
10
|
-
const { state, logger, connection } = context;
|
|
11
|
-
if (!state.configuration.aiEnabled) {
|
|
12
|
-
return {
|
|
13
|
-
success: false,
|
|
14
|
-
error: 'AI features are not enabled. Enable them in settings.',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
if (!violationId || !uri) {
|
|
18
|
-
return {
|
|
19
|
-
success: false,
|
|
20
|
-
error: 'Violation ID and document URI are required',
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
logger.info(`Fixing violation with AI: ${violationId}`);
|
|
24
|
-
// Find the violation
|
|
25
|
-
const violations = state.violations.get(uri);
|
|
26
|
-
const violation = violations?.find((v) => v.id === violationId);
|
|
27
|
-
if (!violation) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: `Violation not found: ${violationId}`,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// Get the pattern
|
|
34
|
-
const pattern = state.patterns.get(violation.patternId);
|
|
35
|
-
// Get document content
|
|
36
|
-
const docState = state.documents.get(uri);
|
|
37
|
-
if (!docState) {
|
|
38
|
-
return {
|
|
39
|
-
success: false,
|
|
40
|
-
error: `Document not found: ${uri}`,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
// Extract code to fix using range (ViolationInfo uses range, not location)
|
|
44
|
-
const startLine = violation.range.start.line;
|
|
45
|
-
const endLine = violation.range.end.line;
|
|
46
|
-
const codeToFix = extractCodeToFix(docState.content, startLine, endLine);
|
|
47
|
-
// Build fix context
|
|
48
|
-
const fixContext = {
|
|
49
|
-
violation: {
|
|
50
|
-
id: violationId,
|
|
51
|
-
message: violation.message,
|
|
52
|
-
patternId: violation.patternId,
|
|
53
|
-
range: violation.range,
|
|
54
|
-
},
|
|
55
|
-
pattern: {
|
|
56
|
-
id: violation.patternId,
|
|
57
|
-
name: pattern?.name,
|
|
58
|
-
description: pattern?.description,
|
|
59
|
-
},
|
|
60
|
-
code: codeToFix,
|
|
61
|
-
language: docState.languageId,
|
|
62
|
-
file: uri,
|
|
63
|
-
};
|
|
64
|
-
// Show confirmation dialog
|
|
65
|
-
const confirmResult = await connection.window.showInformationMessage(`AI will analyze and suggest a fix for:\n\n"${violation.message}"\n\nThis will send code context to the AI provider. Continue?`, { title: 'Continue' }, { title: 'Cancel' });
|
|
66
|
-
if (confirmResult?.title !== 'Continue') {
|
|
67
|
-
return {
|
|
68
|
-
success: false,
|
|
69
|
-
error: 'Fix cancelled by user',
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
// Note: withProgress is not available in vscode-languageserver
|
|
73
|
-
// Show a simple message instead
|
|
74
|
-
connection.window.showInformationMessage('Generating AI fix...');
|
|
75
|
-
// Simulate AI processing
|
|
76
|
-
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
77
|
-
// Generate placeholder fix
|
|
78
|
-
const suggestedFix = generatePlaceholderFix(fixContext);
|
|
79
|
-
// Show fix preview and ask for confirmation
|
|
80
|
-
const applyResult = await connection.window.showInformationMessage(`AI suggested the following fix:\n\n${suggestedFix}\n\nApply this fix?`, { title: 'Apply' }, { title: 'Cancel' });
|
|
81
|
-
if (applyResult?.title === 'Apply') {
|
|
82
|
-
// Apply the fix
|
|
83
|
-
const edit = createFixEdit(uri, violation.range, suggestedFix);
|
|
84
|
-
const applied = await connection.workspace.applyEdit({
|
|
85
|
-
label: `AI Fix: ${violation.message}`,
|
|
86
|
-
edit,
|
|
87
|
-
});
|
|
88
|
-
if (applied) {
|
|
89
|
-
logger.info(`AI fix applied for: ${violationId}`);
|
|
90
|
-
return {
|
|
91
|
-
success: true,
|
|
92
|
-
message: 'AI fix applied successfully',
|
|
93
|
-
data: {
|
|
94
|
-
violationId,
|
|
95
|
-
uri,
|
|
96
|
-
fix: suggestedFix,
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return {
|
|
102
|
-
success: false,
|
|
103
|
-
error: 'Failed to apply fix',
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
success: false,
|
|
109
|
-
error: 'Fix cancelled by user',
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Extract code to fix from document
|
|
114
|
-
*/
|
|
115
|
-
function extractCodeToFix(content, startLine, endLine) {
|
|
116
|
-
const lines = content.split('\n');
|
|
117
|
-
return lines.slice(startLine - 1, endLine).join('\n');
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Generate placeholder fix (to be replaced with actual AI)
|
|
121
|
-
*/
|
|
122
|
-
function generatePlaceholderFix(context) {
|
|
123
|
-
// This is a placeholder - actual implementation would call AI
|
|
124
|
-
return `// TODO: AI-generated fix for "${context.violation.message}"
|
|
125
|
-
// Pattern: ${context.pattern.name ?? 'unknown'}
|
|
126
|
-
${context.code}`;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Create workspace edit for fix
|
|
130
|
-
*/
|
|
131
|
-
function createFixEdit(uri, range, newText) {
|
|
132
|
-
return {
|
|
133
|
-
changes: {
|
|
134
|
-
[uri]: [
|
|
135
|
-
{
|
|
136
|
-
range: {
|
|
137
|
-
start: { line: range.start.line, character: range.start.character },
|
|
138
|
-
end: { line: range.end.line, character: range.end.character },
|
|
139
|
-
},
|
|
140
|
-
newText,
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=fix-ai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fix-ai.js","sourceRoot":"","sources":["../../src/commands/fix-ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ignore Once Command - drift.ignoreOnce
|
|
3
|
-
* @requirements 28.3
|
|
4
|
-
*/
|
|
5
|
-
import type { ServerContext, CommandResult } from '../server/types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Execute ignore once command
|
|
8
|
-
* Ignores a specific violation occurrence without affecting other occurrences
|
|
9
|
-
*/
|
|
10
|
-
export declare function executeIgnoreOnce(context: ServerContext, violationId: string, uri: string, line: number): Promise<CommandResult>;
|
|
11
|
-
/**
|
|
12
|
-
* Generate ignore comment for a violation
|
|
13
|
-
*/
|
|
14
|
-
export declare function generateIgnoreComment(patternId: string, language: string): string;
|
|
15
|
-
/**
|
|
16
|
-
* Create workspace edit to insert ignore comment
|
|
17
|
-
*/
|
|
18
|
-
export declare function createIgnoreCommentEdit(uri: string, line: number, patternId: string, language: string, indentation?: string): {
|
|
19
|
-
changes: Record<string, Array<{
|
|
20
|
-
range: {
|
|
21
|
-
start: {
|
|
22
|
-
line: number;
|
|
23
|
-
character: number;
|
|
24
|
-
};
|
|
25
|
-
end: {
|
|
26
|
-
line: number;
|
|
27
|
-
character: number;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
newText: string;
|
|
31
|
-
}>>;
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=ignore-once.d.ts.map
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ignore Once Command - drift.ignoreOnce
|
|
3
|
-
* @requirements 28.3
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Execute ignore once command
|
|
7
|
-
* Ignores a specific violation occurrence without affecting other occurrences
|
|
8
|
-
*/
|
|
9
|
-
export async function executeIgnoreOnce(context, violationId, uri, line) {
|
|
10
|
-
const { state, logger, connection } = context;
|
|
11
|
-
if (!violationId) {
|
|
12
|
-
return {
|
|
13
|
-
success: false,
|
|
14
|
-
error: 'Violation ID is required',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
if (!uri) {
|
|
18
|
-
return {
|
|
19
|
-
success: false,
|
|
20
|
-
error: 'Document URI is required',
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
logger.info(`Ignoring violation once: ${violationId} at ${uri}:${line}`);
|
|
24
|
-
// TODO: Integrate with driftdetect-core to persist inline ignore comment
|
|
25
|
-
// For now, we'll update the in-memory state
|
|
26
|
-
// Find and remove the specific violation
|
|
27
|
-
const violations = state.violations.get(uri);
|
|
28
|
-
if (!violations) {
|
|
29
|
-
return {
|
|
30
|
-
success: false,
|
|
31
|
-
error: `No violations found for document: ${uri}`,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
const violationIndex = violations.findIndex((v) => v.id === violationId);
|
|
35
|
-
if (violationIndex === -1) {
|
|
36
|
-
return {
|
|
37
|
-
success: false,
|
|
38
|
-
error: `Violation not found: ${violationId}`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
const violation = violations[violationIndex];
|
|
42
|
-
if (!violation) {
|
|
43
|
-
return {
|
|
44
|
-
success: false,
|
|
45
|
-
error: `Violation not found: ${violationId}`,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
// Remove the violation
|
|
49
|
-
violations.splice(violationIndex, 1);
|
|
50
|
-
state.violations.set(uri, violations);
|
|
51
|
-
// Update diagnostics
|
|
52
|
-
const diagnostics = state.diagnostics.get(uri);
|
|
53
|
-
if (diagnostics) {
|
|
54
|
-
const filteredDiagnostics = diagnostics.filter((diag) => diag.violationId !== violationId);
|
|
55
|
-
state.diagnostics.set(uri, filteredDiagnostics);
|
|
56
|
-
// Publish updated diagnostics
|
|
57
|
-
connection.sendDiagnostics({
|
|
58
|
-
uri,
|
|
59
|
-
diagnostics: filteredDiagnostics.map((diag) => ({
|
|
60
|
-
range: diag.range,
|
|
61
|
-
severity: diag.severity === 'error' ? 1 : diag.severity === 'warning' ? 2 : diag.severity === 'info' ? 3 : 4,
|
|
62
|
-
code: diag.code,
|
|
63
|
-
source: diag.source,
|
|
64
|
-
message: diag.message,
|
|
65
|
-
})),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
// TODO: Add inline ignore comment to the document
|
|
69
|
-
// This would require a workspace edit to insert a comment like:
|
|
70
|
-
// // drift-ignore-next-line: pattern-id
|
|
71
|
-
// or
|
|
72
|
-
// // drift-ignore: violation-id
|
|
73
|
-
logger.info(`Violation ignored: ${violationId}`);
|
|
74
|
-
return {
|
|
75
|
-
success: true,
|
|
76
|
-
message: `Violation ignored at line ${line + 1}`,
|
|
77
|
-
data: {
|
|
78
|
-
violationId,
|
|
79
|
-
uri,
|
|
80
|
-
line,
|
|
81
|
-
patternId: violation.patternId,
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Generate ignore comment for a violation
|
|
87
|
-
*/
|
|
88
|
-
export function generateIgnoreComment(patternId, language) {
|
|
89
|
-
const comment = `drift-ignore-next-line: ${patternId}`;
|
|
90
|
-
switch (language) {
|
|
91
|
-
case 'javascript':
|
|
92
|
-
case 'typescript':
|
|
93
|
-
case 'javascriptreact':
|
|
94
|
-
case 'typescriptreact':
|
|
95
|
-
case 'java':
|
|
96
|
-
case 'c':
|
|
97
|
-
case 'cpp':
|
|
98
|
-
case 'csharp':
|
|
99
|
-
case 'go':
|
|
100
|
-
case 'rust':
|
|
101
|
-
case 'swift':
|
|
102
|
-
case 'kotlin':
|
|
103
|
-
return `// ${comment}`;
|
|
104
|
-
case 'python':
|
|
105
|
-
case 'ruby':
|
|
106
|
-
case 'perl':
|
|
107
|
-
case 'shell':
|
|
108
|
-
case 'bash':
|
|
109
|
-
case 'yaml':
|
|
110
|
-
case 'toml':
|
|
111
|
-
return `# ${comment}`;
|
|
112
|
-
case 'html':
|
|
113
|
-
case 'xml':
|
|
114
|
-
case 'svg':
|
|
115
|
-
return `<!-- ${comment} -->`;
|
|
116
|
-
case 'css':
|
|
117
|
-
case 'scss':
|
|
118
|
-
case 'less':
|
|
119
|
-
return `/* ${comment} */`;
|
|
120
|
-
case 'sql':
|
|
121
|
-
return `-- ${comment}`;
|
|
122
|
-
case 'lua':
|
|
123
|
-
return `-- ${comment}`;
|
|
124
|
-
default:
|
|
125
|
-
return `// ${comment}`;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Create workspace edit to insert ignore comment
|
|
130
|
-
*/
|
|
131
|
-
export function createIgnoreCommentEdit(uri, line, patternId, language, indentation = '') {
|
|
132
|
-
const comment = generateIgnoreComment(patternId, language);
|
|
133
|
-
return {
|
|
134
|
-
changes: {
|
|
135
|
-
[uri]: [
|
|
136
|
-
{
|
|
137
|
-
range: {
|
|
138
|
-
start: { line, character: 0 },
|
|
139
|
-
end: { line, character: 0 },
|
|
140
|
-
},
|
|
141
|
-
newText: `${indentation}${comment}\n`,
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=ignore-once.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ignore-once.js","sourceRoot":"","sources":["../../src/commands/ignore-once.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ignore Pattern Command - drift.ignorePattern
|
|
3
|
-
* @requirements 28.2
|
|
4
|
-
*/
|
|
5
|
-
import type { ServerContext, CommandResult } from '../server/types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Execute ignore pattern command
|
|
8
|
-
* Marks a pattern as ignored, suppressing all violations for that pattern
|
|
9
|
-
*/
|
|
10
|
-
export declare function executeIgnorePattern(context: ServerContext, patternId: string): Promise<CommandResult>;
|
|
11
|
-
/**
|
|
12
|
-
* Ignore multiple patterns at once
|
|
13
|
-
*/
|
|
14
|
-
export declare function executeIgnorePatterns(context: ServerContext, patternIds: string[]): Promise<CommandResult>;
|
|
15
|
-
//# sourceMappingURL=ignore-pattern.d.ts.map
|