driftdetect-core 0.1.0

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 (221) hide show
  1. package/dist/analyzers/ast-analyzer.d.ts +251 -0
  2. package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ast-analyzer.js +548 -0
  4. package/dist/analyzers/ast-analyzer.js.map +1 -0
  5. package/dist/analyzers/flow-analyzer.d.ts +241 -0
  6. package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
  7. package/dist/analyzers/flow-analyzer.js +1219 -0
  8. package/dist/analyzers/flow-analyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +18 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +19 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/semantic-analyzer.d.ts +252 -0
  14. package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
  15. package/dist/analyzers/semantic-analyzer.js +1182 -0
  16. package/dist/analyzers/semantic-analyzer.js.map +1 -0
  17. package/dist/analyzers/type-analyzer.d.ts +289 -0
  18. package/dist/analyzers/type-analyzer.d.ts.map +1 -0
  19. package/dist/analyzers/type-analyzer.js +1269 -0
  20. package/dist/analyzers/type-analyzer.js.map +1 -0
  21. package/dist/analyzers/types.d.ts +537 -0
  22. package/dist/analyzers/types.d.ts.map +1 -0
  23. package/dist/analyzers/types.js +11 -0
  24. package/dist/analyzers/types.js.map +1 -0
  25. package/dist/config/config-loader.d.ts +166 -0
  26. package/dist/config/config-loader.d.ts.map +1 -0
  27. package/dist/config/config-loader.js +429 -0
  28. package/dist/config/config-loader.js.map +1 -0
  29. package/dist/config/config-validator.d.ts +204 -0
  30. package/dist/config/config-validator.d.ts.map +1 -0
  31. package/dist/config/config-validator.js +632 -0
  32. package/dist/config/config-validator.js.map +1 -0
  33. package/dist/config/defaults.d.ts +8 -0
  34. package/dist/config/defaults.d.ts.map +1 -0
  35. package/dist/config/defaults.js +26 -0
  36. package/dist/config/defaults.js.map +1 -0
  37. package/dist/config/index.d.ts +10 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +10 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/config/types.d.ts +47 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +7 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index.d.ts +37 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/manifest/exporter.d.ts +21 -0
  50. package/dist/manifest/exporter.d.ts.map +1 -0
  51. package/dist/manifest/exporter.js +339 -0
  52. package/dist/manifest/exporter.js.map +1 -0
  53. package/dist/manifest/index.d.ts +14 -0
  54. package/dist/manifest/index.d.ts.map +1 -0
  55. package/dist/manifest/index.js +15 -0
  56. package/dist/manifest/index.js.map +1 -0
  57. package/dist/manifest/manifest-store.d.ts +111 -0
  58. package/dist/manifest/manifest-store.d.ts.map +1 -0
  59. package/dist/manifest/manifest-store.js +418 -0
  60. package/dist/manifest/manifest-store.js.map +1 -0
  61. package/dist/manifest/types.d.ts +238 -0
  62. package/dist/manifest/types.d.ts.map +1 -0
  63. package/dist/manifest/types.js +11 -0
  64. package/dist/manifest/types.js.map +1 -0
  65. package/dist/matcher/confidence-scorer.d.ts +188 -0
  66. package/dist/matcher/confidence-scorer.d.ts.map +1 -0
  67. package/dist/matcher/confidence-scorer.js +302 -0
  68. package/dist/matcher/confidence-scorer.js.map +1 -0
  69. package/dist/matcher/index.d.ts +24 -0
  70. package/dist/matcher/index.d.ts.map +1 -0
  71. package/dist/matcher/index.js +26 -0
  72. package/dist/matcher/index.js.map +1 -0
  73. package/dist/matcher/outlier-detector.d.ts +252 -0
  74. package/dist/matcher/outlier-detector.d.ts.map +1 -0
  75. package/dist/matcher/outlier-detector.js +544 -0
  76. package/dist/matcher/outlier-detector.js.map +1 -0
  77. package/dist/matcher/pattern-matcher.d.ts +169 -0
  78. package/dist/matcher/pattern-matcher.d.ts.map +1 -0
  79. package/dist/matcher/pattern-matcher.js +692 -0
  80. package/dist/matcher/pattern-matcher.js.map +1 -0
  81. package/dist/matcher/types.d.ts +476 -0
  82. package/dist/matcher/types.d.ts.map +1 -0
  83. package/dist/matcher/types.js +36 -0
  84. package/dist/matcher/types.js.map +1 -0
  85. package/dist/parsers/base-parser.d.ts +282 -0
  86. package/dist/parsers/base-parser.d.ts.map +1 -0
  87. package/dist/parsers/base-parser.js +421 -0
  88. package/dist/parsers/base-parser.js.map +1 -0
  89. package/dist/parsers/css-parser.d.ts +225 -0
  90. package/dist/parsers/css-parser.d.ts.map +1 -0
  91. package/dist/parsers/css-parser.js +477 -0
  92. package/dist/parsers/css-parser.js.map +1 -0
  93. package/dist/parsers/index.d.ts +15 -0
  94. package/dist/parsers/index.d.ts.map +1 -0
  95. package/dist/parsers/index.js +15 -0
  96. package/dist/parsers/index.js.map +1 -0
  97. package/dist/parsers/json-parser.d.ts +219 -0
  98. package/dist/parsers/json-parser.d.ts.map +1 -0
  99. package/dist/parsers/json-parser.js +602 -0
  100. package/dist/parsers/json-parser.js.map +1 -0
  101. package/dist/parsers/markdown-parser.d.ts +276 -0
  102. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  103. package/dist/parsers/markdown-parser.js +731 -0
  104. package/dist/parsers/markdown-parser.js.map +1 -0
  105. package/dist/parsers/parser-manager.d.ts +294 -0
  106. package/dist/parsers/parser-manager.d.ts.map +1 -0
  107. package/dist/parsers/parser-manager.js +738 -0
  108. package/dist/parsers/parser-manager.js.map +1 -0
  109. package/dist/parsers/python-parser.d.ts +204 -0
  110. package/dist/parsers/python-parser.d.ts.map +1 -0
  111. package/dist/parsers/python-parser.js +517 -0
  112. package/dist/parsers/python-parser.js.map +1 -0
  113. package/dist/parsers/types.d.ts +43 -0
  114. package/dist/parsers/types.d.ts.map +1 -0
  115. package/dist/parsers/types.js +7 -0
  116. package/dist/parsers/types.js.map +1 -0
  117. package/dist/parsers/typescript-parser.d.ts +264 -0
  118. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  119. package/dist/parsers/typescript-parser.js +658 -0
  120. package/dist/parsers/typescript-parser.js.map +1 -0
  121. package/dist/rules/evaluator.d.ts +305 -0
  122. package/dist/rules/evaluator.d.ts.map +1 -0
  123. package/dist/rules/evaluator.js +579 -0
  124. package/dist/rules/evaluator.js.map +1 -0
  125. package/dist/rules/index.d.ts +13 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +13 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/quick-fix-generator.d.ts +334 -0
  130. package/dist/rules/quick-fix-generator.d.ts.map +1 -0
  131. package/dist/rules/quick-fix-generator.js +1075 -0
  132. package/dist/rules/quick-fix-generator.js.map +1 -0
  133. package/dist/rules/rule-engine.d.ts +241 -0
  134. package/dist/rules/rule-engine.d.ts.map +1 -0
  135. package/dist/rules/rule-engine.js +585 -0
  136. package/dist/rules/rule-engine.js.map +1 -0
  137. package/dist/rules/severity-manager.d.ts +394 -0
  138. package/dist/rules/severity-manager.d.ts.map +1 -0
  139. package/dist/rules/severity-manager.js +619 -0
  140. package/dist/rules/severity-manager.js.map +1 -0
  141. package/dist/rules/types.d.ts +370 -0
  142. package/dist/rules/types.d.ts.map +1 -0
  143. package/dist/rules/types.js +133 -0
  144. package/dist/rules/types.js.map +1 -0
  145. package/dist/rules/variant-manager.d.ts +388 -0
  146. package/dist/rules/variant-manager.d.ts.map +1 -0
  147. package/dist/rules/variant-manager.js +777 -0
  148. package/dist/rules/variant-manager.js.map +1 -0
  149. package/dist/scanner/change-detector.d.ts +164 -0
  150. package/dist/scanner/change-detector.d.ts.map +1 -0
  151. package/dist/scanner/change-detector.js +263 -0
  152. package/dist/scanner/change-detector.js.map +1 -0
  153. package/dist/scanner/dependency-graph.d.ts +270 -0
  154. package/dist/scanner/dependency-graph.d.ts.map +1 -0
  155. package/dist/scanner/dependency-graph.js +436 -0
  156. package/dist/scanner/dependency-graph.js.map +1 -0
  157. package/dist/scanner/file-walker.d.ts +127 -0
  158. package/dist/scanner/file-walker.d.ts.map +1 -0
  159. package/dist/scanner/file-walker.js +526 -0
  160. package/dist/scanner/file-walker.js.map +1 -0
  161. package/dist/scanner/index.d.ts +12 -0
  162. package/dist/scanner/index.d.ts.map +1 -0
  163. package/dist/scanner/index.js +12 -0
  164. package/dist/scanner/index.js.map +1 -0
  165. package/dist/scanner/types.d.ts +218 -0
  166. package/dist/scanner/types.d.ts.map +1 -0
  167. package/dist/scanner/types.js +10 -0
  168. package/dist/scanner/types.js.map +1 -0
  169. package/dist/scanner/worker-pool.d.ts +317 -0
  170. package/dist/scanner/worker-pool.d.ts.map +1 -0
  171. package/dist/scanner/worker-pool.js +571 -0
  172. package/dist/scanner/worker-pool.js.map +1 -0
  173. package/dist/store/cache-manager.d.ts +179 -0
  174. package/dist/store/cache-manager.d.ts.map +1 -0
  175. package/dist/store/cache-manager.js +391 -0
  176. package/dist/store/cache-manager.js.map +1 -0
  177. package/dist/store/history-store.d.ts +314 -0
  178. package/dist/store/history-store.d.ts.map +1 -0
  179. package/dist/store/history-store.js +707 -0
  180. package/dist/store/history-store.js.map +1 -0
  181. package/dist/store/index.d.ts +20 -0
  182. package/dist/store/index.d.ts.map +1 -0
  183. package/dist/store/index.js +26 -0
  184. package/dist/store/index.js.map +1 -0
  185. package/dist/store/lock-file-manager.d.ts +202 -0
  186. package/dist/store/lock-file-manager.d.ts.map +1 -0
  187. package/dist/store/lock-file-manager.js +475 -0
  188. package/dist/store/lock-file-manager.js.map +1 -0
  189. package/dist/store/pattern-store.d.ts +289 -0
  190. package/dist/store/pattern-store.d.ts.map +1 -0
  191. package/dist/store/pattern-store.js +936 -0
  192. package/dist/store/pattern-store.js.map +1 -0
  193. package/dist/store/schema-validator.d.ts +159 -0
  194. package/dist/store/schema-validator.d.ts.map +1 -0
  195. package/dist/store/schema-validator.js +1096 -0
  196. package/dist/store/schema-validator.js.map +1 -0
  197. package/dist/store/types.d.ts +585 -0
  198. package/dist/store/types.d.ts.map +1 -0
  199. package/dist/store/types.js +82 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/types/analysis.d.ts +19 -0
  202. package/dist/types/analysis.d.ts.map +1 -0
  203. package/dist/types/analysis.js +5 -0
  204. package/dist/types/analysis.js.map +1 -0
  205. package/dist/types/common.d.ts +7 -0
  206. package/dist/types/common.d.ts.map +1 -0
  207. package/dist/types/common.js +5 -0
  208. package/dist/types/common.js.map +1 -0
  209. package/dist/types/index.d.ts +12 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +10 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/types/patterns.d.ts +40 -0
  214. package/dist/types/patterns.d.ts.map +1 -0
  215. package/dist/types/patterns.js +7 -0
  216. package/dist/types/patterns.js.map +1 -0
  217. package/dist/types/violations.d.ts +7 -0
  218. package/dist/types/violations.d.ts.map +1 -0
  219. package/dist/types/violations.js +7 -0
  220. package/dist/types/violations.js.map +1 -0
  221. package/package.json +46 -0
