Angular Modernizer
    Preparing search index...

    AST-based False Positive Detector

    Detects and filters false positive syntax errors using AST context instead of regex pattern matching. More accurate and equally fast as string-based approach. Works directly on ts-morph Diagnostic objects; AST-based alternative to FalsePositiveDetector.filterFalsePositives.

    Key Advantages over String-based Detector:

    • >99% accuracy: AST context vs ~95% regex patterns
    • Same performance: <1ms per file
    • Better diagnostics: Knows exact code structure
    • Fewer false negatives: Doesn't miss edge cases
    1. Constructor Parameters with "import" keyword

      constructor(private importService: ImportService) {}
      // AST check: Is this inside a Constructor? Yes → Filter false positive
    2. Super Calls with "import" variables

      super(importConfig, importHelper);
      // AST check: Is this a CallExpression with "super" target? Yes → Filter
    3. Multiple Decorators

      @ExternalDecorator({ id: 'custom' })
      @Component({ selector: 'app-user' })
      export class UserComponent {}
      // AST check: Does class have >1 decorator? Yes → Filter decorator errors
    4. Path Aliases in Imports

      import { SharedModule } from '@shared/modules';
      // AST check: Is moduleSpecifier a custom alias? Yes → Filter "Cannot find module"
    import { ASTFalsePositiveDetector } from '@angular-modernizer/core';
    import { Project } from 'ts-morph';

    const project = new Project();
    const sourceFile = project.createSourceFile('component.ts', content);
    const detector = new ASTFalsePositiveDetector();

    // Get diagnostics from parser
    const diagnostics = sourceFile.getPreEmitDiagnostics();

    // Filter false positives using AST context
    const result = detector.filterDiagnostics(diagnostics, sourceFile);

    console.info(`Filtered ${result.falsePositives.length} false positives`);
    console.info(`Reporting ${result.genuine.length} genuine errors`);

    // Process by context
    result.filteredByContext.forEach((count, context) => {
    console.info(` ${context}: ${count} filtered`);
    });
    Index

    Constructors

    Methods

    • Clear all registered aliases (reset to defaults)

      Returns void

    • Filter false positives from diagnostics using AST context

      This method processes TypeScript diagnostics and separates genuine errors from false positives based on AST context analysis.

      Algorithm:

      1. Get diagnostic location in AST
      2. Analyze surrounding AST nodes for context
      3. Apply context-specific false positive checks
      4. Classify as genuine or false positive

      Performance:

      • <1ms per file (same as string-based)
      • Early filtering reduces downstream processing

      Parameters

      • diagnostics: readonly Diagnostic<Diagnostic>[]

        Array of ts-morph diagnostics to filter

      • sourceFile: SourceFile

        SourceFile for AST context

      Returns ASTFalsePositiveResult

      Result with genuine errors and filtered false positives

      const diagnostics = sourceFile.getPreEmitDiagnostics();
      const result = detector.filterDiagnostics(diagnostics, sourceFile);

      console.info(`Genuine: ${result.genuine.length}`);
      console.info(`False positives: ${result.falsePositives.length}`);
      console.info('Filtered by context:', result.filteredByContext);
    • Get all registered path alias prefixes

      Returns ReadonlySet<string>

      Set of alias prefixes

    • Register a custom path alias prefix

      Parameters

      • alias: string

        Alias prefix to register (e.g., '@custom')

      Returns void

      detector.registerAlias('@custom');
      detector.registerAlias('@enterprise');