driftdetect-lsp 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/bin/server.d.ts +12 -0
  2. package/dist/bin/server.d.ts.map +1 -0
  3. package/dist/bin/server.js +26 -0
  4. package/dist/bin/server.js.map +1 -0
  5. package/dist/capabilities.d.ts +91 -0
  6. package/dist/capabilities.d.ts.map +1 -0
  7. package/dist/capabilities.js +183 -0
  8. package/dist/capabilities.js.map +1 -0
  9. package/dist/commands/approve-pattern.d.ts +15 -0
  10. package/dist/commands/approve-pattern.d.ts.map +1 -0
  11. package/dist/commands/approve-pattern.js +83 -0
  12. package/dist/commands/approve-pattern.js.map +1 -0
  13. package/dist/commands/create-variant.d.ts +22 -0
  14. package/dist/commands/create-variant.d.ts.map +1 -0
  15. package/dist/commands/create-variant.js +109 -0
  16. package/dist/commands/create-variant.js.map +1 -0
  17. package/dist/commands/explain-ai.d.ts +11 -0
  18. package/dist/commands/explain-ai.d.ts.map +1 -0
  19. package/dist/commands/explain-ai.js +144 -0
  20. package/dist/commands/explain-ai.js.map +1 -0
  21. package/dist/commands/fix-ai.d.ts +11 -0
  22. package/dist/commands/fix-ai.d.ts.map +1 -0
  23. package/dist/commands/fix-ai.js +146 -0
  24. package/dist/commands/fix-ai.js.map +1 -0
  25. package/dist/commands/ignore-once.d.ts +33 -0
  26. package/dist/commands/ignore-once.d.ts.map +1 -0
  27. package/dist/commands/ignore-once.js +147 -0
  28. package/dist/commands/ignore-once.js.map +1 -0
  29. package/dist/commands/ignore-pattern.d.ts +15 -0
  30. package/dist/commands/ignore-pattern.d.ts.map +1 -0
  31. package/dist/commands/ignore-pattern.js +77 -0
  32. package/dist/commands/ignore-pattern.js.map +1 -0
  33. package/dist/commands/index.d.ts +14 -0
  34. package/dist/commands/index.d.ts.map +1 -0
  35. package/dist/commands/index.js +14 -0
  36. package/dist/commands/index.js.map +1 -0
  37. package/dist/commands/rescan.d.ts +19 -0
  38. package/dist/commands/rescan.d.ts.map +1 -0
  39. package/dist/commands/rescan.js +125 -0
  40. package/dist/commands/rescan.js.map +1 -0
  41. package/dist/commands/show-patterns.d.ts +30 -0
  42. package/dist/commands/show-patterns.d.ts.map +1 -0
  43. package/dist/commands/show-patterns.js +175 -0
  44. package/dist/commands/show-patterns.js.map +1 -0
  45. package/dist/commands/show-violations.d.ts +11 -0
  46. package/dist/commands/show-violations.d.ts.map +1 -0
  47. package/dist/commands/show-violations.js +259 -0
  48. package/dist/commands/show-violations.js.map +1 -0
  49. package/dist/handlers/code-actions.d.ts +32 -0
  50. package/dist/handlers/code-actions.d.ts.map +1 -0
  51. package/dist/handlers/code-actions.js +184 -0
  52. package/dist/handlers/code-actions.js.map +1 -0
  53. package/dist/handlers/code-lens.d.ts +32 -0
  54. package/dist/handlers/code-lens.d.ts.map +1 -0
  55. package/dist/handlers/code-lens.js +162 -0
  56. package/dist/handlers/code-lens.js.map +1 -0
  57. package/dist/handlers/commands.d.ts +48 -0
  58. package/dist/handlers/commands.d.ts.map +1 -0
  59. package/dist/handlers/commands.js +360 -0
  60. package/dist/handlers/commands.js.map +1 -0
  61. package/dist/handlers/diagnostics.d.ts +73 -0
  62. package/dist/handlers/diagnostics.d.ts.map +1 -0
  63. package/dist/handlers/diagnostics.js +259 -0
  64. package/dist/handlers/diagnostics.js.map +1 -0
  65. package/dist/handlers/document-sync.d.ts +37 -0
  66. package/dist/handlers/document-sync.d.ts.map +1 -0
  67. package/dist/handlers/document-sync.js +49 -0
  68. package/dist/handlers/document-sync.js.map +1 -0
  69. package/dist/handlers/hover.d.ts +30 -0
  70. package/dist/handlers/hover.d.ts.map +1 -0
  71. package/dist/handlers/hover.js +119 -0
  72. package/dist/handlers/hover.js.map +1 -0
  73. package/dist/handlers/index.d.ts +23 -0
  74. package/dist/handlers/index.d.ts.map +1 -0
  75. package/dist/handlers/index.js +16 -0
  76. package/dist/handlers/index.js.map +1 -0
  77. package/dist/handlers/initialize.d.ts +41 -0
  78. package/dist/handlers/initialize.d.ts.map +1 -0
  79. package/dist/handlers/initialize.js +33 -0
  80. package/dist/handlers/initialize.js.map +1 -0
  81. package/dist/index.d.ts +22 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +26 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/integration/core-scanner.d.ts +89 -0
  86. package/dist/integration/core-scanner.d.ts.map +1 -0
  87. package/dist/integration/core-scanner.js +309 -0
  88. package/dist/integration/core-scanner.js.map +1 -0
  89. package/dist/integration/index.d.ts +11 -0
  90. package/dist/integration/index.d.ts.map +1 -0
  91. package/dist/integration/index.js +11 -0
  92. package/dist/integration/index.js.map +1 -0
  93. package/dist/integration/pattern-store-adapter.d.ts +117 -0
  94. package/dist/integration/pattern-store-adapter.d.ts.map +1 -0
  95. package/dist/integration/pattern-store-adapter.js +349 -0
  96. package/dist/integration/pattern-store-adapter.js.map +1 -0
  97. package/dist/integration/types.d.ts +134 -0
  98. package/dist/integration/types.d.ts.map +1 -0
  99. package/dist/integration/types.js +39 -0
  100. package/dist/integration/types.js.map +1 -0
  101. package/dist/server/index.d.ts +5 -0
  102. package/dist/server/index.d.ts.map +1 -0
  103. package/dist/server/index.js +5 -0
  104. package/dist/server/index.js.map +1 -0
  105. package/dist/server/types.d.ts +139 -0
  106. package/dist/server/types.d.ts.map +1 -0
  107. package/dist/server/types.js +8 -0
  108. package/dist/server/types.js.map +1 -0
  109. package/dist/server.d.ts +63 -0
  110. package/dist/server.d.ts.map +1 -0
  111. package/dist/server.js +208 -0
  112. package/dist/server.js.map +1 -0
  113. package/dist/types/index.d.ts +5 -0
  114. package/dist/types/index.d.ts.map +1 -0
  115. package/dist/types/index.js +5 -0
  116. package/dist/types/index.js.map +1 -0
  117. package/dist/types/lsp-types.d.ts +321 -0
  118. package/dist/types/lsp-types.d.ts.map +1 -0
  119. package/dist/types/lsp-types.js +274 -0
  120. package/dist/types/lsp-types.js.map +1 -0
  121. package/dist/utils/diagnostic.d.ts +84 -0
  122. package/dist/utils/diagnostic.d.ts.map +1 -0
  123. package/dist/utils/diagnostic.js +256 -0
  124. package/dist/utils/diagnostic.js.map +1 -0
  125. package/dist/utils/document.d.ts +40 -0
  126. package/dist/utils/document.d.ts.map +1 -0
  127. package/dist/utils/document.js +132 -0
  128. package/dist/utils/document.js.map +1 -0
  129. package/dist/utils/index.d.ts +8 -0
  130. package/dist/utils/index.d.ts.map +1 -0
  131. package/dist/utils/index.js +8 -0
  132. package/dist/utils/index.js.map +1 -0
  133. package/dist/utils/position.d.ts +44 -0
  134. package/dist/utils/position.d.ts.map +1 -0
  135. package/dist/utils/position.js +96 -0
  136. package/dist/utils/position.js.map +1 -0
  137. package/dist/utils/workspace.d.ts +98 -0
  138. package/dist/utils/workspace.d.ts.map +1 -0
  139. package/dist/utils/workspace.js +241 -0
  140. package/dist/utils/workspace.js.map +1 -0
  141. package/package.json +49 -0
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Rescan Command - drift.rescan
3
+ * @requirements 28.7
4
+ */
5
+ import type { ServerContext, DocumentScanner, DiagnosticPublisher, CommandResult } from '../server/types.js';
6
+ /**
7
+ * Execute rescan command
8
+ * Rescans documents for drift violations
9
+ */
10
+ export declare function executeRescan(context: ServerContext, scanner: DocumentScanner, diagnosticPublisher: DiagnosticPublisher, uri?: string): Promise<CommandResult>;
11
+ /**
12
+ * Execute rescan for specific patterns
13
+ */
14
+ export declare function executeRescanPatterns(context: ServerContext, scanner: DocumentScanner, diagnosticPublisher: DiagnosticPublisher, patternIds: string[]): Promise<CommandResult>;
15
+ /**
16
+ * Execute incremental rescan for changed files
17
+ */
18
+ export declare function executeIncrementalRescan(context: ServerContext, scanner: DocumentScanner, diagnosticPublisher: DiagnosticPublisher, changedUris: string[]): Promise<CommandResult>;
19
+ //# sourceMappingURL=rescan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rescan.d.ts","sourceRoot":"","sources":["../../src/commands/rescan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE7G;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CA6DxB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,eAAe,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Rescan Command - drift.rescan
3
+ * @requirements 28.7
4
+ */
5
+ /**
6
+ * Execute rescan command
7
+ * Rescans documents for drift violations
8
+ */
9
+ export async function executeRescan(context, scanner, diagnosticPublisher, uri) {
10
+ const { state, logger, connection } = context;
11
+ logger.info(`Rescan requested${uri ? ` for: ${uri}` : ' for all documents'}`);
12
+ // Clear caches
13
+ if (uri) {
14
+ scanner.invalidate(uri);
15
+ }
16
+ else {
17
+ scanner.clearCache();
18
+ }
19
+ // Note: withProgress is not available in vscode-languageserver
20
+ // Show a simple message instead
21
+ const documentsToScan = uri
22
+ ? [uri].filter((u) => state.documents.has(u))
23
+ : Array.from(state.documents.keys());
24
+ if (documentsToScan.length === 0) {
25
+ return {
26
+ success: true,
27
+ message: 'No documents to scan',
28
+ data: { scannedCount: 0 },
29
+ };
30
+ }
31
+ connection.window.showInformationMessage(`Rescanning ${documentsToScan.length} document(s)...`);
32
+ let scannedCount = 0;
33
+ let totalViolations = 0;
34
+ for (const docUri of documentsToScan) {
35
+ try {
36
+ // Publish diagnostics (which triggers scan)
37
+ await diagnosticPublisher.publish(docUri);
38
+ scannedCount++;
39
+ // Count violations
40
+ const violations = state.violations.get(docUri) ?? [];
41
+ totalViolations += violations.length;
42
+ }
43
+ catch (error) {
44
+ logger.error(`Error scanning ${docUri}: ${error}`);
45
+ }
46
+ }
47
+ // Show summary
48
+ const message = `Rescan complete: ${scannedCount} document${scannedCount === 1 ? '' : 's'} scanned, ${totalViolations} violation${totalViolations === 1 ? '' : 's'} found`;
49
+ connection.window.showInformationMessage(message);
50
+ logger.info(message);
51
+ return {
52
+ success: true,
53
+ message,
54
+ data: {
55
+ scannedCount,
56
+ totalViolations,
57
+ documentsScanned: documentsToScan.slice(0, scannedCount),
58
+ },
59
+ };
60
+ }
61
+ /**
62
+ * Execute rescan for specific patterns
63
+ */
64
+ export async function executeRescanPatterns(context, scanner, diagnosticPublisher, patternIds) {
65
+ const { state, logger } = context;
66
+ logger.info(`Rescan requested for patterns: ${patternIds.join(', ')}`);
67
+ // Clear all caches (pattern-specific invalidation not supported yet)
68
+ scanner.clearCache();
69
+ // Rescan all documents
70
+ const result = await executeRescan(context, scanner, diagnosticPublisher);
71
+ // Filter results to only include specified patterns
72
+ if (result.success && result.data) {
73
+ const data = result.data;
74
+ // Count violations for specified patterns only
75
+ let patternViolations = 0;
76
+ for (const violations of state.violations.values()) {
77
+ patternViolations += violations.filter((v) => patternIds.includes(v.patternId)).length;
78
+ }
79
+ return {
80
+ success: true,
81
+ message: `Rescan complete: ${data.scannedCount} documents scanned, ${patternViolations} violations found for specified patterns`,
82
+ data: {
83
+ ...data,
84
+ patternIds,
85
+ patternViolations,
86
+ },
87
+ };
88
+ }
89
+ return result;
90
+ }
91
+ /**
92
+ * Execute incremental rescan for changed files
93
+ */
94
+ export async function executeIncrementalRescan(context, scanner, diagnosticPublisher, changedUris) {
95
+ const { logger } = context;
96
+ logger.info(`Incremental rescan for ${changedUris.length} changed files`);
97
+ // Invalidate changed files
98
+ for (const uri of changedUris) {
99
+ scanner.invalidate(uri);
100
+ }
101
+ // Rescan only changed files
102
+ let scannedCount = 0;
103
+ let totalViolations = 0;
104
+ for (const uri of changedUris) {
105
+ try {
106
+ await diagnosticPublisher.publish(uri);
107
+ scannedCount++;
108
+ const violations = context.state.violations.get(uri) ?? [];
109
+ totalViolations += violations.length;
110
+ }
111
+ catch (error) {
112
+ logger.error(`Error scanning ${uri}: ${error}`);
113
+ }
114
+ }
115
+ return {
116
+ success: true,
117
+ message: `Incremental rescan complete: ${scannedCount} files, ${totalViolations} violations`,
118
+ data: {
119
+ scannedCount,
120
+ totalViolations,
121
+ changedUris,
122
+ },
123
+ };
124
+ }
125
+ //# sourceMappingURL=rescan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rescan.js","sourceRoot":"","sources":["../../src/commands/rescan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Show Patterns Command - drift.showPatterns
3
+ * @requirements 28.8
4
+ */
5
+ import type { ServerContext } from '../server/types.js';
6
+ import type { CommandResult } from '../handlers/commands.js';
7
+ /**
8
+ * Execute show patterns command
9
+ * Shows detected patterns in the workspace
10
+ */
11
+ export declare function executeShowPatterns(context: ServerContext, patternId?: string): Promise<CommandResult>;
12
+ /**
13
+ * Get pattern statistics
14
+ */
15
+ export declare function getPatternStatistics(patterns: Map<string, {
16
+ id: string;
17
+ category?: string;
18
+ }>, violations: Map<string, Array<{
19
+ patternId: string;
20
+ severity: string;
21
+ }>>): {
22
+ totalPatterns: number;
23
+ totalViolations: number;
24
+ byCategory: Record<string, {
25
+ patterns: number;
26
+ violations: number;
27
+ }>;
28
+ bySeverity: Record<string, number>;
29
+ };
30
+ //# sourceMappingURL=show-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-patterns.d.ts","sourceRoot":"","sources":["../../src/commands/show-patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA0ExB;AAyGD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GACtE;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAsCA"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Show Patterns Command - drift.showPatterns
3
+ * @requirements 28.8
4
+ */
5
+ /**
6
+ * Execute show patterns command
7
+ * Shows detected patterns in the workspace
8
+ */
9
+ export async function executeShowPatterns(context, patternId) {
10
+ const { state, logger, connection } = context;
11
+ logger.info(`Show patterns requested${patternId ? ` for: ${patternId}` : ''}`);
12
+ if (patternId) {
13
+ // Show specific pattern
14
+ const pattern = state.patterns.get(patternId);
15
+ if (!pattern) {
16
+ return {
17
+ success: false,
18
+ error: `Pattern not found: ${patternId}`,
19
+ };
20
+ }
21
+ // Count violations for this pattern
22
+ let violationCount = 0;
23
+ const affectedFiles = [];
24
+ for (const [uri, violations] of state.violations) {
25
+ const patternViolations = violations.filter((v) => v.patternId === patternId);
26
+ if (patternViolations.length > 0) {
27
+ violationCount += patternViolations.length;
28
+ affectedFiles.push(uri);
29
+ }
30
+ }
31
+ // Format pattern details
32
+ const details = formatPatternDetails(pattern, violationCount, affectedFiles);
33
+ // Show in message
34
+ connection.window.showInformationMessage(details);
35
+ return {
36
+ success: true,
37
+ message: `Pattern details for: ${patternId}`,
38
+ data: {
39
+ pattern,
40
+ violationCount,
41
+ affectedFiles,
42
+ },
43
+ };
44
+ }
45
+ else {
46
+ // Show all patterns
47
+ const patterns = Array.from(state.patterns.values());
48
+ if (patterns.length === 0) {
49
+ connection.window.showInformationMessage('No patterns detected in the workspace.');
50
+ return {
51
+ success: true,
52
+ message: 'No patterns detected',
53
+ data: { patterns: [] },
54
+ };
55
+ }
56
+ // Group patterns by category
57
+ const patternsByCategory = groupPatternsByCategory(patterns);
58
+ // Format summary
59
+ const summary = formatPatternsSummary(patternsByCategory, state.violations);
60
+ // Show summary
61
+ connection.window.showInformationMessage(summary);
62
+ return {
63
+ success: true,
64
+ message: `Found ${patterns.length} patterns`,
65
+ data: {
66
+ patterns,
67
+ patternsByCategory: Object.fromEntries(patternsByCategory),
68
+ },
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Format pattern details for display
74
+ */
75
+ function formatPatternDetails(pattern, violationCount, affectedFiles) {
76
+ const lines = [];
77
+ lines.push(`📋 Pattern: ${pattern.name ?? pattern.id ?? 'Unknown'}`);
78
+ lines.push('');
79
+ if (pattern.category) {
80
+ lines.push(`Category: ${pattern.category}${pattern.subcategory ? ` > ${pattern.subcategory}` : ''}`);
81
+ }
82
+ if (pattern.description) {
83
+ lines.push(`Description: ${pattern.description}`);
84
+ }
85
+ if (pattern.confidence !== undefined) {
86
+ lines.push(`Confidence: ${Math.round(pattern.confidence * 100)}%`);
87
+ }
88
+ lines.push('');
89
+ lines.push(`Violations: ${violationCount}`);
90
+ lines.push(`Affected files: ${affectedFiles.length}`);
91
+ if (affectedFiles.length > 0 && affectedFiles.length <= 5) {
92
+ lines.push('');
93
+ lines.push('Files:');
94
+ for (const file of affectedFiles) {
95
+ const fileName = file.split('/').pop() ?? file;
96
+ lines.push(` - ${fileName}`);
97
+ }
98
+ }
99
+ return lines.join('\n');
100
+ }
101
+ /**
102
+ * Group patterns by category
103
+ */
104
+ function groupPatternsByCategory(patterns) {
105
+ const groups = new Map();
106
+ for (const pattern of patterns) {
107
+ const category = pattern.category ?? 'Uncategorized';
108
+ const group = groups.get(category) ?? [];
109
+ group.push(pattern);
110
+ groups.set(category, group);
111
+ }
112
+ return groups;
113
+ }
114
+ /**
115
+ * Format patterns summary for display
116
+ */
117
+ function formatPatternsSummary(patternsByCategory, violations) {
118
+ const lines = [];
119
+ lines.push(`📊 Detected Patterns Summary`);
120
+ lines.push('');
121
+ let totalPatterns = 0;
122
+ let totalViolations = 0;
123
+ for (const [category, patterns] of patternsByCategory) {
124
+ totalPatterns += patterns.length;
125
+ // Count violations for this category
126
+ let categoryViolations = 0;
127
+ for (const pattern of patterns) {
128
+ for (const docViolations of violations.values()) {
129
+ categoryViolations += docViolations.filter((v) => v.patternId === pattern.id).length;
130
+ }
131
+ }
132
+ totalViolations += categoryViolations;
133
+ lines.push(`${category}: ${patterns.length} pattern${patterns.length === 1 ? '' : 's'}, ${categoryViolations} violation${categoryViolations === 1 ? '' : 's'}`);
134
+ }
135
+ lines.push('');
136
+ lines.push(`Total: ${totalPatterns} patterns, ${totalViolations} violations`);
137
+ return lines.join('\n');
138
+ }
139
+ /**
140
+ * Get pattern statistics
141
+ */
142
+ export function getPatternStatistics(patterns, violations) {
143
+ const byCategory = {};
144
+ const bySeverity = { error: 0, warning: 0, info: 0, hint: 0 };
145
+ let totalViolations = 0;
146
+ // Count patterns by category
147
+ for (const pattern of patterns.values()) {
148
+ const category = pattern.category ?? 'Uncategorized';
149
+ if (!byCategory[category]) {
150
+ byCategory[category] = { patterns: 0, violations: 0 };
151
+ }
152
+ byCategory[category].patterns++;
153
+ }
154
+ // Count violations
155
+ for (const docViolations of violations.values()) {
156
+ for (const violation of docViolations) {
157
+ totalViolations++;
158
+ // By severity
159
+ bySeverity[violation.severity] = (bySeverity[violation.severity] ?? 0) + 1;
160
+ // By category
161
+ const pattern = patterns.get(violation.patternId);
162
+ const category = pattern?.category ?? 'Uncategorized';
163
+ if (byCategory[category]) {
164
+ byCategory[category].violations++;
165
+ }
166
+ }
167
+ }
168
+ return {
169
+ totalPatterns: patterns.size,
170
+ totalViolations,
171
+ byCategory,
172
+ bySeverity,
173
+ };
174
+ }
175
+ //# sourceMappingURL=show-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-patterns.js","sourceRoot":"","sources":["../../src/commands/show-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Show Violations Command - drift.showViolations
3
+ * @requirements 28.9
4
+ */
5
+ import type { ServerContext, CommandResult } from '../server/types.js';
6
+ /**
7
+ * Execute show violations command
8
+ * Shows violations in the workspace
9
+ */
10
+ export declare function executeShowViolations(context: ServerContext, uri?: string, patternId?: string, violationId?: string): Promise<CommandResult>;
11
+ //# sourceMappingURL=show-violations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-violations.d.ts","sourceRoot":"","sources":["../../src/commands/show-violations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAiB,MAAM,oBAAoB,CAAC;AAsBtF;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,aAAa,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAgExB"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Show Violations Command - drift.showViolations
3
+ * @requirements 28.9
4
+ */
5
+ // ============================================================================
6
+ // Main Command
7
+ // ============================================================================
8
+ /**
9
+ * Execute show violations command
10
+ * Shows violations in the workspace
11
+ */
12
+ export async function executeShowViolations(context, uri, patternId, violationId) {
13
+ const { state, logger, connection } = context;
14
+ logger.info(`Show violations requested${uri ? ` for: ${uri}` : ''}${patternId ? ` pattern: ${patternId}` : ''}`);
15
+ // If specific violation requested
16
+ if (violationId) {
17
+ return showSpecificViolation(context, violationId);
18
+ }
19
+ // Get violations to show
20
+ let violations = [];
21
+ if (uri) {
22
+ // Violations for specific document
23
+ const docViolations = state.violations.get(uri) ?? [];
24
+ violations = docViolations.map((v) => ({ uri, violation: v }));
25
+ }
26
+ else {
27
+ // All violations
28
+ for (const [docUri, docViolations] of state.violations) {
29
+ for (const v of docViolations) {
30
+ violations.push({ uri: docUri, violation: v });
31
+ }
32
+ }
33
+ }
34
+ // Filter by pattern if specified
35
+ if (patternId) {
36
+ violations = violations.filter((entry) => entry.violation.patternId === patternId);
37
+ }
38
+ if (violations.length === 0) {
39
+ const message = uri
40
+ ? `No violations found in ${getFileName(uri)}`
41
+ : patternId
42
+ ? `No violations found for pattern: ${patternId}`
43
+ : 'No violations found in workspace';
44
+ connection.window.showInformationMessage(message);
45
+ return {
46
+ success: true,
47
+ message,
48
+ data: { violations: [] },
49
+ };
50
+ }
51
+ // Format violations summary
52
+ const summary = formatViolationsSummary(violations, state.patterns);
53
+ // Show summary
54
+ connection.window.showInformationMessage(summary);
55
+ return {
56
+ success: true,
57
+ message: `Found ${violations.length} violations`,
58
+ data: {
59
+ violations: violations.map((v) => ({
60
+ uri: v.uri,
61
+ ...v.violation,
62
+ })),
63
+ summary: getViolationStatistics(violations),
64
+ },
65
+ };
66
+ }
67
+ /**
68
+ * Show specific violation details
69
+ */
70
+ async function showSpecificViolation(context, violationId) {
71
+ const { state, logger, connection } = context;
72
+ // Find the violation
73
+ let foundViolation = null;
74
+ let foundUri = '';
75
+ for (const [uri, violations] of state.violations) {
76
+ const violation = violations.find((v) => v.id === violationId);
77
+ if (violation) {
78
+ foundViolation = violation;
79
+ foundUri = uri;
80
+ break;
81
+ }
82
+ }
83
+ if (!foundViolation) {
84
+ return {
85
+ success: false,
86
+ error: `Violation not found: ${violationId}`,
87
+ };
88
+ }
89
+ // Get pattern details
90
+ const pattern = state.patterns.get(foundViolation.patternId);
91
+ // Format violation details
92
+ const details = formatViolationDetails(foundViolation, foundUri, pattern);
93
+ // Show details
94
+ connection.window.showInformationMessage(details);
95
+ // Offer to navigate to violation
96
+ const navigateResult = await connection.window.showInformationMessage(`Navigate to violation at line ${foundViolation.range.start.line + 1}?`, { title: 'Go to Location' }, { title: 'Close' });
97
+ if (navigateResult?.title === 'Go to Location') {
98
+ // TODO: Send notification to client to navigate to location
99
+ logger.info(`Navigate to ${foundUri}:${foundViolation.range.start.line + 1}`);
100
+ }
101
+ return {
102
+ success: true,
103
+ message: `Violation details for: ${violationId}`,
104
+ data: {
105
+ violation: foundViolation,
106
+ uri: foundUri,
107
+ pattern,
108
+ },
109
+ };
110
+ }
111
+ /**
112
+ * Format violations summary
113
+ */
114
+ function formatViolationsSummary(violations, patterns) {
115
+ const lines = [];
116
+ lines.push(`⚠️ Drift Violations Summary`);
117
+ lines.push('');
118
+ // Group by severity
119
+ const bySeverity = groupBySeverity(violations);
120
+ if (bySeverity.error.length > 0) {
121
+ lines.push(`🔴 Errors: ${bySeverity.error.length}`);
122
+ }
123
+ if (bySeverity.warning.length > 0) {
124
+ lines.push(`🟡 Warnings: ${bySeverity.warning.length}`);
125
+ }
126
+ if (bySeverity.info.length > 0) {
127
+ lines.push(`🔵 Info: ${bySeverity.info.length}`);
128
+ }
129
+ if (bySeverity.hint.length > 0) {
130
+ lines.push(`💡 Hints: ${bySeverity.hint.length}`);
131
+ }
132
+ lines.push('');
133
+ // Group by pattern
134
+ const byPattern = groupByPattern(violations);
135
+ const patternCount = byPattern.size;
136
+ lines.push(`Across ${patternCount} pattern${patternCount === 1 ? '' : 's'}:`);
137
+ lines.push('');
138
+ for (const [patternId, patternViolations] of byPattern) {
139
+ const pattern = patterns.get(patternId);
140
+ const name = pattern?.name ?? patternId;
141
+ lines.push(` • ${name}: ${patternViolations.length}`);
142
+ }
143
+ // Group by file
144
+ const byFile = groupByFile(violations);
145
+ const fileCount = byFile.size;
146
+ lines.push('');
147
+ lines.push(`In ${fileCount} file${fileCount === 1 ? '' : 's'}`);
148
+ return lines.join('\n');
149
+ }
150
+ /**
151
+ * Format violation details
152
+ */
153
+ function formatViolationDetails(violation, uri, pattern) {
154
+ const lines = [];
155
+ const severityIcon = getSeverityIcon(violation.severity);
156
+ lines.push(`${severityIcon} Violation Details`);
157
+ lines.push('');
158
+ lines.push(`Message: ${violation.message}`);
159
+ lines.push(`Severity: ${violation.severity}`);
160
+ lines.push(`Location: ${getFileName(uri)}:${violation.range.start.line + 1}:${violation.range.start.character + 1}`);
161
+ lines.push('');
162
+ if (pattern) {
163
+ lines.push(`Pattern: ${pattern.name ?? violation.patternId}`);
164
+ if (pattern.category) {
165
+ lines.push(`Category: ${pattern.category}`);
166
+ }
167
+ if (pattern.description) {
168
+ lines.push(`Description: ${pattern.description}`);
169
+ }
170
+ }
171
+ else {
172
+ lines.push(`Pattern ID: ${violation.patternId}`);
173
+ }
174
+ return lines.join('\n');
175
+ }
176
+ /**
177
+ * Group violations by severity
178
+ */
179
+ function groupBySeverity(violations) {
180
+ const groups = {
181
+ error: [],
182
+ warning: [],
183
+ info: [],
184
+ hint: [],
185
+ };
186
+ for (const v of violations) {
187
+ const severity = v.violation.severity;
188
+ if (severity in groups) {
189
+ groups[severity].push(v);
190
+ }
191
+ else {
192
+ groups.hint.push(v);
193
+ }
194
+ }
195
+ return groups;
196
+ }
197
+ /**
198
+ * Group violations by pattern
199
+ */
200
+ function groupByPattern(violations) {
201
+ const groups = new Map();
202
+ for (const v of violations) {
203
+ const patternId = v.violation.patternId;
204
+ const group = groups.get(patternId) ?? [];
205
+ group.push(v);
206
+ groups.set(patternId, group);
207
+ }
208
+ return groups;
209
+ }
210
+ /**
211
+ * Group violations by file
212
+ */
213
+ function groupByFile(violations) {
214
+ const groups = new Map();
215
+ for (const v of violations) {
216
+ const group = groups.get(v.uri) ?? [];
217
+ group.push(v);
218
+ groups.set(v.uri, group);
219
+ }
220
+ return groups;
221
+ }
222
+ /**
223
+ * Get violation statistics
224
+ */
225
+ function getViolationStatistics(violations) {
226
+ const bySeverity = {};
227
+ const byPattern = {};
228
+ const byFile = {};
229
+ for (const v of violations) {
230
+ bySeverity[v.violation.severity] = (bySeverity[v.violation.severity] ?? 0) + 1;
231
+ byPattern[v.violation.patternId] = (byPattern[v.violation.patternId] ?? 0) + 1;
232
+ byFile[v.uri] = (byFile[v.uri] ?? 0) + 1;
233
+ }
234
+ return {
235
+ total: violations.length,
236
+ bySeverity,
237
+ byPattern,
238
+ byFile,
239
+ };
240
+ }
241
+ /**
242
+ * Get severity icon
243
+ */
244
+ function getSeverityIcon(severity) {
245
+ switch (severity) {
246
+ case 'error': return '🔴';
247
+ case 'warning': return '🟡';
248
+ case 'info': return '🔵';
249
+ case 'hint': return '💡';
250
+ default: return '⚪';
251
+ }
252
+ }
253
+ /**
254
+ * Get file name from URI
255
+ */
256
+ function getFileName(uri) {
257
+ return uri.split('/').pop() ?? uri;
258
+ }
259
+ //# sourceMappingURL=show-violations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-violations.js","sourceRoot":"","sources":["../../src/commands/show-violations.ts"],"names":[],"mappings":"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"}