Skip to content

Commit 6093099

Browse files
committed
fix(analyzers): Prefer NestJS provider analysis
NestJS imports are a stronger framework signal than Angular's shared decorator names. Give the NestJS analyzer precedence so providers keep their Nest-specific classification and metadata.
1 parent 9d62f8c commit 6093099

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

‎src/analyzers/nestjs/index.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export class NestJsAnalyzer implements FrameworkAnalyzer {
9393
readonly name = 'nestjs';
9494
readonly version = '1.0.0';
9595
readonly supportedExtensions = ['.ts', '.js', '.mjs', '.cjs', '.mts', '.cts'];
96-
readonly priority = 85;
96+
readonly priority = 105;
9797

9898
canAnalyze(filePath: string, content?: string): boolean {
9999
const extension = path.extname(filePath).toLowerCase();

‎src/core/indexer.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ export class CodebaseIndexer {
283283
analyzers: {
284284
angular: { enabled: true, priority: 100 },
285285
nextjs: { enabled: false, priority: 90 },
286-
nestjs: { enabled: false, priority: 85 },
286+
nestjs: { enabled: false, priority: 105 },
287287
react: { enabled: false, priority: 90 },
288288
vue: { enabled: false, priority: 90 },
289289
generic: { enabled: true, priority: 10 }

‎tests/analyzer-registry.test.ts‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,26 @@ describe('AnalyzerRegistry', () => {
9494
expect(react).toBeDefined();
9595
expect(generic).toBeDefined();
9696
expect(angular!.priority).toBeGreaterThan(generic!.priority);
97-
expect(nextjs!.priority).toBeGreaterThan(nestjs!.priority);
97+
expect(nestjs!.priority).toBeGreaterThan(angular!.priority);
9898
expect(nestjs!.priority).toBeGreaterThan(react!.priority);
9999
expect(nextjs!.priority).toBeGreaterThan(react!.priority);
100100
expect(react!.priority).toBeGreaterThan(generic!.priority);
101101
});
102+
103+
it('should prefer NestJS when framework decorators overlap with Angular', () => {
104+
const content = `
105+
import { Injectable } from '@nestjs/common';
106+
107+
@Injectable()
108+
export class PaymentsService {}
109+
`;
110+
111+
expect(
112+
analyzerRegistry.findAllAnalyzers('/tmp/payments.service.ts', content).map((a) => a.name)
113+
).toEqual(['nestjs', 'angular', 'generic']);
114+
expect(analyzerRegistry.findAnalyzer('/tmp/payments.service.ts', content)?.name).toBe(
115+
'nestjs'
116+
);
117+
});
102118
});
103119
});

0 commit comments

Comments
 (0)