code-auditor-mcp 1.20.0 → 2.0.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 (180) hide show
  1. package/dist/adapters/GoAdapter.d.ts +53 -0
  2. package/dist/adapters/GoAdapter.d.ts.map +1 -0
  3. package/dist/adapters/GoAdapter.js +602 -0
  4. package/dist/adapters/GoAdapter.js.map +1 -0
  5. package/dist/adapters/GoConfig.d.ts +35 -0
  6. package/dist/adapters/GoConfig.d.ts.map +1 -0
  7. package/dist/adapters/GoConfig.js +155 -0
  8. package/dist/adapters/GoConfig.js.map +1 -0
  9. package/dist/adapters/LanguageAdapter.d.ts +135 -0
  10. package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
  11. package/dist/adapters/LanguageAdapter.js +47 -0
  12. package/dist/adapters/LanguageAdapter.js.map +1 -0
  13. package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
  14. package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
  15. package/dist/adapters/TypeScriptAdapter.js +386 -0
  16. package/dist/adapters/TypeScriptAdapter.js.map +1 -0
  17. package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
  18. package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
  19. package/dist/adapters/UniversalAnalyzer.js +103 -0
  20. package/dist/adapters/UniversalAnalyzer.js.map +1 -0
  21. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
  22. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  23. package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
  24. package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
  25. package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
  26. package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
  27. package/dist/adapters/solidAnalyzerCompat.js +78 -0
  28. package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
  29. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
  30. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
  31. package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
  32. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
  33. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
  34. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
  35. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
  36. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
  37. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
  38. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
  39. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
  40. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
  41. package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
  42. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
  43. package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
  44. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
  45. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
  46. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
  47. package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
  48. package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
  49. package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
  50. package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
  51. package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
  52. package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
  53. package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
  54. package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
  55. package/dist/analyzers/dryAnalyzerCompat.js +44 -0
  56. package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
  57. package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
  58. package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
  59. package/dist/analyzers/schemaAnalyzer.js +405 -0
  60. package/dist/analyzers/schemaAnalyzer.js.map +1 -0
  61. package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
  62. package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
  63. package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
  64. package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
  65. package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
  66. package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
  67. package/dist/analyzers/solidAnalyzerCompat.js +78 -0
  68. package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
  69. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
  70. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
  71. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
  72. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
  73. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
  74. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
  75. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
  76. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
  77. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
  78. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
  79. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
  80. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
  81. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
  82. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  83. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
  84. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
  85. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
  86. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
  87. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
  88. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
  89. package/dist/auditRunner.d.ts.map +1 -1
  90. package/dist/auditRunner.js +23 -7
  91. package/dist/auditRunner.js.map +1 -1
  92. package/dist/codeIndexDB-enhanced.d.ts +80 -0
  93. package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
  94. package/dist/codeIndexDB-enhanced.js +488 -0
  95. package/dist/codeIndexDB-enhanced.js.map +1 -0
  96. package/dist/codeIndexDb.d.ts +70 -1
  97. package/dist/codeIndexDb.d.ts.map +1 -1
  98. package/dist/codeIndexDb.js +199 -2
  99. package/dist/codeIndexDb.js.map +1 -1
  100. package/dist/config/defaults.js +1 -1
  101. package/dist/config/defaults.js.map +1 -1
  102. package/dist/languages/LanguageOrchestrator.d.ts +181 -0
  103. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
  104. package/dist/languages/LanguageOrchestrator.js +365 -0
  105. package/dist/languages/LanguageOrchestrator.js.map +1 -0
  106. package/dist/languages/LanguageRegistry.d.ts +43 -0
  107. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  108. package/dist/languages/LanguageRegistry.js +86 -0
  109. package/dist/languages/LanguageRegistry.js.map +1 -0
  110. package/dist/languages/RuntimeManager.d.ts +181 -0
  111. package/dist/languages/RuntimeManager.d.ts.map +1 -0
  112. package/dist/languages/RuntimeManager.js +841 -0
  113. package/dist/languages/RuntimeManager.js.map +1 -0
  114. package/dist/languages/UniversalAnalyzer.d.ts +37 -0
  115. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
  116. package/dist/languages/UniversalAnalyzer.js +101 -0
  117. package/dist/languages/UniversalAnalyzer.js.map +1 -0
  118. package/dist/languages/go/GoAdapter.d.ts +57 -0
  119. package/dist/languages/go/GoAdapter.d.ts.map +1 -0
  120. package/dist/languages/go/GoAdapter.js +360 -0
  121. package/dist/languages/go/GoAdapter.js.map +1 -0
  122. package/dist/languages/index.d.ts +13 -0
  123. package/dist/languages/index.d.ts.map +1 -0
  124. package/dist/languages/index.js +23 -0
  125. package/dist/languages/index.js.map +1 -0
  126. package/dist/languages/types.d.ts +182 -0
  127. package/dist/languages/types.d.ts.map +1 -0
  128. package/dist/languages/types.js +5 -0
  129. package/dist/languages/types.js.map +1 -0
  130. package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
  131. package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
  132. package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
  133. package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
  134. package/dist/languages/typescript/test-extraction.d.ts +2 -0
  135. package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
  136. package/dist/languages/typescript/test-extraction.js +36 -0
  137. package/dist/languages/typescript/test-extraction.js.map +1 -0
  138. package/dist/mcp-hybrid.d.ts +10 -0
  139. package/dist/mcp-hybrid.d.ts.map +1 -0
  140. package/dist/mcp-hybrid.js +41 -0
  141. package/dist/mcp-hybrid.js.map +1 -0
  142. package/dist/mcp-index.d.ts +11 -0
  143. package/dist/mcp-index.d.ts.map +1 -0
  144. package/dist/mcp-index.js +101 -0
  145. package/dist/mcp-index.js.map +1 -0
  146. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  147. package/dist/mcp-tools/workflowGuide.js +67 -10
  148. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  149. package/dist/mcp-tools-shared.d.ts +49 -0
  150. package/dist/mcp-tools-shared.d.ts.map +1 -0
  151. package/dist/mcp-tools-shared.js +1282 -0
  152. package/dist/mcp-tools-shared.js.map +1 -0
  153. package/dist/mcp-ui-server.d.ts +27 -0
  154. package/dist/mcp-ui-server.d.ts.map +1 -0
  155. package/dist/mcp-ui-server.js +484 -0
  156. package/dist/mcp-ui-server.js.map +1 -0
  157. package/dist/mcp-ui-simple.d.ts +27 -0
  158. package/dist/mcp-ui-simple.d.ts.map +1 -0
  159. package/dist/mcp-ui-simple.js +425 -0
  160. package/dist/mcp-ui-simple.js.map +1 -0
  161. package/dist/mcp.js +7 -4
  162. package/dist/mcp.js.map +1 -1
  163. package/dist/services/SchemaParser.d.ts +89 -0
  164. package/dist/services/SchemaParser.d.ts.map +1 -0
  165. package/dist/services/SchemaParser.js +434 -0
  166. package/dist/services/SchemaParser.js.map +1 -0
  167. package/dist/types/crossLanguage.d.ts +267 -0
  168. package/dist/types/crossLanguage.d.ts.map +1 -0
  169. package/dist/types/crossLanguage.js +6 -0
  170. package/dist/types/crossLanguage.js.map +1 -0
  171. package/dist/types.d.ts +128 -0
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js.map +1 -1
  174. package/dist/utils/fileDiscovery.d.ts +6 -0
  175. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  176. package/dist/utils/fileDiscovery.js +12 -1
  177. package/dist/utils/fileDiscovery.js.map +1 -1
  178. package/examples/schema-example.json +364 -0
  179. package/examples/schema-example.yaml +137 -0
  180. package/package.json +10 -3