@@ -0,0 +1,579 @@
1
+ /**
2
+ * Evaluator - Pattern evaluation and violation detection
3
+ *
4
+ * Provides focused evaluation of code against patterns to determine
5
+ * if code matches a pattern and generate detailed violation information.
6
+ * Works with the PatternMatcher for pattern matching and SeverityManager
7
+ * for severity handling.
8
+ *
9
+ * @requirements 24.1 - THE Enforcement_System SHALL support severity levels: error, warning, info, hint
10
+ */
11
+ import { PatternMatcher } from '../matcher/pattern-matcher.js';
12
+ import { SeverityManager } from './severity-manager.js';
13
+ import { createRangeFromCoords } from './types.js';
14
+ /**
15
+ * Default Evaluator configuration
16
+ */
17
+ export const DEFAULT_EVALUATOR_CONFIG = {
18
+ severityConfig: {},
19
+ matcherOptions: {},
20
+ aiExplainAvailable: false,
21
+ aiFixAvailable: false,
22
+ minConfidence: 0.0,
23
+ projectRoot: '.',
24
+ };
25
+ // ============================================================================
26
+ // Evaluator Class
27
+ // ============================================================================
28
+ /**
29
+ * Evaluator class for checking if code matches patterns and determining violations.
30
+ *
31
+ * The evaluator:
32
+ * - Checks if code matches a pattern definition
33
+ * - Determines violation details (location, severity, message)
34
+ * - Works with PatternMatcher for pattern matching
35
+ * - Uses SeverityManager for severity handling
36
+ *
37
+ * @requirements 24.1 - Enforcement system with severity levels
38
+ */
39
+ export class Evaluator {
40
+ config;
41
+ patternMatcher;
42
+ severityManager;
43
+ violationIdCounter;
44
+ /**
45
+ * Create a new Evaluator instance.
46
+ *
47
+ * @param config - Optional configuration options
48
+ */
49
+ constructor(config) {
50
+ this.config = {
51
+ ...DEFAULT_EVALUATOR_CONFIG,
52
+ ...config,
53
+ };
54
+ this.patternMatcher = new PatternMatcher();
55
+ this.severityManager = new SeverityManager(this.config.severityConfig);
56
+ this.violationIdCounter = 0;
57
+ }
58
+ /**
59
+ * Check if code matches a pattern.
60
+ *
61
+ * @param input - The evaluation input (file, content, AST)
62
+ * @param pattern - The pattern to check against
63
+ * @returns True if code matches the pattern (no violations)
64
+ */
65
+ checkMatch(input, pattern) {
66
+ const result = this.evaluate(input, pattern);
67
+ return result.matches;
68
+ }
69
+ /**
70
+ * Get detailed match information for code against a pattern.
71
+ *
72
+ * @param input - The evaluation input
73
+ * @param pattern - The pattern to check against
74
+ * @returns Array of match details
75
+ */
76
+ getMatchDetails(input, pattern) {
77
+ const context = this.createMatcherContext(input);
78
+ const definition = this.patternToDefinition(pattern);
79
+ const matches = this.patternMatcher.match(context, definition, this.config.matcherOptions);
80
+ return matches.map((match) => {
81
+ const detail = {
82
+ matches: !match.isOutlier,
83
+ confidence: match.confidence,
84
+ location: match.location,
85
+ isOutlier: match.isOutlier,
86
+ };
87
+ if (match.matchedText !== undefined) {
88
+ detail.matchedText = match.matchedText;
89
+ }
90
+ if (match.outlierReason !== undefined) {
91
+ detail.outlierReason = match.outlierReason;
92
+ }
93
+ return detail;
94
+ });
95
+ }
96
+ /**
97
+ * Evaluate code against a pattern and get detailed results.
98
+ *
99
+ * @param input - The evaluation input (file, content, AST)
100
+ * @param pattern - The pattern to evaluate against
101
+ * @returns Evaluation result with matches and violations
102
+ */
103
+ evaluate(input, pattern) {
104
+ const startTime = Date.now();
105
+ const errors = [];
106
+ let patternMatches = [];
107
+ let violations = [];
108
+ try {
109
+ // Create matcher context
110
+ const context = this.createMatcherContext(input);
111
+ // Convert pattern to definition for matching
112
+ const definition = this.patternToDefinition(pattern);
113
+ // Match pattern against code
114
+ patternMatches = this.patternMatcher.match(context, definition, this.config.matcherOptions);
115
+ // Find violations from outliers and missing patterns
116
+ violations = this.findViolations(input, pattern, patternMatches);
117
+ }
118
+ catch (error) {
119
+ errors.push({
120
+ message: error instanceof Error ? error.message : String(error),
121
+ code: 'EVALUATION_ERROR',
122
+ recoverable: true,
123
+ });
124
+ }
125
+ // Calculate overall confidence
126
+ const confidence = this.calculateOverallConfidence(patternMatches);
127
+ // Determine if code matches (no violations)
128
+ const matches = violations.length === 0;
129
+ return {
130
+ patternId: pattern.id,
131
+ file: input.file,
132
+ matches,
133
+ confidence,
134
+ patternMatches,
135
+ violations,
136
+ duration: Date.now() - startTime,
137
+ errors,
138
+ };
139
+ }
140
+ /**
141
+ * Evaluate code against multiple patterns.
142
+ *
143
+ * @param input - The evaluation input
144
+ * @param patterns - Array of patterns to evaluate
145
+ * @returns Array of evaluation results
146
+ */
147
+ evaluateAll(input, patterns) {
148
+ return patterns.map((pattern) => this.evaluate(input, pattern));
149
+ }
150
+ /**
151
+ * Evaluate multiple files against patterns.
152
+ *
153
+ * @param inputs - Array of evaluation inputs
154
+ * @param patterns - Array of patterns to evaluate
155
+ * @returns Evaluation summary
156
+ */
157
+ evaluateFiles(inputs, patterns) {
158
+ const startTime = Date.now();
159
+ const allResults = [];
160
+ const filesEvaluated = [];
161
+ for (const input of inputs) {
162
+ filesEvaluated.push(input.file);
163
+ const results = this.evaluateAll(input, patterns);
164
+ allResults.push(...results);
165
+ }
166
+ return this.summarizeResults(allResults, filesEvaluated, startTime);
167
+ }
168
+ /**
169
+ * Determine violation details for a specific location.
170
+ *
171
+ * @param input - The evaluation input
172
+ * @param pattern - The pattern being violated
173
+ * @param location - The location of the violation
174
+ * @param reason - Optional reason for the violation
175
+ * @returns Violation object with full details
176
+ */
177
+ determineViolation(input, pattern, location, reason) {
178
+ const severity = this.severityManager.getEffectiveSeverityWithEscalation(pattern.id, pattern.category);
179
+ const range = this.locationToRange(location);
180
+ const message = reason || `Code deviates from pattern: ${pattern.name}`;
181
+ const violationInput = {
182
+ patternId: pattern.id,
183
+ severity,
184
+ file: input.file,
185
+ range,
186
+ message,
187
+ expected: this.getExpectedFromPattern(pattern),
188
+ actual: this.getActualFromLocation(input.content, location),
189
+ };
190
+ if (reason !== undefined) {
191
+ violationInput.explanation = reason;
192
+ }
193
+ return this.createViolation(violationInput);
194
+ }
195
+ /**
196
+ * Get the severity manager instance.
197
+ *
198
+ * @returns The severity manager
199
+ */
200
+ getSeverityManager() {
201
+ return this.severityManager;
202
+ }
203
+ /**
204
+ * Get the pattern matcher instance.
205
+ *
206
+ * @returns The pattern matcher
207
+ */
208
+ getPatternMatcher() {
209
+ return this.patternMatcher;
210
+ }
211
+ /**
212
+ * Reset the evaluator state.
213
+ */
214
+ reset() {
215
+ this.violationIdCounter = 0;
216
+ this.severityManager.resetViolationCounts();
217
+ this.patternMatcher.clearCache();
218
+ }
219
+ // ============================================================================
220
+ // Private Methods - Context Creation
221
+ // ============================================================================
222
+ /**
223
+ * Create a matcher context from evaluation input.
224
+ */
225
+ createMatcherContext(input) {
226
+ return {
227
+ file: input.file,
228
+ content: input.content,
229
+ ast: input.ast,
230
+ language: input.language,
231
+ projectRoot: this.config.projectRoot,
232
+ };
233
+ }
234
+ /**
235
+ * Convert a Pattern to a PatternDefinition for matching.
236
+ */
237
+ patternToDefinition(pattern) {
238
+ const definition = {
239
+ id: pattern.id,
240
+ name: pattern.name,
241
+ description: pattern.description,
242
+ category: pattern.category,
243
+ subcategory: pattern.subcategory,
244
+ matchType: pattern.detector.type === 'custom' ? 'custom' : pattern.detector.type,
245
+ enabled: true,
246
+ };
247
+ // Add AST config if present
248
+ if (pattern.detector.ast) {
249
+ definition.astConfig = pattern.detector.ast;
250
+ }
251
+ // Add regex config if present
252
+ if (pattern.detector.regex) {
253
+ const regexConfig = {
254
+ pattern: pattern.detector.regex.pattern,
255
+ };
256
+ if (pattern.detector.regex.flags !== undefined) {
257
+ regexConfig.flags = pattern.detector.regex.flags;
258
+ }
259
+ if (pattern.detector.regex.captureGroups !== undefined) {
260
+ regexConfig.captureGroups = pattern.detector.regex.captureGroups;
261
+ }
262
+ definition.regexConfig = regexConfig;
263
+ }
264
+ // Add structural config if present
265
+ if (pattern.detector.structural) {
266
+ const structuralConfig = {};
267
+ if (pattern.detector.structural.pathPattern !== undefined) {
268
+ structuralConfig.pathPattern = pattern.detector.structural.pathPattern;
269
+ }
270
+ if (pattern.detector.structural.directoryPattern !== undefined) {
271
+ structuralConfig.directoryPattern = pattern.detector.structural.directoryPattern;
272
+ }
273
+ if (pattern.detector.structural.namingPattern !== undefined) {
274
+ structuralConfig.namingPattern = pattern.detector.structural.namingPattern;
275
+ }
276
+ if (pattern.detector.structural.requiredSiblings !== undefined) {
277
+ structuralConfig.requiredSiblings = pattern.detector.structural.requiredSiblings;
278
+ }
279
+ definition.structuralConfig = structuralConfig;
280
+ }
281
+ // Add metadata if present
282
+ if (pattern.metadata.firstSeen || pattern.metadata.lastSeen || pattern.metadata.tags) {
283
+ definition.metadata = {};
284
+ if (pattern.metadata.firstSeen) {
285
+ definition.metadata.firstSeen = new Date(pattern.metadata.firstSeen);
286
+ }
287
+ if (pattern.metadata.lastSeen) {
288
+ definition.metadata.lastSeen = new Date(pattern.metadata.lastSeen);
289
+ }
290
+ if (pattern.metadata.tags) {
291
+ definition.metadata.tags = pattern.metadata.tags;
292
+ }
293
+ }
294
+ return definition;
295
+ }
296
+ // ============================================================================
297
+ // Private Methods - Violation Detection
298
+ // ============================================================================
299
+ /**
300
+ * Find violations based on pattern matches.
301
+ */
302
+ findViolations(input, pattern, matches) {
303
+ const violations = [];
304
+ // Check for outliers in matches
305
+ for (const match of matches) {
306
+ if (match.isOutlier) {
307
+ const violation = this.createViolationFromOutlier(input, pattern, match);
308
+ violations.push(violation);
309
+ }
310
+ }
311
+ // Check pattern's outlier locations for this file
312
+ const outlierLocations = pattern.outliers.filter((loc) => loc.file === input.file);
313
+ for (const outlier of outlierLocations) {
314
+ const violation = this.createViolationFromOutlierLocation(input, pattern, outlier);
315
+ violations.push(violation);
316
+ }
317
+ // Check for missing expected patterns
318
+ if (this.shouldHavePattern(input, pattern) && matches.length === 0) {
319
+ const violation = this.createMissingPatternViolation(input, pattern);
320
+ violations.push(violation);
321
+ }
322
+ return violations;
323
+ }
324
+ /**
325
+ * Check if a file should have a pattern.
326
+ */
327
+ shouldHavePattern(input, pattern) {
328
+ // Check if file matches pattern's expected locations
329
+ return pattern.locations.some((loc) => loc.file === input.file);
330
+ }
331
+ /**
332
+ * Create a violation from an outlier match.
333
+ */
334
+ createViolationFromOutlier(input, pattern, match) {
335
+ const severity = this.severityManager.getEffectiveSeverityWithEscalation(pattern.id, pattern.category);
336
+ const range = this.locationToRange(match.location);
337
+ const violationInput = {
338
+ patternId: pattern.id,
339
+ severity,
340
+ file: input.file,
341
+ range,
342
+ message: this.generateViolationMessage(pattern, match),
343
+ expected: this.getExpectedFromPattern(pattern),
344
+ actual: match.matchedText || 'Code deviates from pattern',
345
+ };
346
+ if (match.outlierReason !== undefined) {
347
+ violationInput.explanation = match.outlierReason;
348
+ }
349
+ return this.createViolation(violationInput);
350
+ }
351
+ /**
352
+ * Create a violation from an outlier location.
353
+ */
354
+ createViolationFromOutlierLocation(input, pattern, outlier) {
355
+ const severity = this.severityManager.getEffectiveSeverityWithEscalation(pattern.id, pattern.category);
356
+ const range = createRangeFromCoords(outlier.line - 1, // Convert to 0-indexed
357
+ outlier.column - 1, (outlier.endLine || outlier.line) - 1, (outlier.endColumn || outlier.column) - 1);
358
+ const violationInput = {
359
+ patternId: pattern.id,
360
+ severity,
361
+ file: input.file,
362
+ range,
363
+ message: `Pattern violation: ${pattern.name}`,
364
+ expected: this.getExpectedFromPattern(pattern),
365
+ actual: `Code at line ${outlier.line} deviates from pattern`,
366
+ };
367
+ if (outlier.reason !== undefined) {
368
+ violationInput.explanation = outlier.reason;
369
+ }
370
+ return this.createViolation(violationInput);
371
+ }
372
+ /**
373
+ * Create a violation for a missing pattern.
374
+ */
375
+ createMissingPatternViolation(input, pattern) {
376
+ const severity = this.severityManager.getEffectiveSeverityWithEscalation(pattern.id, pattern.category);
377
+ // Find the expected location in this file
378
+ const expectedLocation = pattern.locations.find((loc) => loc.file === input.file);
379
+ const range = expectedLocation
380
+ ? this.patternLocationToRange(expectedLocation)
381
+ : createRangeFromCoords(0, 0, 0, 0);
382
+ return this.createViolation({
383
+ patternId: pattern.id,
384
+ severity,
385
+ file: input.file,
386
+ range,
387
+ message: `Missing expected pattern: ${pattern.name}`,
388
+ explanation: `Expected to find pattern "${pattern.name}" but it was not detected.`,
389
+ expected: this.getExpectedFromPattern(pattern),
390
+ actual: 'Pattern not found',
391
+ });
392
+ }
393
+ // ============================================================================
394
+ // Private Methods - Violation Creation
395
+ // ============================================================================
396
+ /**
397
+ * Create a violation with full details.
398
+ */
399
+ createViolation(input) {
400
+ const id = this.generateViolationId();
401
+ const violation = {
402
+ id,
403
+ patternId: input.patternId,
404
+ severity: input.severity,
405
+ file: input.file,
406
+ range: input.range,
407
+ message: input.message,
408
+ expected: input.expected,
409
+ actual: input.actual,
410
+ aiExplainAvailable: this.config.aiExplainAvailable,
411
+ aiFixAvailable: this.config.aiFixAvailable,
412
+ firstSeen: new Date(),
413
+ occurrences: 1,
414
+ };
415
+ // Add optional properties only if defined
416
+ if (input.explanation !== undefined) {
417
+ violation.explanation = input.explanation;
418
+ }
419
+ if (input.quickFix !== undefined) {
420
+ violation.quickFix = input.quickFix;
421
+ }
422
+ return violation;
423
+ }
424
+ /**
425
+ * Generate a unique violation ID.
426
+ */
427
+ generateViolationId() {
428
+ this.violationIdCounter++;
429
+ return `eval-violation-${Date.now()}-${this.violationIdCounter}`;
430
+ }
431
+ /**
432
+ * Generate a violation message from pattern and match.
433
+ */
434
+ generateViolationMessage(pattern, match) {
435
+ if (match.outlierReason) {
436
+ return `${pattern.name}: ${match.outlierReason}`;
437
+ }
438
+ return `Code deviates from pattern: ${pattern.name}`;
439
+ }
440
+ /**
441
+ * Get expected code/structure from pattern.
442
+ */
443
+ getExpectedFromPattern(pattern) {
444
+ return pattern.description || `Follow the ${pattern.name} pattern`;
445
+ }
446
+ /**
447
+ * Get actual code from a location.
448
+ */
449
+ getActualFromLocation(content, location) {
450
+ const lines = content.split('\n');
451
+ const lineIndex = location.line - 1; // Convert to 0-indexed
452
+ if (lineIndex >= 0 && lineIndex < lines.length) {
453
+ const line = lines[lineIndex];
454
+ if (line !== undefined) {
455
+ // Return the line or a portion of it
456
+ const maxLength = 100;
457
+ if (line.length > maxLength) {
458
+ return line.substring(0, maxLength) + '...';
459
+ }
460
+ return line;
461
+ }
462
+ }
463
+ return 'Unable to extract code';
464
+ }
465
+ // ============================================================================
466
+ // Private Methods - Location Conversion
467
+ // ============================================================================
468
+ /**
469
+ * Convert a Location to a Range.
470
+ */
471
+ locationToRange(location) {
472
+ return createRangeFromCoords(location.line - 1, // Convert to 0-indexed
473
+ location.column - 1, (location.endLine || location.line) - 1, (location.endColumn || location.column) - 1);
474
+ }
475
+ /**
476
+ * Convert a PatternLocation to a Range.
477
+ */
478
+ patternLocationToRange(location) {
479
+ return createRangeFromCoords(location.line - 1, // Convert to 0-indexed
480
+ location.column - 1, (location.endLine || location.line) - 1, (location.endColumn || location.column) - 1);
481
+ }
482
+ // ============================================================================
483
+ // Private Methods - Confidence Calculation
484
+ // ============================================================================
485
+ /**
486
+ * Calculate overall confidence from pattern matches.
487
+ */
488
+ calculateOverallConfidence(matches) {
489
+ if (matches.length === 0) {
490
+ return 0;
491
+ }
492
+ // Calculate average confidence of non-outlier matches
493
+ const validMatches = matches.filter((m) => !m.isOutlier);
494
+ if (validMatches.length === 0) {
495
+ return 0;
496
+ }
497
+ const totalConfidence = validMatches.reduce((sum, match) => sum + match.confidence, 0);
498
+ return totalConfidence / validMatches.length;
499
+ }
500
+ // ============================================================================
501
+ // Private Methods - Result Summarization
502
+ // ============================================================================
503
+ /**
504
+ * Summarize evaluation results.
505
+ */
506
+ summarizeResults(results, filesEvaluated, startTime) {
507
+ let patternsMatched = 0;
508
+ let patternsViolated = 0;
509
+ let totalViolations = 0;
510
+ const violationsBySeverity = {
511
+ error: 0,
512
+ warning: 0,
513
+ info: 0,
514
+ hint: 0,
515
+ };
516
+ for (const result of results) {
517
+ if (result.matches) {
518
+ patternsMatched++;
519
+ }
520
+ else {
521
+ patternsViolated++;
522
+ }
523
+ totalViolations += result.violations.length;
524
+ for (const violation of result.violations) {
525
+ violationsBySeverity[violation.severity]++;
526
+ }
527
+ }
528
+ return {
529
+ patternsEvaluated: results.length,
530
+ patternsMatched,
531
+ patternsViolated,
532
+ totalViolations,
533
+ violationsBySeverity,
534
+ totalDuration: Date.now() - startTime,
535
+ filesEvaluated,
536
+ };
537
+ }
538
+ }
539
+ // ============================================================================
540
+ // Factory Functions
541
+ // ============================================================================
542
+ /**
543
+ * Create an Evaluator with default configuration.
544
+ *
545
+ * @returns New Evaluator instance
546
+ */
547
+ export function createEvaluator() {
548
+ return new Evaluator();
549
+ }
550
+ /**
551
+ * Create an Evaluator with custom configuration.
552
+ *
553
+ * @param config - Configuration options
554
+ * @returns New Evaluator instance
555
+ */
556
+ export function createEvaluatorWithConfig(config) {
557
+ return new Evaluator(config);
558
+ }
559
+ /**
560
+ * Create an Evaluator with AI features enabled.
561
+ *
562
+ * @returns New Evaluator instance with AI features
563
+ */
564
+ export function createEvaluatorWithAI() {
565
+ return new Evaluator({
566
+ aiExplainAvailable: true,
567
+ aiFixAvailable: true,
568
+ });
569
+ }
570
+ /**
571
+ * Create an Evaluator with a custom severity manager.
572
+ *
573
+ * @param severityConfig - Severity manager configuration
574
+ * @returns New Evaluator instance
575
+ */
576
+ export function createEvaluatorWithSeverity(severityConfig) {
577
+ return new Evaluator({ severityConfig });
578
+ }
579
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/rules/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Rules module exports
3
+ *
4
+ * Provides rule evaluation, violation generation, quick fix generation,
5
+ * and variant management for intentional deviations.
6
+ */
7
+ export * from './types.js';
8
+ export * from './severity-manager.js';
9
+ export * from './rule-engine.js';
10
+ export * from './evaluator.js';
11
+ export * from './quick-fix-generator.js';
12
+ export * from './variant-manager.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Rules module exports
3
+ *
4
+ * Provides rule evaluation, violation generation, quick fix generation,
5
+ * and variant management for intentional deviations.
6
+ */
7
+ export * from './types.js';
8
+ export * from './severity-manager.js';
9
+ export * from './rule-engine.js';
10
+ export * from './evaluator.js';
11
+ export * from './quick-fix-generator.js';
12
+ export * from './variant-manager.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}