driftdetect-lsp 0.9.31 → 0.9.33

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 (60) 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 +1 -1
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Diagnostics Handler
3
+ *
4
+ * Publishes diagnostics (squiggly lines) for pattern violations.
5
+ * Manages diagnostic state and provides incremental updates.
6
+ * Integrates with driftdetect-core scanner for pattern detection.
7
+ *
8
+ * @requirements 27.3 - THE LSP_Server SHALL publish diagnostics for violations
9
+ * @requirements 27.7 - THE LSP_Server SHALL respond to diagnostics within 200ms of file change
10
+ */
11
+ import { CoreScanner, PatternStoreAdapter, type CoreIntegrationConfig } from '../integration/index.js';
12
+ import type { Violation } from 'driftdetect-core';
13
+ import type { Connection, Diagnostic, TextDocuments } from 'vscode-languageserver';
14
+ import type { TextDocument } from 'vscode-languageserver-textdocument';
15
+ interface ServerState {
16
+ initialized: boolean;
17
+ workspaceFolders: Array<{
18
+ uri: string;
19
+ name: string;
20
+ }>;
21
+ }
22
+ interface Logger {
23
+ error(message: string): void;
24
+ warn(message: string): void;
25
+ info(message: string): void;
26
+ debug(message: string): void;
27
+ }
28
+ /**
29
+ * Extended diagnostic with Drift-specific data
30
+ */
31
+ export interface ViolationDiagnostic extends Diagnostic {
32
+ data?: {
33
+ violationId: string;
34
+ patternId: string;
35
+ file: string;
36
+ hasQuickFix: boolean;
37
+ aiExplainAvailable: boolean;
38
+ aiFixAvailable: boolean;
39
+ };
40
+ }
41
+ /**
42
+ * Diagnostics handler interface
43
+ */
44
+ export interface DiagnosticsHandler {
45
+ /** Publish diagnostics for a document */
46
+ publishDiagnostics(uri: string): Promise<void>;
47
+ /** Clear diagnostics for a document */
48
+ clearDiagnostics(uri: string): void;
49
+ /** Clear all diagnostics */
50
+ clearAllDiagnostics(): void;
51
+ /** Get diagnostics for a document */
52
+ getDiagnostics(uri: string): ViolationDiagnostic[];
53
+ /** Get diagnostic at a specific position */
54
+ getDiagnosticAtPosition(uri: string, line: number, character: number): ViolationDiagnostic | undefined;
55
+ /** Get all violations for a document */
56
+ getViolations(uri: string): Violation[];
57
+ /** Schedule a diagnostic update with debouncing */
58
+ scheduleUpdate(uri: string, delayMs?: number): void;
59
+ /** Cancel a scheduled update */
60
+ cancelUpdate(uri: string): void;
61
+ /** Get the core scanner instance */
62
+ getCoreScanner(): CoreScanner | null;
63
+ /** Get the pattern store adapter instance */
64
+ getPatternStoreAdapter(): PatternStoreAdapter | null;
65
+ /** Initialize the core integration */
66
+ initializeCoreIntegration(config?: Partial<CoreIntegrationConfig>): Promise<void>;
67
+ }
68
+ /**
69
+ * Create the diagnostics handler
70
+ */
71
+ export declare function createDiagnosticsHandler(connection: Connection, documents: TextDocuments<TextDocument>, state: ServerState, logger: Logger): DiagnosticsHandler;
72
+ export {};
73
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/handlers/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMvG,UAAU,WAAW;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,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,mBAAoB,SAAQ,UAAU;IACrD,IAAI,CAAC,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,uCAAuC;IACvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4BAA4B;IAC5B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,qCAAqC;IACrC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACnD,4CAA4C;IAC5C,uBAAuB,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,mBAAmB,GAAG,SAAS,CAAC;IACnC,wCAAwC;IACxC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IACxC,mDAAmD;IACnD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,gCAAgC;IAChC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oCAAoC;IACpC,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,6CAA6C;IAC7C,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAAC;IACrD,sCAAsC;IACtC,yBAAyB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAsCD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACtC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAiQpB"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/handlers/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGvG,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOvE,UAAU,WAAW;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,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,mBAAoB,SAAQ,UAAU;IACrD,IAAI,CAAC,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,uCAAuC;IACvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4BAA4B;IAC5B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,qCAAqC;IACrC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACnD,4CAA4C;IAC5C,uBAAuB,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,mBAAmB,GAAG,SAAS,CAAC;IACnC,wCAAwC;IACxC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IACxC,mDAAmD;IACnD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,gCAAgC;IAChC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oCAAoC;IACpC,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,6CAA6C;IAC7C,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAAC;IACrD,sCAAsC;IACtC,yBAAyB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAsCD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACtC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAiQpB"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Diagnostics Handler
3
+ *
4
+ * Publishes diagnostics (squiggly lines) for pattern violations.
5
+ * Manages diagnostic state and provides incremental updates.
6
+ * Integrates with driftdetect-core scanner for pattern detection.
7
+ *
8
+ * @requirements 27.3 - THE LSP_Server SHALL publish diagnostics for violations
9
+ * @requirements 27.7 - THE LSP_Server SHALL respond to diagnostics within 200ms of file change
10
+ */
11
+ import { DiagnosticSeverity } from 'vscode-languageserver';
12
+ import { CoreScanner, PatternStoreAdapter } from '../integration/index.js';
13
+ // ============================================================================
14
+ // Constants
15
+ // ============================================================================
16
+ /** Default delay before publishing diagnostics (ms) */
17
+ const DEFAULT_DIAGNOSTIC_DELAY = 200;
18
+ /** Maximum diagnostics per file */
19
+ const MAX_DIAGNOSTICS_PER_FILE = 100;
20
+ // ============================================================================
21
+ // Severity Mapping
22
+ // ============================================================================
23
+ /**
24
+ * Map Drift severity to LSP DiagnosticSeverity
25
+ */
26
+ function mapSeverity(severity) {
27
+ switch (severity) {
28
+ case 'error':
29
+ return DiagnosticSeverity.Error;
30
+ case 'warning':
31
+ return DiagnosticSeverity.Warning;
32
+ case 'info':
33
+ return DiagnosticSeverity.Information;
34
+ case 'hint':
35
+ return DiagnosticSeverity.Hint;
36
+ default:
37
+ return DiagnosticSeverity.Warning;
38
+ }
39
+ }
40
+ // ============================================================================
41
+ // Handler Factory
42
+ // ============================================================================
43
+ /**
44
+ * Create the diagnostics handler
45
+ */
46
+ export function createDiagnosticsHandler(connection, documents, state, logger) {
47
+ // Store diagnostics by document URI
48
+ const diagnosticsMap = new Map();
49
+ // Store violations by document URI
50
+ const violationsMap = new Map();
51
+ // Timers for debounced updates
52
+ const updateTimers = new Map();
53
+ // Core integration instances
54
+ let coreScanner = null;
55
+ let patternStoreAdapter = null;
56
+ /**
57
+ * Convert a ViolationInfo to an LSP Diagnostic
58
+ */
59
+ function violationInfoToDiagnostic(violation) {
60
+ return {
61
+ range: violation.range,
62
+ severity: mapSeverity(violation.severity),
63
+ code: violation.patternId,
64
+ source: 'drift',
65
+ message: violation.message,
66
+ data: {
67
+ violationId: violation.id,
68
+ patternId: violation.patternId,
69
+ file: violation.file,
70
+ hasQuickFix: violation.quickFix !== undefined,
71
+ aiExplainAvailable: violation.aiExplainAvailable ?? false,
72
+ aiFixAvailable: violation.aiFixAvailable ?? false,
73
+ },
74
+ };
75
+ }
76
+ /**
77
+ * Convert ViolationInfo to Violation for backward compatibility
78
+ */
79
+ function violationInfoToViolation(info) {
80
+ const violation = {
81
+ id: info.id,
82
+ patternId: info.patternId,
83
+ severity: info.severity,
84
+ file: info.file,
85
+ range: info.range,
86
+ message: info.message,
87
+ expected: info.expected ?? '',
88
+ actual: info.actual ?? '',
89
+ aiExplainAvailable: info.aiExplainAvailable ?? false,
90
+ aiFixAvailable: info.aiFixAvailable ?? false,
91
+ firstSeen: new Date(),
92
+ occurrences: 1,
93
+ };
94
+ // Add optional properties only if defined
95
+ if (info.explanation !== undefined) {
96
+ violation.explanation = info.explanation;
97
+ }
98
+ if (info.quickFix) {
99
+ violation.quickFix = {
100
+ title: info.quickFix.title,
101
+ kind: 'quickfix',
102
+ edit: { changes: {} },
103
+ isPreferred: info.quickFix.isPreferred,
104
+ confidence: info.quickFix.confidence,
105
+ };
106
+ }
107
+ return violation;
108
+ }
109
+ /**
110
+ * Scan a document for violations using the core scanner
111
+ */
112
+ async function scanDocument(document) {
113
+ const uri = document.uri;
114
+ const content = document.getText();
115
+ logger.debug(`Scanning document: ${uri} (${content.length} chars)`);
116
+ // If core scanner is initialized, use it
117
+ if (coreScanner && coreScanner.isInitialized()) {
118
+ const result = await coreScanner.scan(uri, content);
119
+ // Filter violations by variants if pattern store adapter is available
120
+ let violations = result.violations;
121
+ if (patternStoreAdapter && patternStoreAdapter.isInitialized()) {
122
+ violations = patternStoreAdapter.filterViolationsByVariants(violations);
123
+ }
124
+ return violations;
125
+ }
126
+ // Fallback: return empty array if core scanner not initialized
127
+ logger.debug('Core scanner not initialized, returning empty violations');
128
+ return [];
129
+ }
130
+ return {
131
+ async publishDiagnostics(uri) {
132
+ if (!state.initialized) {
133
+ logger.debug('Server not initialized, skipping diagnostics');
134
+ return;
135
+ }
136
+ const document = documents.get(uri);
137
+ if (!document) {
138
+ logger.debug(`Document not found: ${uri}`);
139
+ return;
140
+ }
141
+ const startTime = Date.now();
142
+ try {
143
+ // Scan for violations using core scanner
144
+ const violationInfos = await scanDocument(document);
145
+ // Convert ViolationInfo to Violation for backward compatibility
146
+ const violations = violationInfos.map(violationInfoToViolation);
147
+ violationsMap.set(uri, violations);
148
+ // Convert to diagnostics
149
+ const diagnostics = violationInfos
150
+ .slice(0, MAX_DIAGNOSTICS_PER_FILE)
151
+ .map(violationInfoToDiagnostic);
152
+ diagnosticsMap.set(uri, diagnostics);
153
+ // Publish to client
154
+ connection.sendDiagnostics({
155
+ uri,
156
+ version: document.version,
157
+ diagnostics,
158
+ });
159
+ const elapsed = Date.now() - startTime;
160
+ logger.debug(`Published ${diagnostics.length} diagnostics for ${uri} in ${elapsed}ms`);
161
+ // Warn if we exceeded the 200ms target
162
+ if (elapsed > 200) {
163
+ logger.warn(`Diagnostic latency exceeded 200ms target: ${elapsed}ms`);
164
+ }
165
+ }
166
+ catch (error) {
167
+ logger.error(`Error publishing diagnostics for ${uri}: ${error}`);
168
+ }
169
+ },
170
+ clearDiagnostics(uri) {
171
+ diagnosticsMap.delete(uri);
172
+ violationsMap.delete(uri);
173
+ connection.sendDiagnostics({ uri, diagnostics: [] });
174
+ logger.debug(`Cleared diagnostics for ${uri}`);
175
+ },
176
+ clearAllDiagnostics() {
177
+ for (const uri of diagnosticsMap.keys()) {
178
+ connection.sendDiagnostics({ uri, diagnostics: [] });
179
+ }
180
+ diagnosticsMap.clear();
181
+ violationsMap.clear();
182
+ logger.debug('Cleared all diagnostics');
183
+ },
184
+ getDiagnostics(uri) {
185
+ return diagnosticsMap.get(uri) ?? [];
186
+ },
187
+ getDiagnosticAtPosition(uri, line, character) {
188
+ const diagnostics = diagnosticsMap.get(uri) ?? [];
189
+ return diagnostics.find((d) => {
190
+ const { start, end } = d.range;
191
+ // Check if position is within range
192
+ if (line < start.line || line > end.line) {
193
+ return false;
194
+ }
195
+ if (line === start.line && character < start.character) {
196
+ return false;
197
+ }
198
+ if (line === end.line && character > end.character) {
199
+ return false;
200
+ }
201
+ return true;
202
+ });
203
+ },
204
+ getViolations(uri) {
205
+ return violationsMap.get(uri) ?? [];
206
+ },
207
+ scheduleUpdate(uri, delayMs = DEFAULT_DIAGNOSTIC_DELAY) {
208
+ // Cancel any existing timer
209
+ const existingTimer = updateTimers.get(uri);
210
+ if (existingTimer) {
211
+ clearTimeout(existingTimer);
212
+ }
213
+ // Schedule new update
214
+ const timer = setTimeout(() => {
215
+ updateTimers.delete(uri);
216
+ this.publishDiagnostics(uri);
217
+ }, delayMs);
218
+ updateTimers.set(uri, timer);
219
+ },
220
+ cancelUpdate(uri) {
221
+ const timer = updateTimers.get(uri);
222
+ if (timer) {
223
+ clearTimeout(timer);
224
+ updateTimers.delete(uri);
225
+ }
226
+ },
227
+ getCoreScanner() {
228
+ return coreScanner;
229
+ },
230
+ getPatternStoreAdapter() {
231
+ return patternStoreAdapter;
232
+ },
233
+ async initializeCoreIntegration(config) {
234
+ logger.info('Initializing core integration...');
235
+ // Determine root directory from workspace folders
236
+ const rootDir = state.workspaceFolders[0]?.uri
237
+ ? state.workspaceFolders[0].uri.replace('file://', '')
238
+ : '.';
239
+ const integrationConfig = {
240
+ rootDir,
241
+ ...config,
242
+ };
243
+ try {
244
+ // Initialize core scanner
245
+ coreScanner = new CoreScanner(integrationConfig, logger);
246
+ await coreScanner.initialize();
247
+ // Initialize pattern store adapter
248
+ patternStoreAdapter = new PatternStoreAdapter(integrationConfig, logger);
249
+ await patternStoreAdapter.initialize();
250
+ logger.info('Core integration initialized successfully');
251
+ }
252
+ catch (error) {
253
+ logger.error(`Failed to initialize core integration: ${error}`);
254
+ // Don't throw - allow LSP to continue without core integration
255
+ }
256
+ },
257
+ };
258
+ }
259
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/handlers/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAA8B,MAAM,yBAAyB,CAAC;AAsEvG,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,uDAAuD;AACvD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,mCAAmC;AACnC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,WAAW,CAAC,QAAkB;IACrC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC,KAAK,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,kBAAkB,CAAC,OAAO,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,WAAW,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,IAAI,CAAC;QACjC;YACE,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACtC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAsB,EACtB,SAAsC,EACtC,KAAkB,EAClB,MAAc;IAEd,oCAAoC;IACpC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEhE,mCAAmC;IACnC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAErD,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEtE,6BAA6B;IAC7B,IAAI,WAAW,GAAuB,IAAI,CAAC;IAC3C,IAAI,mBAAmB,GAA+B,IAAI,CAAC;IAE3D;;OAEG;IACH,SAAS,yBAAyB,CAAC,SAAwB;QACzD,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,QAAoB,CAAC;YACrD,IAAI,EAAE,SAAS,CAAC,SAAS;YACzB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE;gBACJ,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzB,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,WAAW,EAAE,SAAS,CAAC,QAAQ,KAAK,SAAS;gBAC7C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,IAAI,KAAK;gBACzD,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,KAAK;aAClD;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,wBAAwB,CAAC,IAAmB;QACnD,MAAM,SAAS,GAAc;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAoB;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,KAAK;YACpD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,KAAK;YAC5C,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,0CAA0C;QAC1C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS,CAAC,QAAQ,GAAG;gBACnB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBACrB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;aACrC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,YAAY,CAAC,QAAsB;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnC,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;QAEpE,yCAAyC;QACzC,IAAI,WAAW,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEpD,sEAAsE;YACtE,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC/D,UAAU,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,GAAW;YAClC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC;gBACH,yCAAyC;gBACzC,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEpD,gEAAgE;gBAChE,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBAChE,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAEnC,yBAAyB;gBACzB,MAAM,WAAW,GAAG,cAAc;qBAC/B,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;qBAClC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBAElC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAErC,oBAAoB;gBACpB,UAAU,CAAC,eAAe,CAAC;oBACzB,GAAG;oBACH,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,WAAW;iBACZ,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,aAAa,WAAW,CAAC,MAAM,oBAAoB,GAAG,OAAO,OAAO,IAAI,CAAC,CAAC;gBAEvF,uCAAuC;gBACvC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,6CAA6C,OAAO,IAAI,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,gBAAgB,CAAC,GAAW;YAC1B,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,UAAU,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,mBAAmB;YACjB,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxC,UAAU,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;YACvB,aAAa,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC1C,CAAC;QAED,cAAc,CAAC,GAAW;YACxB,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,CAAC;QAED,uBAAuB,CACrB,GAAW,EACX,IAAY,EACZ,SAAiB;YAEjB,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAElD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;gBAE/B,oCAAoC;gBACpC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;oBACzC,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;oBACvD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QAED,aAAa,CAAC,GAAW;YACvB,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;QAED,cAAc,CAAC,GAAW,EAAE,UAAkB,wBAAwB;YACpE,4BAA4B;YAC5B,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,aAAa,EAAE,CAAC;gBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAED,sBAAsB;YACtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,YAAY,CAAC,GAAW;YACtB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,cAAc;YACZ,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,sBAAsB;YACpB,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,yBAAyB,CAAC,MAAuC;YACrE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEhD,kDAAkD;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC5C,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;gBACtD,CAAC,CAAC,GAAG,CAAC;YAER,MAAM,iBAAiB,GAAmC;gBACxD,OAAO;gBACP,GAAG,MAAM;aACV,CAAC;YAEF,IAAI,CAAC;gBACH,0BAA0B;gBAC1B,WAAW,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;gBAE/B,mCAAmC;gBACnC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBACzE,MAAM,mBAAmB,CAAC,UAAU,EAAE,CAAC;gBAEvC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;gBAChE,+DAA+D;YACjE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Document Sync Handler
3
+ *
4
+ * Handles document synchronization events: open, change, save, close.
5
+ * Triggers diagnostic updates when documents change.
6
+ *
7
+ * @requirements 27.2 - THE LSP_Server SHALL support document synchronization (open, change, save, close)
8
+ * @requirements 27.7 - THE LSP_Server SHALL respond to diagnostics within 200ms of file change
9
+ */
10
+ import type { DiagnosticsHandler } from './diagnostics.js';
11
+ import type { Connection, TextDocuments, TextDocumentChangeEvent } from 'vscode-languageserver';
12
+ import type { TextDocument } from 'vscode-languageserver-textdocument';
13
+ interface Logger {
14
+ error(message: string): void;
15
+ warn(message: string): void;
16
+ info(message: string): void;
17
+ debug(message: string): void;
18
+ }
19
+ /**
20
+ * Document sync handler interface
21
+ */
22
+ export interface DocumentSyncHandler {
23
+ /** Handle document open */
24
+ onDidOpen(document: TextDocument): void;
25
+ /** Handle document content change */
26
+ onDidChangeContent(event: TextDocumentChangeEvent<TextDocument>): void;
27
+ /** Handle document save */
28
+ onDidSave(document: TextDocument): void;
29
+ /** Handle document close */
30
+ onDidClose(document: TextDocument): void;
31
+ }
32
+ /**
33
+ * Create the document sync handler
34
+ */
35
+ export declare function createDocumentSyncHandler(_connection: Connection, _documents: TextDocuments<TextDocument>, diagnosticsHandler: DiagnosticsHandler, logger: Logger): DocumentSyncHandler;
36
+ export {};
37
+ //# sourceMappingURL=document-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-sync.d.ts","sourceRoot":"","sources":["../../src/handlers/document-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAM3D,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,mBAAmB;IAClC,2BAA2B;IAC3B,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,qCAAqC;IACrC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACvE,2BAA2B;IAC3B,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,4BAA4B;IAC5B,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1C;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,mBAAmB,CAyCrB"}
1
+ {"version":3,"file":"document-sync.d.ts","sourceRoot":"","sources":["../../src/handlers/document-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChG,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,mBAAmB;IAClC,2BAA2B;IAC3B,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,qCAAqC;IACrC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACvE,2BAA2B;IAC3B,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,4BAA4B;IAC5B,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1C;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,mBAAmB,CAyCrB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Document Sync Handler
3
+ *
4
+ * Handles document synchronization events: open, change, save, close.
5
+ * Triggers diagnostic updates when documents change.
6
+ *
7
+ * @requirements 27.2 - THE LSP_Server SHALL support document synchronization (open, change, save, close)
8
+ * @requirements 27.7 - THE LSP_Server SHALL respond to diagnostics within 200ms of file change
9
+ */
10
+ // ============================================================================
11
+ // Handler Factory
12
+ // ============================================================================
13
+ /**
14
+ * Create the document sync handler
15
+ */
16
+ export function createDocumentSyncHandler(_connection, _documents, diagnosticsHandler, logger) {
17
+ return {
18
+ onDidOpen(document) {
19
+ const uri = document.uri;
20
+ logger.debug(`Document opened: ${uri}`);
21
+ // Publish diagnostics immediately for newly opened documents
22
+ diagnosticsHandler.scheduleUpdate(uri, 0);
23
+ },
24
+ onDidChangeContent(event) {
25
+ const document = event.document;
26
+ const uri = document.uri;
27
+ logger.debug(`Document changed: ${uri} (v${document.version})`);
28
+ // Schedule diagnostic update with debouncing
29
+ // This ensures we meet the 200ms latency requirement while
30
+ // avoiding excessive updates during rapid typing
31
+ diagnosticsHandler.scheduleUpdate(uri);
32
+ },
33
+ onDidSave(document) {
34
+ const uri = document.uri;
35
+ logger.debug(`Document saved: ${uri}`);
36
+ // Publish diagnostics immediately on save
37
+ diagnosticsHandler.publishDiagnostics(uri);
38
+ },
39
+ onDidClose(document) {
40
+ const uri = document.uri;
41
+ logger.debug(`Document closed: ${uri}`);
42
+ // Cancel any pending updates
43
+ diagnosticsHandler.cancelUpdate(uri);
44
+ // Clear diagnostics for closed document
45
+ diagnosticsHandler.clearDiagnostics(uri);
46
+ },
47
+ };
48
+ }
49
+ //# sourceMappingURL=document-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-sync.js","sourceRoot":"","sources":["../../src/handlers/document-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+BH,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAuB,EACvB,UAAuC,EACvC,kBAAsC,EACtC,MAAc;IAEd,OAAO;QACL,SAAS,CAAC,QAAsB;YAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAExC,6DAA6D;YAC7D,kBAAkB,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,kBAAkB,CAAC,KAA4C;YAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YAEzB,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,MAAM,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;YAEhE,6CAA6C;YAC7C,2DAA2D;YAC3D,iDAAiD;YACjD,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,SAAS,CAAC,QAAsB;YAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAEvC,0CAA0C;YAC1C,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,UAAU,CAAC,QAAsB;YAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAExC,6BAA6B;YAC7B,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAErC,wCAAwC;YACxC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Hover Handler
3
+ *
4
+ * Provides hover information for pattern violations.
5
+ * Shows violation details, pattern information, and available actions.
6
+ *
7
+ * @requirements 27.5 - THE LSP_Server SHALL provide hover information for violations
8
+ */
9
+ import type { DiagnosticsHandler } from './diagnostics.js';
10
+ import type { Connection, TextDocuments, Hover, HoverParams } 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
+ * Hover handler interface
20
+ */
21
+ export interface HoverHandler {
22
+ /** Handle hover request */
23
+ onHover(params: HoverParams): Hover | null;
24
+ }
25
+ /**
26
+ * Create the hover handler
27
+ */
28
+ export declare function createHoverHandler(_connection: Connection, _documents: TextDocuments<TextDocument>, diagnosticsHandler: DiagnosticsHandler, logger: Logger): HoverHandler;
29
+ export {};
30
+ //# sourceMappingURL=hover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/handlers/hover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,kBAAkB,CAAC;AAMhF,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,YAAY;IAC3B,2BAA2B;IAC3B,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;CAC5C;AAqGD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,YAAY,CAgCd"}
1
+ {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/handlers/hover.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACZ,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,YAAY;IAC3B,2BAA2B;IAC3B,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;CAC5C;AAqGD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,GACb,YAAY,CAgCd"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Hover Handler
3
+ *
4
+ * Provides hover information for pattern violations.
5
+ * Shows violation details, pattern information, and available actions.
6
+ *
7
+ * @requirements 27.5 - THE LSP_Server SHALL provide hover information for violations
8
+ */
9
+ // ============================================================================
10
+ // Helpers
11
+ // ============================================================================
12
+ /**
13
+ * Get severity icon for display
14
+ */
15
+ function getSeverityIcon(severity) {
16
+ switch (severity) {
17
+ case 1: // Error
18
+ return '🔴';
19
+ case 2: // Warning
20
+ return '🟡';
21
+ case 3: // Information
22
+ return '🔵';
23
+ case 4: // Hint
24
+ return '💡';
25
+ default:
26
+ return '⚪';
27
+ }
28
+ }
29
+ /**
30
+ * Get severity name for display
31
+ */
32
+ function getSeverityName(severity) {
33
+ switch (severity) {
34
+ case 1:
35
+ return 'Error';
36
+ case 2:
37
+ return 'Warning';
38
+ case 3:
39
+ return 'Info';
40
+ case 4:
41
+ return 'Hint';
42
+ default:
43
+ return 'Unknown';
44
+ }
45
+ }
46
+ /**
47
+ * Generate hover content for a diagnostic
48
+ */
49
+ function generateHoverContent(diagnostic) {
50
+ const lines = [];
51
+ const data = diagnostic.data;
52
+ // Header with severity icon
53
+ const icon = getSeverityIcon(diagnostic.severity);
54
+ const severityName = getSeverityName(diagnostic.severity);
55
+ lines.push(`## ${icon} Drift Violation (${severityName})`);
56
+ lines.push('');
57
+ // Message
58
+ lines.push(`**Message:** ${diagnostic.message}`);
59
+ lines.push('');
60
+ // Pattern information
61
+ if (data) {
62
+ lines.push(`**Pattern:** \`${data.patternId}\``);
63
+ lines.push('');
64
+ }
65
+ // Divider
66
+ lines.push('---');
67
+ lines.push('');
68
+ // Available actions
69
+ lines.push('### Available Actions');
70
+ lines.push('');
71
+ if (data?.hasQuickFix) {
72
+ lines.push('- 💡 **Quick Fix** available');
73
+ }
74
+ lines.push('- ✅ **Approve** this pattern');
75
+ lines.push('- 🚫 **Ignore** this pattern');
76
+ lines.push('- 📝 **Create Variant** for intentional deviation');
77
+ if (data?.aiExplainAvailable) {
78
+ lines.push('- 🤖 **Explain with AI**');
79
+ }
80
+ if (data?.aiFixAvailable) {
81
+ lines.push('- 🔧 **Fix with AI**');
82
+ }
83
+ lines.push('');
84
+ lines.push('---');
85
+ lines.push('');
86
+ lines.push('*Use Quick Fix (Ctrl+.) to see available actions*');
87
+ return lines.join('\n');
88
+ }
89
+ // ============================================================================
90
+ // Handler Factory
91
+ // ============================================================================
92
+ /**
93
+ * Create the hover handler
94
+ */
95
+ export function createHoverHandler(_connection, _documents, diagnosticsHandler, logger) {
96
+ return {
97
+ onHover(params) {
98
+ const uri = params.textDocument.uri;
99
+ const position = params.position;
100
+ logger.debug(`Hover request at ${uri}:${position.line}:${position.character}`);
101
+ // Find diagnostic at this position
102
+ const diagnostic = diagnosticsHandler.getDiagnosticAtPosition(uri, position.line, position.character);
103
+ if (!diagnostic) {
104
+ // No violation at this position
105
+ return null;
106
+ }
107
+ // Generate hover content
108
+ const content = generateHoverContent(diagnostic);
109
+ return {
110
+ contents: {
111
+ kind: 'markdown',
112
+ value: content,
113
+ },
114
+ range: diagnostic.range,
115
+ };
116
+ },
117
+ };
118
+ }
119
+ //# sourceMappingURL=hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/handlers/hover.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core-scanner.d.ts","sourceRoot":"","sources":["../../src/integration/core-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EAWb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,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;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAA8E;IAC/F,OAAO,CAAC,YAAY,CAAgB;gBAExB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAAE,MAAM,EAAE,MAAM;IAKvE;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2HxF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAC3C,MAAM,EAAE,MAAM,GACb,WAAW,CAEb"}
1
+ {"version":3,"file":"core-scanner.d.ts","sourceRoot":"","sources":["../../src/integration/core-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EAWb,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,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;;;;;;GAMG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAA8E;IAC/F,OAAO,CAAC,YAAY,CAAgB;gBAExB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAAE,MAAM,EAAE,MAAM;IAKvE;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2HxF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAC3C,MAAM,EAAE,MAAM,GACb,WAAW,CAEb"}