@@ -0,0 +1,618 @@
1
+ /**
2
+ * Cross-Language SOLID Analyzer
3
+ * Enhanced SOLID principle analysis that works across multiple languages
4
+ * using the cross-language entity model
5
+ */
6
+ export class CrossLanguageSOLIDAnalyzer {
7
+ config;
8
+ constructor(config = {}) {
9
+ this.config = {
10
+ maxResponsibilities: 3,
11
+ maxDependencies: 5,
12
+ maxInterfaceMembers: 7,
13
+ maxComplexity: 10,
14
+ maxParameters: 5,
15
+ checkAbstractions: true,
16
+ checkPolymorphism: true,
17
+ enableCrossLanguageAnalysis: true,
18
+ minCrossLanguageViolationConfidence: 0.7,
19
+ ...config
20
+ };
21
+ }
22
+ /**
23
+ * Analyze SOLID principles across multiple languages
24
+ */
25
+ async analyze(entities, references) {
26
+ console.log(`[CrossLanguageSOLIDAnalyzer] Analyzing ${entities.length} entities across languages`);
27
+ const violations = [];
28
+ // Standard SOLID analysis per entity
29
+ violations.push(...await this.analyzeSingleResponsibility(entities, references));
30
+ violations.push(...await this.analyzeOpenClosed(entities, references));
31
+ violations.push(...await this.analyzeLiskovSubstitution(entities, references));
32
+ violations.push(...await this.analyzeInterfaceSegregation(entities, references));
33
+ violations.push(...await this.analyzeDependencyInversion(entities, references));
34
+ // Cross-language specific SOLID violations
35
+ if (this.config.enableCrossLanguageAnalysis) {
36
+ violations.push(...await this.analyzeCrossLanguageSOLID(entities, references));
37
+ }
38
+ console.log(`[CrossLanguageSOLIDAnalyzer] Found ${violations.length} SOLID violations`);
39
+ return violations;
40
+ }
41
+ /**
42
+ * Single Responsibility Principle - Enhanced for cross-language
43
+ */
44
+ async analyzeSingleResponsibility(entities, references) {
45
+ const violations = [];
46
+ for (const entity of entities) {
47
+ const responsibilities = this.countResponsibilities(entity, references, entities);
48
+ if (responsibilities.count > this.config.maxResponsibilities) {
49
+ violations.push({
50
+ file: entity.file,
51
+ line: entity.startLine || 0,
52
+ severity: responsibilities.count > this.config.maxResponsibilities * 2 ? 'critical' : 'warning',
53
+ message: `${entity.type} '${entity.name}' has too many responsibilities (${responsibilities.count}) across ${responsibilities.languages.size} languages`,
54
+ principle: 'SRP',
55
+ entityId: entity.id,
56
+ entityName: entity.name,
57
+ entityType: entity.type,
58
+ language: entity.language,
59
+ crossLanguageIssue: responsibilities.languages.size > 1,
60
+ responsibilityCount: responsibilities.count,
61
+ confidence: responsibilities.confidence,
62
+ relatedEntities: responsibilities.relatedEntities,
63
+ details: {
64
+ responsibilities: responsibilities.count,
65
+ maxAllowed: this.config.maxResponsibilities,
66
+ languagesInvolved: Array.from(responsibilities.languages),
67
+ crossLanguageFactors: responsibilities.crossLanguageFactors
68
+ },
69
+ suggestion: this.generateSRPSuggestion(entity, responsibilities),
70
+ analyzer: 'cross-language-solid',
71
+ category: 'single-responsibility'
72
+ });
73
+ }
74
+ }
75
+ return violations;
76
+ }
77
+ /**
78
+ * Open/Closed Principle - Cross-language switch detection
79
+ */
80
+ async analyzeOpenClosed(entities, references) {
81
+ const violations = [];
82
+ if (!this.config.checkPolymorphism)
83
+ return violations;
84
+ for (const entity of entities) {
85
+ const polymorphismOpportunities = this.detectPolymorphismOpportunities(entity, references, entities);
86
+ if (polymorphismOpportunities.confidence > 0.6) {
87
+ violations.push({
88
+ file: entity.file,
89
+ line: entity.startLine || 0,
90
+ severity: 'suggestion',
91
+ message: `${entity.type} '${entity.name}' shows patterns that could benefit from polymorphism across ${polymorphismOpportunities.languages.size} languages`,
92
+ principle: 'OCP',
93
+ entityId: entity.id,
94
+ entityName: entity.name,
95
+ entityType: entity.type,
96
+ language: entity.language,
97
+ crossLanguageIssue: polymorphismOpportunities.languages.size > 1,
98
+ confidence: polymorphismOpportunities.confidence,
99
+ relatedEntities: polymorphismOpportunities.relatedEntities,
100
+ details: {
101
+ patterns: polymorphismOpportunities.patterns,
102
+ languagesInvolved: Array.from(polymorphismOpportunities.languages),
103
+ complexityScore: polymorphismOpportunities.complexityScore
104
+ },
105
+ suggestion: this.generateOCPSuggestion(entity, polymorphismOpportunities),
106
+ analyzer: 'cross-language-solid',
107
+ category: 'open-closed'
108
+ });
109
+ }
110
+ }
111
+ return violations;
112
+ }
113
+ /**
114
+ * Liskov Substitution Principle - Cross-language inheritance analysis
115
+ */
116
+ async analyzeLiskovSubstitution(entities, references) {
117
+ const violations = [];
118
+ const hierarchies = this.findCrossLanguageHierarchies(entities, references);
119
+ for (const hierarchy of hierarchies) {
120
+ const lspViolations = this.analyzeHierarchyForLSP(hierarchy, entities);
121
+ violations.push(...lspViolations);
122
+ }
123
+ return violations;
124
+ }
125
+ /**
126
+ * Interface Segregation Principle - Cross-language interface analysis
127
+ */
128
+ async analyzeInterfaceSegregation(entities, references) {
129
+ const violations = [];
130
+ const interfaces = entities.filter(e => e.type === 'interface');
131
+ for (const interfaceEntity of interfaces) {
132
+ const usage = this.analyzeInterfaceUsage(interfaceEntity, references, entities);
133
+ if (usage.memberCount > this.config.maxInterfaceMembers) {
134
+ violations.push({
135
+ file: interfaceEntity.file,
136
+ line: interfaceEntity.startLine || 0,
137
+ severity: 'warning',
138
+ message: `Interface '${interfaceEntity.name}' has ${usage.memberCount} members used across ${usage.languages.size} languages`,
139
+ principle: 'ISP',
140
+ entityId: interfaceEntity.id,
141
+ entityName: interfaceEntity.name,
142
+ entityType: interfaceEntity.type,
143
+ language: interfaceEntity.language,
144
+ crossLanguageIssue: usage.languages.size > 1,
145
+ memberCount: usage.memberCount,
146
+ confidence: usage.confidence,
147
+ relatedEntities: usage.implementers,
148
+ details: {
149
+ memberCount: usage.memberCount,
150
+ maxAllowed: this.config.maxInterfaceMembers,
151
+ implementerLanguages: Array.from(usage.languages),
152
+ unusedMembers: usage.unusedMembers
153
+ },
154
+ suggestion: this.generateISPSuggestion(interfaceEntity, usage),
155
+ analyzer: 'cross-language-solid',
156
+ category: 'interface-segregation'
157
+ });
158
+ }
159
+ }
160
+ return violations;
161
+ }
162
+ /**
163
+ * Dependency Inversion Principle - Cross-language abstraction analysis
164
+ */
165
+ async analyzeDependencyInversion(entities, references) {
166
+ const violations = [];
167
+ if (!this.config.checkAbstractions)
168
+ return violations;
169
+ for (const entity of entities) {
170
+ if (entity.type === 'class' || entity.type === 'struct' || entity.type === 'service') {
171
+ const dependencies = this.analyzeDependencies(entity, references, entities);
172
+ if (dependencies.concreteCount > this.config.maxDependencies) {
173
+ violations.push({
174
+ file: entity.file,
175
+ line: entity.startLine || 0,
176
+ severity: 'suggestion',
177
+ message: `${entity.type} '${entity.name}' depends on ${dependencies.concreteCount} concrete types across ${dependencies.languages.size} languages`,
178
+ principle: 'DIP',
179
+ entityId: entity.id,
180
+ entityName: entity.name,
181
+ entityType: entity.type,
182
+ language: entity.language,
183
+ crossLanguageIssue: dependencies.languages.size > 1,
184
+ dependencyCount: dependencies.concreteCount,
185
+ confidence: dependencies.confidence,
186
+ relatedEntities: dependencies.concreteDependencies,
187
+ details: {
188
+ concreteCount: dependencies.concreteCount,
189
+ abstractCount: dependencies.abstractCount,
190
+ maxAllowed: this.config.maxDependencies,
191
+ languagesInvolved: Array.from(dependencies.languages)
192
+ },
193
+ suggestion: this.generateDIPSuggestion(entity, dependencies),
194
+ analyzer: 'cross-language-solid',
195
+ category: 'dependency-inversion'
196
+ });
197
+ }
198
+ }
199
+ }
200
+ return violations;
201
+ }
202
+ /**
203
+ * Cross-Language specific SOLID violations
204
+ */
205
+ async analyzeCrossLanguageSOLID(entities, references) {
206
+ const violations = [];
207
+ // Detect API boundary violations
208
+ violations.push(...this.detectAPIBoundaryViolations(entities, references));
209
+ // Detect cross-language responsibility leakage
210
+ violations.push(...this.detectResponsibilityLeakage(entities, references));
211
+ // Detect distributed interface violations
212
+ violations.push(...this.detectDistributedInterfaceViolations(entities, references));
213
+ return violations;
214
+ }
215
+ /**
216
+ * Count responsibilities considering cross-language factors
217
+ */
218
+ countResponsibilities(entity, references, allEntities) {
219
+ let count = 1; // Base responsibility
220
+ const languages = new Set([entity.language]);
221
+ const relatedEntities = [];
222
+ const crossLanguageFactors = [];
223
+ // Parameter complexity
224
+ if (entity.parameters && entity.parameters.length > this.config.maxParameters) {
225
+ count++;
226
+ crossLanguageFactors.push('excessive-parameters');
227
+ }
228
+ // Complexity factor
229
+ if (entity.complexity && entity.complexity > this.config.maxComplexity) {
230
+ count += Math.floor(entity.complexity / this.config.maxComplexity);
231
+ crossLanguageFactors.push('high-complexity');
232
+ }
233
+ // Cross-language calls
234
+ const outgoingRefs = references.filter(ref => ref.sourceId === entity.id);
235
+ const targetLanguages = new Set(outgoingRefs.map(ref => ref.targetLanguage));
236
+ for (const targetLang of targetLanguages) {
237
+ if (targetLang !== entity.language) {
238
+ languages.add(targetLang);
239
+ count++;
240
+ crossLanguageFactors.push('cross-language-dependency');
241
+ }
242
+ }
243
+ // API responsibilities
244
+ if (entity.apiEndpoint) {
245
+ count++;
246
+ crossLanguageFactors.push('api-endpoint');
247
+ }
248
+ // Service boundaries
249
+ if (entity.type === 'service' && outgoingRefs.length > 3) {
250
+ count++;
251
+ crossLanguageFactors.push('service-orchestration');
252
+ }
253
+ // Collect related entities
254
+ for (const ref of outgoingRefs) {
255
+ const target = allEntities.find(e => e.id === ref.targetId);
256
+ if (target && target.language !== entity.language) {
257
+ relatedEntities.push({
258
+ id: target.id,
259
+ name: target.name,
260
+ language: target.language,
261
+ relationship: ref.type
262
+ });
263
+ }
264
+ }
265
+ const confidence = Math.min(1.0, 0.5 + (crossLanguageFactors.length * 0.1));
266
+ return { count, confidence, languages, relatedEntities, crossLanguageFactors };
267
+ }
268
+ /**
269
+ * Detect polymorphism opportunities across languages
270
+ */
271
+ detectPolymorphismOpportunities(entity, references, allEntities) {
272
+ const languages = new Set([entity.language]);
273
+ const patterns = [];
274
+ let complexityScore = 0;
275
+ const relatedEntities = [];
276
+ // High complexity suggests switch-like patterns
277
+ if (entity.complexity && entity.complexity > 15) {
278
+ complexityScore += entity.complexity;
279
+ patterns.push('high-complexity');
280
+ }
281
+ // Multiple dependencies to similar types across languages
282
+ const outgoingRefs = references.filter(ref => ref.sourceId === entity.id);
283
+ const targetsByLanguage = new Map();
284
+ for (const ref of outgoingRefs) {
285
+ const target = allEntities.find(e => e.id === ref.targetId);
286
+ if (target) {
287
+ languages.add(target.language);
288
+ targetsByLanguage.set(target.language, (targetsByLanguage.get(target.language) || 0) + 1);
289
+ if (target.language !== entity.language) {
290
+ relatedEntities.push({
291
+ id: target.id,
292
+ name: target.name,
293
+ language: target.language,
294
+ relationship: ref.type
295
+ });
296
+ }
297
+ }
298
+ }
299
+ // Multiple targets per language suggests type-based branching
300
+ if (targetsByLanguage.size > 2) {
301
+ patterns.push('multi-language-dispatch');
302
+ complexityScore += targetsByLanguage.size * 5;
303
+ }
304
+ // Function name patterns
305
+ const switchLikeNames = ['handle', 'process', 'convert', 'transform', 'dispatch', 'route'];
306
+ if (switchLikeNames.some(pattern => entity.name.toLowerCase().includes(pattern))) {
307
+ patterns.push('switch-like-naming');
308
+ complexityScore += 10;
309
+ }
310
+ const confidence = Math.min(1.0, complexityScore / 50);
311
+ return { confidence, languages, patterns, complexityScore, relatedEntities };
312
+ }
313
+ /**
314
+ * Find cross-language inheritance hierarchies
315
+ */
316
+ findCrossLanguageHierarchies(entities, references) {
317
+ const hierarchies = [];
318
+ const processed = new Set();
319
+ for (const entity of entities) {
320
+ if (processed.has(entity.id))
321
+ continue;
322
+ const inheritance = references.filter(ref => (ref.sourceId === entity.id || ref.targetId === entity.id) &&
323
+ (ref.type === 'extends' || ref.type === 'implements'));
324
+ if (inheritance.length > 0) {
325
+ const hierarchyEntities = this.buildHierarchy(entity, inheritance, entities);
326
+ const languages = new Set(hierarchyEntities.map(e => e.language));
327
+ if (languages.size > 1) { // Cross-language hierarchy
328
+ hierarchies.push({
329
+ entities: hierarchyEntities,
330
+ languages,
331
+ relationships: inheritance
332
+ });
333
+ hierarchyEntities.forEach(e => processed.add(e.id));
334
+ }
335
+ }
336
+ }
337
+ return hierarchies;
338
+ }
339
+ /**
340
+ * Build hierarchy from inheritance relationships
341
+ */
342
+ buildHierarchy(startEntity, inheritanceRefs, allEntities) {
343
+ const entities = new Set();
344
+ const visited = new Set();
345
+ const traverse = (entityId) => {
346
+ if (visited.has(entityId))
347
+ return;
348
+ visited.add(entityId);
349
+ const entity = allEntities.find(e => e.id === entityId);
350
+ if (!entity)
351
+ return;
352
+ entities.add(entity);
353
+ // Find related inheritance relationships
354
+ const related = inheritanceRefs.filter(ref => ref.sourceId === entityId || ref.targetId === entityId);
355
+ for (const ref of related) {
356
+ const relatedId = ref.sourceId === entityId ? ref.targetId : ref.sourceId;
357
+ traverse(relatedId);
358
+ }
359
+ };
360
+ traverse(startEntity.id);
361
+ return Array.from(entities);
362
+ }
363
+ /**
364
+ * Analyze hierarchy for LSP violations
365
+ */
366
+ analyzeHierarchyForLSP(hierarchy, allEntities) {
367
+ const violations = [];
368
+ // Cross-language LSP is particularly challenging
369
+ for (const entity of hierarchy.entities) {
370
+ const parentRefs = hierarchy.relationships.filter(ref => ref.sourceId === entity.id && (ref.type === 'extends' || ref.type === 'implements'));
371
+ for (const ref of parentRefs) {
372
+ const parent = allEntities.find(e => e.id === ref.targetId);
373
+ if (parent && parent.language !== entity.language) {
374
+ // Cross-language inheritance is risky for LSP
375
+ violations.push({
376
+ file: entity.file,
377
+ line: entity.startLine || 0,
378
+ severity: 'warning',
379
+ message: `${entity.type} '${entity.name}' (${entity.language}) inherits from ${parent.name} (${parent.language}), creating cross-language LSP risks`,
380
+ principle: 'LSP',
381
+ entityId: entity.id,
382
+ entityName: entity.name,
383
+ entityType: entity.type,
384
+ language: entity.language,
385
+ crossLanguageIssue: true,
386
+ confidence: 0.8,
387
+ relatedEntities: [{
388
+ id: parent.id,
389
+ name: parent.name,
390
+ language: parent.language,
391
+ relationship: ref.type
392
+ }],
393
+ details: {
394
+ parentLanguage: parent.language,
395
+ childLanguage: entity.language,
396
+ relationshipType: ref.type
397
+ },
398
+ suggestion: 'Consider using composition or adapter patterns instead of cross-language inheritance',
399
+ analyzer: 'cross-language-solid',
400
+ category: 'liskov-substitution'
401
+ });
402
+ }
403
+ }
404
+ }
405
+ return violations;
406
+ }
407
+ /**
408
+ * Analyze interface usage across languages
409
+ */
410
+ analyzeInterfaceUsage(interfaceEntity, references, allEntities) {
411
+ const languages = new Set([interfaceEntity.language]);
412
+ const implementers = [];
413
+ // Find implementers
414
+ const implementationRefs = references.filter(ref => ref.targetId === interfaceEntity.id && ref.type === 'implements');
415
+ for (const ref of implementationRefs) {
416
+ const implementer = allEntities.find(e => e.id === ref.sourceId);
417
+ if (implementer) {
418
+ languages.add(implementer.language);
419
+ implementers.push({
420
+ id: implementer.id,
421
+ name: implementer.name,
422
+ language: implementer.language,
423
+ relationship: 'implements'
424
+ });
425
+ }
426
+ }
427
+ // Count members (simplified)
428
+ const memberCount = interfaceEntity.parameters?.length ||
429
+ interfaceEntity.metadata?.methodCount ||
430
+ interfaceEntity.metadata?.memberCount || 0;
431
+ // TODO: Analyze actual usage to find unused members
432
+ const unusedMembers = [];
433
+ const confidence = languages.size > 1 ? 0.9 : 0.7;
434
+ return { memberCount, confidence, languages, implementers, unusedMembers };
435
+ }
436
+ /**
437
+ * Analyze dependencies for DIP violations
438
+ */
439
+ analyzeDependencies(entity, references, allEntities) {
440
+ const languages = new Set([entity.language]);
441
+ const concreteDependencies = [];
442
+ let concreteCount = 0;
443
+ let abstractCount = 0;
444
+ const outgoingRefs = references.filter(ref => ref.sourceId === entity.id);
445
+ for (const ref of outgoingRefs) {
446
+ const target = allEntities.find(e => e.id === ref.targetId);
447
+ if (!target)
448
+ continue;
449
+ languages.add(target.language);
450
+ if (this.isConcreteType(target)) {
451
+ concreteCount++;
452
+ concreteDependencies.push({
453
+ id: target.id,
454
+ name: target.name,
455
+ language: target.language,
456
+ relationship: ref.type
457
+ });
458
+ }
459
+ else {
460
+ abstractCount++;
461
+ }
462
+ }
463
+ const confidence = languages.size > 1 ? 0.9 : 0.7;
464
+ return { concreteCount, abstractCount, confidence, languages, concreteDependencies };
465
+ }
466
+ /**
467
+ * Check if entity is concrete type
468
+ */
469
+ isConcreteType(entity) {
470
+ if (entity.type === 'interface')
471
+ return false;
472
+ switch (entity.language) {
473
+ case 'typescript':
474
+ return !entity.metadata?.isAbstract;
475
+ case 'go':
476
+ return entity.type === 'struct';
477
+ case 'java':
478
+ case 'csharp':
479
+ return !entity.metadata?.isAbstract && entity.type === 'class';
480
+ default:
481
+ return entity.type === 'class' || entity.type === 'struct';
482
+ }
483
+ }
484
+ /**
485
+ * Detect API boundary violations
486
+ */
487
+ detectAPIBoundaryViolations(entities, references) {
488
+ const violations = [];
489
+ const apiEntities = entities.filter(e => e.apiEndpoint);
490
+ for (const apiEntity of apiEntities) {
491
+ const callers = references.filter(ref => ref.targetId === apiEntity.id && ref.type === 'api-call');
492
+ const callerLanguages = new Set(callers.map(ref => ref.sourceLanguage));
493
+ if (callerLanguages.size > 2) {
494
+ // API called from many languages - potential SRP violation
495
+ violations.push({
496
+ file: apiEntity.file,
497
+ line: apiEntity.startLine || 0,
498
+ severity: 'suggestion',
499
+ message: `API endpoint '${apiEntity.name}' is called from ${callerLanguages.size} different languages, suggesting multiple responsibilities`,
500
+ principle: 'SRP',
501
+ entityId: apiEntity.id,
502
+ entityName: apiEntity.name,
503
+ entityType: apiEntity.type,
504
+ language: apiEntity.language,
505
+ crossLanguageIssue: true,
506
+ confidence: 0.8,
507
+ details: {
508
+ callerLanguages: Array.from(callerLanguages),
509
+ callCount: callers.length
510
+ },
511
+ suggestion: 'Consider splitting this API into more focused, single-purpose endpoints',
512
+ analyzer: 'cross-language-solid',
513
+ category: 'single-responsibility'
514
+ });
515
+ }
516
+ }
517
+ return violations;
518
+ }
519
+ /**
520
+ * Detect responsibility leakage across languages
521
+ */
522
+ detectResponsibilityLeakage(entities, references) {
523
+ const violations = [];
524
+ // Look for entities that have too many cross-language dependencies
525
+ for (const entity of entities) {
526
+ const outgoingRefs = references.filter(ref => ref.sourceId === entity.id);
527
+ const crossLangRefs = outgoingRefs.filter(ref => ref.targetLanguage !== entity.language);
528
+ if (crossLangRefs.length > 3) {
529
+ violations.push({
530
+ file: entity.file,
531
+ line: entity.startLine || 0,
532
+ severity: 'warning',
533
+ message: `${entity.type} '${entity.name}' has dependencies across ${new Set(crossLangRefs.map(r => r.targetLanguage)).size} different languages`,
534
+ principle: 'SRP',
535
+ entityId: entity.id,
536
+ entityName: entity.name,
537
+ entityType: entity.type,
538
+ language: entity.language,
539
+ crossLanguageIssue: true,
540
+ confidence: 0.8,
541
+ details: {
542
+ crossLanguageDependencies: crossLangRefs.length,
543
+ targetLanguages: Array.from(new Set(crossLangRefs.map(r => r.targetLanguage)))
544
+ },
545
+ suggestion: 'Consider using a service layer or adapter pattern to reduce cross-language coupling',
546
+ analyzer: 'cross-language-solid',
547
+ category: 'single-responsibility'
548
+ });
549
+ }
550
+ }
551
+ return violations;
552
+ }
553
+ /**
554
+ * Detect distributed interface violations
555
+ */
556
+ detectDistributedInterfaceViolations(entities, references) {
557
+ const violations = [];
558
+ // Look for interfaces implemented across multiple languages
559
+ const interfaces = entities.filter(e => e.type === 'interface');
560
+ for (const iface of interfaces) {
561
+ const implementations = references.filter(ref => ref.targetId === iface.id && ref.type === 'implements');
562
+ const implLanguages = new Set(implementations.map(ref => ref.sourceLanguage));
563
+ if (implLanguages.size > 1) {
564
+ violations.push({
565
+ file: iface.file,
566
+ line: iface.startLine || 0,
567
+ severity: 'suggestion',
568
+ message: `Interface '${iface.name}' is implemented across ${implLanguages.size} different languages`,
569
+ principle: 'ISP',
570
+ entityId: iface.id,
571
+ entityName: iface.name,
572
+ entityType: iface.type,
573
+ language: iface.language,
574
+ crossLanguageIssue: true,
575
+ confidence: 0.7,
576
+ details: {
577
+ implementationLanguages: Array.from(implLanguages),
578
+ implementationCount: implementations.length
579
+ },
580
+ suggestion: 'Consider language-specific interface definitions or use protocol-based contracts',
581
+ analyzer: 'cross-language-solid',
582
+ category: 'interface-segregation'
583
+ });
584
+ }
585
+ }
586
+ return violations;
587
+ }
588
+ // Suggestion generators (enhanced for cross-language)
589
+ generateSRPSuggestion(entity, responsibilities) {
590
+ const baseSuggestion = `Consider breaking ${entity.name} into smaller, more focused components`;
591
+ if (responsibilities.crossLanguageFactors.includes('cross-language-dependency')) {
592
+ return `${baseSuggestion}. Use service layers or adapters to isolate cross-language concerns.`;
593
+ }
594
+ if (responsibilities.crossLanguageFactors.includes('api-endpoint')) {
595
+ return `${baseSuggestion}. Split API endpoints by business domain or operation type.`;
596
+ }
597
+ return `${baseSuggestion}. Apply the Single Responsibility Principle within and across language boundaries.`;
598
+ }
599
+ generateOCPSuggestion(entity, opportunities) {
600
+ if (opportunities.languages.size > 1) {
601
+ return `Consider using cross-language polymorphism through well-defined interfaces or protocol contracts. Use dependency injection across service boundaries.`;
602
+ }
603
+ return `Consider using polymorphism (interfaces/inheritance) instead of conditional logic. Use the Strategy or Command patterns.`;
604
+ }
605
+ generateISPSuggestion(entity, usage) {
606
+ if (usage.languages.size > 1) {
607
+ return `Split this interface into language-specific or role-specific contracts. Consider using protocol buffers or OpenAPI specifications for cross-language interfaces.`;
608
+ }
609
+ return `Split this interface into smaller, more focused interfaces that serve specific client needs.`;
610
+ }
611
+ generateDIPSuggestion(entity, dependencies) {
612
+ if (dependencies.languages.size > 1) {
613
+ return `Use dependency injection and abstraction layers to reduce coupling across language boundaries. Consider service meshes or API gateways for cross-language dependencies.`;
614
+ }
615
+ return `Depend on abstractions (interfaces) rather than concrete implementations. Use dependency injection containers.`;
616
+ }
617
+ }
618
+ //# sourceMappingURL=CrossLanguageSOLIDAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrossLanguageSOLIDAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.ts"],"names":[],"mappings":"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"}