arela
Version:
AI-powered CTO with multi-agent orchestration, code summarization, visual testing (web + mobile) for blazing fast development.
66 lines • 2.35 kB
TypeScript
/**
* Cohesion calculator - measures intra-module/feature connections
* Higher cohesion is better (files in the same module are more related)
*/
import { DirectoryAnalysis } from "./types.js";
export interface CohesionAnalysis {
totalImports: number;
internalImports: number;
externalImports: number;
cohesion: number;
directoryScores: Map<string, number>;
}
/**
* Calculate cohesion score for modules/features
*
* Algorithm:
* 1. For each directory, count internal vs external imports
* 2. Internal imports = connections within the directory (good)
* 3. External imports = dependencies outside the directory (scattered)
* 4. Score = (internalImports / totalImports) * 100
*
* Score scale:
* 0-20: Very scattered (files in module are unrelated)
* 21-40: Scattered (some related files)
* 41-60: Moderate (reasonably grouped)
* 61-80: Good (tightly grouped)
* 81-100: Excellent (highly cohesive)
*
* Note: For feature-based (vertical) architectures, high cohesion is very important
* For layer-based (horizontal) architectures, high internal cohesion per layer indicates
* that files within each layer are tightly related (which can be good or bad depending on context)
*/
export declare function calculateCohesion(imports: Array<{
from: string;
to: string | null;
fromDir: string;
toDir?: string;
}>, directories: Map<string, DirectoryAnalysis>): CohesionAnalysis;
/**
* Identify directories with low cohesion (scattered files)
*/
export declare function detectCohesionIssues(analysis: CohesionAnalysis, directories: Map<string, DirectoryAnalysis>): Array<{
severity: 'critical' | 'warning';
message: string;
directory: string;
score: number;
}>;
/**
* Estimate feature cohesion as percentage of features with good cohesion
*/
export declare function calculateFeatureCohesion(analysis: CohesionAnalysis, directories: Map<string, DirectoryAnalysis>): number;
/**
* Calculate shared state/utility usage
* High usage of shared utilities can indicate poor cohesion
*/
export declare function detectSharedStateIssues(imports: Array<{
from: string;
to: string | null;
fromDir: string;
toDir?: string;
}>, directories: Map<string, DirectoryAnalysis>): Array<{
directory: string;
count: number;
files: string[];
}>;
//# sourceMappingURL=cohesion.d.ts.map