driftdetect-lsp 0.9.32 → 0.9.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/capabilities.d.ts.map +1 -0
  2. package/dist/capabilities.js +183 -0
  3. package/dist/capabilities.js.map +1 -0
  4. package/dist/commands/show-patterns.d.ts +30 -0
  5. package/dist/commands/show-patterns.d.ts.map +1 -1
  6. package/dist/commands/show-patterns.js +175 -0
  7. package/dist/commands/show-patterns.js.map +1 -0
  8. package/dist/handlers/code-actions.d.ts +32 -0
  9. package/dist/handlers/code-actions.d.ts.map +1 -1
  10. package/dist/handlers/code-actions.js +184 -0
  11. package/dist/handlers/code-actions.js.map +1 -0
  12. package/dist/handlers/code-lens.d.ts +32 -0
  13. package/dist/handlers/code-lens.d.ts.map +1 -1
  14. package/dist/handlers/code-lens.js +162 -0
  15. package/dist/handlers/code-lens.js.map +1 -0
  16. package/dist/handlers/commands.d.ts +48 -0
  17. package/dist/handlers/commands.d.ts.map +1 -1
  18. package/dist/handlers/commands.js +360 -0
  19. package/dist/handlers/commands.js.map +1 -0
  20. package/dist/handlers/diagnostics.d.ts +73 -0
  21. package/dist/handlers/diagnostics.d.ts.map +1 -1
  22. package/dist/handlers/diagnostics.js +259 -0
  23. package/dist/handlers/diagnostics.js.map +1 -0
  24. package/dist/handlers/document-sync.d.ts +37 -0
  25. package/dist/handlers/document-sync.d.ts.map +1 -1
  26. package/dist/handlers/document-sync.js +49 -0
  27. package/dist/handlers/document-sync.js.map +1 -0
  28. package/dist/handlers/hover.d.ts +30 -0
  29. package/dist/handlers/hover.d.ts.map +1 -1
  30. package/dist/handlers/hover.js +119 -0
  31. package/dist/handlers/hover.js.map +1 -0
  32. package/dist/integration/core-scanner.d.ts.map +1 -1
  33. package/dist/integration/core-scanner.js +309 -0
  34. package/dist/integration/core-scanner.js.map +1 -0
  35. package/dist/integration/pattern-store-adapter.d.ts +117 -0
  36. package/dist/integration/pattern-store-adapter.d.ts.map +1 -1
  37. package/dist/integration/pattern-store-adapter.js +349 -0
  38. package/dist/integration/pattern-store-adapter.js.map +1 -0
  39. package/dist/integration/types.d.ts +134 -0
  40. package/dist/integration/types.d.ts.map +1 -1
  41. package/dist/integration/types.js +39 -0
  42. package/dist/integration/types.js.map +1 -0
  43. package/dist/server/types.d.ts +139 -0
  44. package/dist/server/types.d.ts.map +1 -1
  45. package/dist/server/types.js +8 -0
  46. package/dist/server/types.js.map +1 -0
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +208 -0
  49. package/dist/server.js.map +1 -0
  50. package/dist/utils/diagnostic.js +263 -0
  51. package/dist/utils/diagnostic.js.map +1 -0
  52. package/dist/utils/document.d.ts +40 -0
  53. package/dist/utils/document.d.ts.map +1 -0
  54. package/dist/utils/document.js +138 -0
  55. package/dist/utils/document.js.map +1 -0
  56. package/dist/utils/index.d.ts.map +1 -0
  57. package/dist/utils/workspace.d.ts.map +1 -1
  58. package/dist/utils/workspace.js +241 -0
  59. package/dist/utils/workspace.js.map +1 -0
  60. package/package.json +13 -13
  61. package/LICENSE +0 -121
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Code Lens Handler
3
+ *
4
+ * Provides code lens (inline actions) for pattern information.
5
+ * Shows violation counts, pattern names, and quick actions.
6
+ *
7
+ * @requirements 27.6 - THE LSP_Server SHALL provide code lens for pattern information
8
+ */
9
+ import type { DiagnosticsHandler } from './diagnostics.js';
10
+ import type { Connection, TextDocuments, CodeLens, CodeLensParams } from 'vscode-languageserver';
11
+ import type { TextDocument } from 'vscode-languageserver-textdocument';
12
+ interface Logger {
13
+ error(message: string): void;
14
+ warn(message: string): void;
15
+ info(message: string): void;
16
+ debug(message: string): void;
17
+ }
18
+ /**
19
+ * Code lens handler interface
20
+ */
21
+ export interface CodeLensHandler {
22
+ /** Handle code lens request */
23
+ onCodeLens(params: CodeLensParams): CodeLens[] | null;
24
+ /** Handle code lens resolve request */
25
+ onCodeLensResolve(codeLens: CodeLens): CodeLens;
26
+ }
27
+ /**
28
+ * Create the code lens handler
29
+ */
30
+ export declare function createCodeLensHandler(_connection: Connection, _documents: TextDocuments<TextDocument>, diagnosticsHandler: DiagnosticsHandler, logger: Logger): CodeLensHandler;
31
+ export {};
32
+ //# sourceMappingURL=code-lens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-lens.d.ts","sourceRoot":"","sources":["../../src/handlers/code-lens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,kBAAkB,CAAC;AAOhF,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtD,uCAAuC;IACvC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACjD;AA+ED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,eAAe,CAoHjB"}
1
+ {"version":3,"file":"code-lens.d.ts","sourceRoot":"","sources":["../../src/handlers/code-lens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAMvE,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtD,uCAAuC;IACvC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACjD;AA+ED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,eAAe,CAoHjB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Code Lens Handler
3
+ *
4
+ * Provides code lens (inline actions) for pattern information.
5
+ * Shows violation counts, pattern names, and quick actions.
6
+ *
7
+ * @requirements 27.6 - THE LSP_Server SHALL provide code lens for pattern information
8
+ */
9
+ import { DRIFT_COMMANDS } from '../capabilities.js';
10
+ // ============================================================================
11
+ // Helpers
12
+ // ============================================================================
13
+ /**
14
+ * Group diagnostics by pattern ID
15
+ */
16
+ function groupByPattern(diagnostics) {
17
+ const groups = new Map();
18
+ for (const diagnostic of diagnostics) {
19
+ const patternId = diagnostic.data?.patternId ?? 'unknown';
20
+ const group = groups.get(patternId) ?? [];
21
+ group.push(diagnostic);
22
+ groups.set(patternId, group);
23
+ }
24
+ return groups;
25
+ }
26
+ /**
27
+ * Count diagnostics by severity
28
+ */
29
+ function countBySeverity(diagnostics) {
30
+ let errors = 0;
31
+ let warnings = 0;
32
+ let info = 0;
33
+ let hints = 0;
34
+ for (const d of diagnostics) {
35
+ switch (d.severity) {
36
+ case 1:
37
+ errors++;
38
+ break;
39
+ case 2:
40
+ warnings++;
41
+ break;
42
+ case 3:
43
+ info++;
44
+ break;
45
+ case 4:
46
+ hints++;
47
+ break;
48
+ }
49
+ }
50
+ return { errors, warnings, info, hints };
51
+ }
52
+ /**
53
+ * Format violation count for display
54
+ */
55
+ function formatViolationCount(count) {
56
+ return count === 1 ? '1 violation' : `${count} violations`;
57
+ }
58
+ // ============================================================================
59
+ // Handler Factory
60
+ // ============================================================================
61
+ /**
62
+ * Create the code lens handler
63
+ */
64
+ export function createCodeLensHandler(_connection, _documents, diagnosticsHandler, logger) {
65
+ return {
66
+ onCodeLens(params) {
67
+ const uri = params.textDocument.uri;
68
+ logger.debug(`Code lens request for ${uri}`);
69
+ // Get diagnostics for this document
70
+ const diagnostics = diagnosticsHandler.getDiagnostics(uri);
71
+ if (diagnostics.length === 0) {
72
+ return null;
73
+ }
74
+ const codeLenses = [];
75
+ // Document summary code lens at the top
76
+ const counts = countBySeverity(diagnostics);
77
+ const parts = [];
78
+ if (counts.errors > 0) {
79
+ parts.push(`${counts.errors} error${counts.errors === 1 ? '' : 's'}`);
80
+ }
81
+ if (counts.warnings > 0) {
82
+ parts.push(`${counts.warnings} warning${counts.warnings === 1 ? '' : 's'}`);
83
+ }
84
+ const summaryTitle = `📊 Drift: ${formatViolationCount(diagnostics.length)}${parts.length > 0 ? ` (${parts.join(', ')})` : ''}`;
85
+ codeLenses.push({
86
+ range: {
87
+ start: { line: 0, character: 0 },
88
+ end: { line: 0, character: 0 },
89
+ },
90
+ command: {
91
+ title: summaryTitle,
92
+ command: DRIFT_COMMANDS.SHOW_VIOLATIONS,
93
+ arguments: [uri],
94
+ },
95
+ data: {
96
+ type: 'summary',
97
+ uri,
98
+ violationCount: diagnostics.length,
99
+ },
100
+ });
101
+ // Group diagnostics by pattern
102
+ const patternGroups = groupByPattern(diagnostics);
103
+ // Create code lens for each pattern group
104
+ for (const [patternId, patternDiagnostics] of patternGroups) {
105
+ if (patternDiagnostics.length === 0) {
106
+ continue;
107
+ }
108
+ const firstDiagnostic = patternDiagnostics[0];
109
+ if (!firstDiagnostic) {
110
+ continue;
111
+ }
112
+ const count = patternDiagnostics.length;
113
+ // Pattern summary at first occurrence
114
+ codeLenses.push({
115
+ range: firstDiagnostic.range,
116
+ command: {
117
+ title: `⚠️ ${formatViolationCount(count)}: ${patternId}`,
118
+ command: DRIFT_COMMANDS.SHOW_VIOLATIONS,
119
+ arguments: [uri, patternId],
120
+ },
121
+ data: {
122
+ type: 'pattern',
123
+ uri,
124
+ patternId,
125
+ violationCount: count,
126
+ },
127
+ });
128
+ // Individual violation code lenses (limit to avoid clutter)
129
+ if (count <= 5) {
130
+ for (let i = 1; i < patternDiagnostics.length; i++) {
131
+ const diagnostic = patternDiagnostics[i];
132
+ if (!diagnostic) {
133
+ continue;
134
+ }
135
+ codeLenses.push({
136
+ range: diagnostic.range,
137
+ command: {
138
+ title: `💡 ${diagnostic.message}`,
139
+ command: DRIFT_COMMANDS.SHOW_VIOLATIONS,
140
+ arguments: [uri, patternId, diagnostic.data?.violationId],
141
+ },
142
+ data: {
143
+ type: 'violation',
144
+ uri,
145
+ patternId,
146
+ },
147
+ });
148
+ }
149
+ }
150
+ }
151
+ logger.debug(`Generated ${codeLenses.length} code lenses`);
152
+ return codeLenses;
153
+ },
154
+ onCodeLensResolve(codeLens) {
155
+ logger.debug('Resolving code lens');
156
+ // Code lenses are already resolved with commands
157
+ // This handler is for deferred resolution if needed
158
+ return codeLens;
159
+ },
160
+ };
161
+ }
162
+ //# sourceMappingURL=code-lens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-lens.js","sourceRoot":"","sources":["../../src/handlers/code-lens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Commands Handler
3
+ *
4
+ * Handles execution of Drift LSP commands.
5
+ * Routes commands to appropriate handlers and returns results.
6
+ * Integrates with driftdetect-core pattern store for persistence.
7
+ *
8
+ * @requirements 28.1 - drift.approvePattern
9
+ * @requirements 28.2 - drift.ignorePattern
10
+ * @requirements 28.3 - drift.ignoreOnce
11
+ * @requirements 28.4 - drift.createVariant
12
+ * @requirements 28.5 - drift.explainWithAI
13
+ * @requirements 28.6 - drift.fixWithAI
14
+ * @requirements 28.7 - drift.rescan
15
+ * @requirements 28.8 - drift.showPatterns
16
+ * @requirements 28.9 - drift.showViolations
17
+ */
18
+ import type { DiagnosticsHandler } from './diagnostics.js';
19
+ import type { Connection, TextDocuments, ExecuteCommandParams } from 'vscode-languageserver';
20
+ import type { TextDocument } from 'vscode-languageserver-textdocument';
21
+ interface Logger {
22
+ error(message: string): void;
23
+ warn(message: string): void;
24
+ info(message: string): void;
25
+ debug(message: string): void;
26
+ }
27
+ /**
28
+ * Command execution result
29
+ */
30
+ export interface CommandResult {
31
+ success: boolean;
32
+ message?: string;
33
+ data?: unknown;
34
+ error?: string;
35
+ }
36
+ /**
37
+ * Commands handler interface
38
+ */
39
+ export interface CommandsHandler {
40
+ /** Handle execute command request */
41
+ onExecuteCommand(params: ExecuteCommandParams): Promise<CommandResult>;
42
+ }
43
+ /**
44
+ * Create the commands handler
45
+ */
46
+ export declare function createCommandsHandler(connection: Connection, documents: TextDocuments<TextDocument>, diagnosticsHandler: DiagnosticsHandler, logger: Logger): CommandsHandler;
47
+ export {};
48
+ //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/handlers/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAO3D,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACxE;AA8bD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACtC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,eAAe,CA0GjB"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/handlers/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAMvE,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACxE;AA8bD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACtC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,eAAe,CA0GjB"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Commands Handler
3
+ *
4
+ * Handles execution of Drift LSP commands.
5
+ * Routes commands to appropriate handlers and returns results.
6
+ * Integrates with driftdetect-core pattern store for persistence.
7
+ *
8
+ * @requirements 28.1 - drift.approvePattern
9
+ * @requirements 28.2 - drift.ignorePattern
10
+ * @requirements 28.3 - drift.ignoreOnce
11
+ * @requirements 28.4 - drift.createVariant
12
+ * @requirements 28.5 - drift.explainWithAI
13
+ * @requirements 28.6 - drift.fixWithAI
14
+ * @requirements 28.7 - drift.rescan
15
+ * @requirements 28.8 - drift.showPatterns
16
+ * @requirements 28.9 - drift.showViolations
17
+ */
18
+ import { DRIFT_COMMANDS } from '../capabilities.js';
19
+ // ============================================================================
20
+ // Command Implementations
21
+ // ============================================================================
22
+ /**
23
+ * Approve a pattern
24
+ * @requirements 28.1 - drift.approvePattern
25
+ */
26
+ async function executeApprovePattern(connection, diagnosticsHandler, logger, patternId) {
27
+ logger.info(`Approving pattern: ${patternId}`);
28
+ // Get the pattern store adapter from diagnostics handler
29
+ const patternStoreAdapter = diagnosticsHandler.getPatternStoreAdapter();
30
+ if (patternStoreAdapter && patternStoreAdapter.isInitialized()) {
31
+ // Use the pattern store adapter to persist the approval
32
+ const result = await patternStoreAdapter.approve(patternId);
33
+ if (result.success) {
34
+ // Clear diagnostics for all documents to remove violations for this pattern
35
+ diagnosticsHandler.clearAllDiagnostics();
36
+ connection.window.showInformationMessage(`Pattern "${patternId}" approved. ${result.removedViolations} violation(s) will be cleared.`);
37
+ return {
38
+ success: true,
39
+ message: `Pattern "${patternId}" approved`,
40
+ data: { patternId, removedViolations: result.removedViolations },
41
+ };
42
+ }
43
+ else {
44
+ connection.window.showErrorMessage(`Failed to approve pattern: ${result.error ?? 'Unknown error'}`);
45
+ return {
46
+ success: false,
47
+ error: result.error ?? 'Unknown error',
48
+ };
49
+ }
50
+ }
51
+ // Fallback if pattern store adapter not available
52
+ connection.window.showInformationMessage(`Pattern "${patternId}" approved. Violations will be cleared.`);
53
+ return {
54
+ success: true,
55
+ message: `Pattern "${patternId}" approved`,
56
+ data: { patternId },
57
+ };
58
+ }
59
+ /**
60
+ * Ignore a pattern
61
+ * @requirements 28.2 - drift.ignorePattern
62
+ */
63
+ async function executeIgnorePattern(connection, diagnosticsHandler, logger, patternId) {
64
+ logger.info(`Ignoring pattern: ${patternId}`);
65
+ // Get the pattern store adapter from diagnostics handler
66
+ const patternStoreAdapter = diagnosticsHandler.getPatternStoreAdapter();
67
+ if (patternStoreAdapter && patternStoreAdapter.isInitialized()) {
68
+ // Use the pattern store adapter to persist the ignore
69
+ const result = await patternStoreAdapter.ignore(patternId);
70
+ if (result.success) {
71
+ // Clear diagnostics for all documents to remove violations for this pattern
72
+ diagnosticsHandler.clearAllDiagnostics();
73
+ connection.window.showInformationMessage(`Pattern "${patternId}" ignored. ${result.suppressedViolations} violation(s) will be suppressed.`);
74
+ return {
75
+ success: true,
76
+ message: `Pattern "${patternId}" ignored`,
77
+ data: { patternId, suppressedViolations: result.suppressedViolations },
78
+ };
79
+ }
80
+ else {
81
+ connection.window.showErrorMessage(`Failed to ignore pattern: ${result.error ?? 'Unknown error'}`);
82
+ return {
83
+ success: false,
84
+ error: result.error ?? 'Unknown error',
85
+ };
86
+ }
87
+ }
88
+ // Fallback if pattern store adapter not available
89
+ connection.window.showInformationMessage(`Pattern "${patternId}" ignored. Violations will be suppressed.`);
90
+ return {
91
+ success: true,
92
+ message: `Pattern "${patternId}" ignored`,
93
+ data: { patternId },
94
+ };
95
+ }
96
+ /**
97
+ * Ignore a single occurrence
98
+ * @requirements 28.3 - drift.ignoreOnce
99
+ */
100
+ async function executeIgnoreOnce(connection, logger, violationId, uri, line) {
101
+ logger.info(`Ignoring violation once: ${violationId} at ${uri}:${line}`);
102
+ // TODO: Add ignore comment to the file
103
+ // - Insert // drift-ignore-next-line or similar
104
+ // - Re-scan the document
105
+ connection.window.showInformationMessage(`Violation ignored for this occurrence.`);
106
+ return {
107
+ success: true,
108
+ message: 'Violation ignored',
109
+ data: { violationId, uri, line },
110
+ };
111
+ }
112
+ /**
113
+ * Create a variant
114
+ * @requirements 28.4 - drift.createVariant
115
+ */
116
+ async function executeCreateVariant(connection, diagnosticsHandler, logger, patternId, violationId, file, line, column) {
117
+ logger.info(`Creating variant for pattern: ${patternId}`);
118
+ // Get the pattern store adapter from diagnostics handler
119
+ const patternStoreAdapter = diagnosticsHandler.getPatternStoreAdapter();
120
+ if (patternStoreAdapter && patternStoreAdapter.isInitialized()) {
121
+ // Generate a variant name
122
+ const variantName = `variant-${Date.now().toString(36)}`;
123
+ // Build the variant input, conditionally including scopeValue
124
+ const variantInput = {
125
+ patternId,
126
+ name: variantName,
127
+ reason: 'Intentional deviation from pattern',
128
+ scope: file ? 'file' : 'global',
129
+ file: file || '',
130
+ line: line || 1,
131
+ column: column || 1,
132
+ };
133
+ // Only add scopeValue if file is provided
134
+ if (file) {
135
+ variantInput.scopeValue = file;
136
+ }
137
+ // Create the variant
138
+ const result = await patternStoreAdapter.createVariant(variantInput);
139
+ if (result.success) {
140
+ connection.window.showInformationMessage(`Variant "${variantName}" created for pattern "${patternId}". Configure it in .drift/patterns/variants/`);
141
+ return {
142
+ success: true,
143
+ message: `Variant "${variantName}" created`,
144
+ data: { patternId, variantName, variantId: result.variantId, violationId },
145
+ };
146
+ }
147
+ else {
148
+ connection.window.showErrorMessage(`Failed to create variant: ${result.error ?? 'Unknown error'}`);
149
+ return {
150
+ success: false,
151
+ error: result.error ?? 'Unknown error',
152
+ };
153
+ }
154
+ }
155
+ // Fallback if pattern store adapter not available
156
+ const variantName = `variant-${Date.now()}`;
157
+ connection.window.showInformationMessage(`Variant "${variantName}" created for pattern "${patternId}". Configure it in .drift/patterns/variants/`);
158
+ return {
159
+ success: true,
160
+ message: `Variant "${variantName}" created`,
161
+ data: { patternId, variantName, violationId },
162
+ };
163
+ }
164
+ /**
165
+ * Explain with AI
166
+ * @requirements 28.5 - drift.explainWithAI
167
+ */
168
+ async function executeExplainAI(connection, logger, violationId, patternId) {
169
+ logger.info(`AI explain requested for violation: ${violationId}`);
170
+ // TODO: Integrate with @drift/ai
171
+ // - Build context from violation and pattern
172
+ // - Send to AI provider
173
+ // - Display explanation to user
174
+ connection.window.showInformationMessage('AI explanation feature requires @drift/ai integration. Coming soon!');
175
+ return {
176
+ success: true,
177
+ message: 'AI explain requested',
178
+ data: { violationId, patternId },
179
+ };
180
+ }
181
+ /**
182
+ * Fix with AI
183
+ * @requirements 28.6 - drift.fixWithAI
184
+ */
185
+ async function executeFixAI(connection, logger, violationId, uri) {
186
+ logger.info(`AI fix requested for violation: ${violationId}`);
187
+ // TODO: Integrate with @drift/ai
188
+ // - Build context from violation
189
+ // - Generate fix with AI
190
+ // - Show diff preview
191
+ // - Apply fix if confirmed
192
+ connection.window.showInformationMessage('AI fix feature requires @drift/ai integration. Coming soon!');
193
+ return {
194
+ success: true,
195
+ message: 'AI fix requested',
196
+ data: { violationId, uri },
197
+ };
198
+ }
199
+ /**
200
+ * Rescan workspace
201
+ * @requirements 28.7 - drift.rescan
202
+ */
203
+ async function executeRescan(connection, documents, diagnosticsHandler, logger, uri) {
204
+ logger.info(`Rescan requested${uri ? ` for: ${uri}` : ' for all documents'}`);
205
+ // Get documents to scan
206
+ const documentsToScan = uri
207
+ ? [documents.get(uri)].filter((d) => d !== undefined)
208
+ : documents.all();
209
+ if (documentsToScan.length === 0) {
210
+ return {
211
+ success: true,
212
+ message: 'No documents to scan',
213
+ data: { scannedCount: 0 },
214
+ };
215
+ }
216
+ // Note: withProgress is not available in vscode-languageserver
217
+ // Show a simple message instead
218
+ connection.window.showInformationMessage(`Rescanning ${documentsToScan.length} document(s)...`);
219
+ for (const doc of documentsToScan) {
220
+ await diagnosticsHandler.publishDiagnostics(doc.uri);
221
+ }
222
+ connection.window.showInformationMessage(`Rescan complete: ${documentsToScan.length} document(s) scanned.`);
223
+ return {
224
+ success: true,
225
+ message: 'Rescan complete',
226
+ data: { scannedCount: documentsToScan.length },
227
+ };
228
+ }
229
+ /**
230
+ * Show patterns
231
+ * @requirements 28.8 - drift.showPatterns
232
+ */
233
+ async function executeShowPatterns(connection, diagnosticsHandler, logger, patternId) {
234
+ logger.info(`Show patterns requested${patternId ? `: ${patternId}` : ''}`);
235
+ // Get the pattern store adapter from diagnostics handler
236
+ const patternStoreAdapter = diagnosticsHandler.getPatternStoreAdapter();
237
+ if (patternStoreAdapter && patternStoreAdapter.isInitialized()) {
238
+ if (patternId) {
239
+ // Get specific pattern
240
+ const pattern = patternStoreAdapter.getPattern(patternId);
241
+ if (pattern) {
242
+ connection.window.showInformationMessage(`Pattern "${pattern.name}": ${pattern.description || 'No description'} (confidence: ${(pattern.confidence ?? 0) * 100}%)`);
243
+ return {
244
+ success: true,
245
+ message: 'Pattern found',
246
+ data: { pattern },
247
+ };
248
+ }
249
+ else {
250
+ connection.window.showWarningMessage(`Pattern not found: ${patternId}`);
251
+ return {
252
+ success: false,
253
+ error: `Pattern not found: ${patternId}`,
254
+ };
255
+ }
256
+ }
257
+ else {
258
+ // Get all patterns
259
+ const approved = patternStoreAdapter.getApprovedPatterns();
260
+ const discovered = patternStoreAdapter.getDiscoveredPatterns();
261
+ const ignored = patternStoreAdapter.getIgnoredPatterns();
262
+ connection.window.showInformationMessage(`Patterns: ${approved.length} approved, ${discovered.length} discovered, ${ignored.length} ignored`);
263
+ return {
264
+ success: true,
265
+ message: 'Patterns retrieved',
266
+ data: {
267
+ approved: approved.length,
268
+ discovered: discovered.length,
269
+ ignored: ignored.length,
270
+ patterns: [...approved, ...discovered],
271
+ },
272
+ };
273
+ }
274
+ }
275
+ // Fallback if pattern store adapter not available
276
+ connection.window.showInformationMessage('Pattern viewer coming soon! Patterns are stored in .drift/patterns/');
277
+ return {
278
+ success: true,
279
+ message: 'Show patterns',
280
+ data: { patternId },
281
+ };
282
+ }
283
+ /**
284
+ * Show violations
285
+ * @requirements 28.9 - drift.showViolations
286
+ */
287
+ async function executeShowViolations(connection, diagnosticsHandler, logger, uri, patternId, violationId) {
288
+ logger.info(`Show violations requested${uri ? ` for: ${uri}` : ''}${patternId ? ` pattern: ${patternId}` : ''}`);
289
+ // Get violations
290
+ if (uri) {
291
+ const diagnostics = diagnosticsHandler.getDiagnostics(uri);
292
+ const filtered = patternId
293
+ ? diagnostics.filter((d) => d.data?.patternId === patternId)
294
+ : diagnostics;
295
+ connection.window.showInformationMessage(`Found ${filtered.length} violation(s) in this file.`);
296
+ return {
297
+ success: true,
298
+ message: `${filtered.length} violations`,
299
+ data: { uri, patternId, count: filtered.length },
300
+ };
301
+ }
302
+ // TODO: Show all violations across workspace
303
+ connection.window.showInformationMessage('Violation viewer coming soon!');
304
+ return {
305
+ success: true,
306
+ message: 'Show violations',
307
+ data: { patternId, violationId },
308
+ };
309
+ }
310
+ // ============================================================================
311
+ // Handler Factory
312
+ // ============================================================================
313
+ /**
314
+ * Create the commands handler
315
+ */
316
+ export function createCommandsHandler(connection, documents, diagnosticsHandler, logger) {
317
+ return {
318
+ async onExecuteCommand(params) {
319
+ const { command, arguments: args = [] } = params;
320
+ logger.debug(`Executing command: ${command}`);
321
+ try {
322
+ switch (command) {
323
+ case DRIFT_COMMANDS.APPROVE_PATTERN:
324
+ return await executeApprovePattern(connection, diagnosticsHandler, logger, args[0]);
325
+ case DRIFT_COMMANDS.IGNORE_PATTERN:
326
+ return await executeIgnorePattern(connection, diagnosticsHandler, logger, args[0]);
327
+ case DRIFT_COMMANDS.IGNORE_ONCE:
328
+ return await executeIgnoreOnce(connection, logger, args[0], args[1], args[2]);
329
+ case DRIFT_COMMANDS.CREATE_VARIANT:
330
+ return await executeCreateVariant(connection, diagnosticsHandler, logger, args[0], args[1], args[2], args[3], args[4]);
331
+ case DRIFT_COMMANDS.EXPLAIN_AI:
332
+ return await executeExplainAI(connection, logger, args[0], args[1]);
333
+ case DRIFT_COMMANDS.FIX_AI:
334
+ return await executeFixAI(connection, logger, args[0], args[1]);
335
+ case DRIFT_COMMANDS.RESCAN:
336
+ return await executeRescan(connection, documents, diagnosticsHandler, logger, args[0]);
337
+ case DRIFT_COMMANDS.SHOW_PATTERNS:
338
+ return await executeShowPatterns(connection, diagnosticsHandler, logger, args[0]);
339
+ case DRIFT_COMMANDS.SHOW_VIOLATIONS:
340
+ return await executeShowViolations(connection, diagnosticsHandler, logger, args[0], args[1], args[2]);
341
+ default:
342
+ logger.warn(`Unknown command: ${command}`);
343
+ return {
344
+ success: false,
345
+ error: `Unknown command: ${command}`,
346
+ };
347
+ }
348
+ }
349
+ catch (error) {
350
+ const errorMessage = error instanceof Error ? error.message : String(error);
351
+ logger.error(`Command ${command} failed: ${errorMessage}`);
352
+ return {
353
+ success: false,
354
+ error: errorMessage,
355
+ };
356
+ }
357
+ },
358
+ };
359
+ }
360
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/handlers/commands.ts"],"names":[],"mappings":"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"}