Files
puaros/packages/guardian/TODO.md
imfozilbek 4c0fc7185a docs: update TODO with technical debt and recent changes
- Add low-coverage files to technical debt (SourceFile, ProjectPath, RepositoryViolation, ValueObject)
- Update test statistics (10 test files, 292 tests, 90.63% coverage)
- Add v0.5.2 section with limit feature and ESLint cleanup
- Document all completed tasks from this release
2025-11-24 21:29:02 +05:00

9.9 KiB

TODO - Technical Debt & Improvements

This file tracks technical debt, known issues, and improvements needed in the codebase.

🔴 Critical (Fix ASAP)

Code Quality Issues

  • Reduce complexity in HardcodeDetector.isInExportedConstant() FIXED
    • Current: Cyclomatic complexity 32
    • Target: < 15
    • Location: src/infrastructure/analyzers/HardcodeDetector.ts:31
    • Solution: Split into smaller functions (isSingleLineExportConst, findExportConstStart, countUnclosedBraces)
    • Fixed on: 2025-11-24

Type Safety

  • Fix template expression types FIXED

    • Location: src/domain/value-objects/HardcodedValue.ts:103
    • Issue: Invalid type "string | number" of template literal expression
    • Solution: Convert to string before template using String(value)
    • Fixed on: 2025-11-24
  • Fix unknown type in template literals FIXED

    • Location: src/infrastructure/scanners/FileScanner.ts:52,66
    • Issue: Invalid type "unknown" of template literal expression
    • Solution: Convert to string using String(error)
    • Fixed on: 2025-11-24

Unused Variables

  • Remove or use constants in HardcodeDetector FIXED

    • Removed unused imports: CONTEXT_EXTRACT_SIZE, MIN_STRING_LENGTH, SINGLE_CHAR_LIMIT, SUGGESTION_KEYWORDS
    • Fixed on: 2024-11-24
  • Fix unused function parameters FIXED

    • Prefixed unused parameters with underscore: _filePath
    • Fixed on: 2024-11-24

🟡 Medium Priority

ESLint Warnings

  • Fix unnecessary conditionals FIXED

    • BaseEntity.ts:34 - unnecessary conditional check
    • ValueObject.ts:13 - unnecessary conditional check
    • Fixed on: 2025-11-24
  • Use nullish coalescing (??) instead of OR (||) FIXED

    • HardcodeDetector.ts:322-324 - replaced || with ?? (3 instances)
    • Fixed on: 2025-11-24

TypeScript Configuration

  • Add test files to tsconfig
    • Currently excluded from project service
    • Files: examples/*.ts, tests/**/*.test.ts, vitest.config.ts
    • Solution: Add to tsconfig include or create separate tsconfig for tests

Repository Pattern

  • Implement actual repository methods NOT APPLICABLE

    • All methods in BaseRepository just throw errors
    • BaseRepository was removed from guardian package
    • Completed on: 2025-11-24
  • Remove require-await warnings NOT APPLICABLE

    • All async methods in BaseRepository have no await
    • BaseRepository was removed from guardian package
    • Completed on: 2025-11-24

🟢 Low Priority / Nice to Have

Code Organization

  • Consolidate constants

    • Multiple constant files: shared/constants/index.ts, infrastructure/constants/defaults.ts, domain/constants/suggestions.ts
    • Consider merging or better organization
  • Improve Guards class structure

    • Current warning: "Unexpected class with only static properties"
    • Consider: namespace, functions, or actual class instances

Documentation

  • Add JSDoc comments to public APIs FIXED

    • analyzeProject() function
    • All exported types and interfaces
    • Use cases
    • Added comprehensive JSDoc with examples
    • Completed on: 2025-11-24
  • Document architectural decisions

    • Why CommonJS instead of ESM?
    • Why tree-sitter over other parsers?
    • Create ADR (Architecture Decision Records) folder

Testing

  • Increase test coverage FIXED

    • Current: 85.71% (target: 80%+)
    • New: 90.63% (exceeds 80% target!)
    • But only 2 test files (Guards, BaseEntity)
    • Now: 10 test files with 292 tests total
    • Need tests for:
      • HardcodeDetector (main logic!) 49 tests added
      • HardcodedValue 28 tests added
      • FrameworkLeakDetector 35 tests added
      • NamingConventionDetector 55 tests added
      • DependencyDirectionDetector 43 tests added
      • EntityExposureDetector 24 tests added
      • RepositoryPatternDetector 31 tests added
      • AnalyzeProject use case (pending)
      • CLI commands (pending)
      • FileScanner (pending)
      • CodeParser (pending)
    • Completed on: 2025-11-24
  • Improve test coverage for low-coverage files

    • SourceFile.ts: 44.82% coverage (entity, not critical but needs improvement)
      • Missing: Property getters, metadata methods, dependency management
      • Target: 80%+
    • ProjectPath.ts: 50% coverage (value object)
      • Missing: Path validation methods, edge cases
      • Target: 80%+
    • RepositoryViolation.ts: 55.26% coverage (value object)
      • Missing: Violation type methods, details formatting
      • Target: 80%+
    • ValueObject.ts: 25% coverage (base class)
      • Missing: equals() and other base methods
      • Target: 80%+
    • Priority: Medium (overall coverage is good, but these specific files need attention)
  • Add integration tests

    • Test full workflow: scan → parse → detect → report
    • Test CLI end-to-end
    • Test on real project examples

Performance

  • Profile and optimize HardcodeDetector

    • Complex regex operations on large files
    • Consider caching parsed results
    • Batch processing for multiple files
  • Optimize tree-sitter parsing

    • Parse only when needed
    • Cache parsed trees
    • Parallel processing for large projects

🔵 Future Enhancements

CLI Improvements

  • Add progress bar for large projects

    • Show current file being analyzed
    • Percentage complete
    • Estimated time remaining
  • Add watch mode

    • guardian check ./src --watch
    • Re-run on file changes
    • Useful during development
  • Add fix mode

    • guardian fix ./src --interactive
    • Auto-generate constants files
    • Interactive prompts for naming

Configuration

  • Support guardian.config.js
    • Custom rules configuration
    • Exclude patterns
    • Severity levels
    • See ROADMAP.md v0.5.0

Output Improvements

  • Colorize CLI output

    • Use chalk or similar library
    • Green for success, red for errors, yellow for warnings
    • Better visual hierarchy
  • Group violations by file

    • Current: flat list
    • Better: group by file with collapsible sections

📝 Notes

Known Limitations

  1. Exported constants detection - may have false positives/negatives with complex nested structures
  2. Layer detection - simple string matching, may not work with custom paths
  3. No incremental analysis - always analyzes entire project (could cache results)

Breaking Changes to Plan

When implementing these, consider semantic versioning:

  • Config file format → MAJOR (1.0.0)
  • CLI output format changes → MINOR (0.x.0)
  • Bug fixes → PATCH (0.0.x)

📝 Recent Updates (2025-11-24)

v0.5.2 - Limit Feature & ESLint Cleanup

  1. Added --limit CLI option

    • Limits detailed output to specified number of violations per category
    • Short form: -l <number>
    • Works with severity filters (--only-critical, --min-severity)
    • Shows warning when violations exceed limit
    • Example: guardian check ./src --limit 10
    • Updated CLI constants, index, and README documentation
  2. ESLint configuration cleanup

    • Reduced warnings from 129 to 0
    • Added CLI-specific overrides (no-console, complexity, max-lines-per-function)
    • Disabled no-unsafe-* rules for CLI (Commander.js is untyped)
    • Increased max-params to 8 for DDD patterns
    • Excluded examples/, tests/, *.config.ts from linting
    • Disabled style rules (prefer-nullish-coalescing, no-unnecessary-condition, no-nested-ternary)
  3. Fixed remaining ESLint errors

    • Removed unused SEVERITY_LEVELS import from AnalyzeProject.ts
    • Fixed unused fileName variable in HardcodeDetector.ts (prefixed with _)
    • Replaced || with ?? for nullish coalescing
  4. Updated README.md

    • Added all new detectors to Features section (Entity Exposure, Dependency Direction, Repository Pattern)
    • Updated API documentation with all 8 violation types
    • Added severity levels to all interfaces
    • Documented --limit option with examples
    • Updated ProjectMetrics interface
    • Updated test statistics (292 tests, 90.63% coverage)

v0.5.0-0.5.1 - Architecture Enhancements

  1. Added comprehensive tests for HardcodeDetector (49 tests)

    • Magic numbers detection (setTimeout, retries, ports, limits)
    • Magic strings detection (URLs, connection strings)
    • Exported constants detection
    • Allowed values handling
    • Context and line numbers
  2. Added tests for HardcodedValue (28 tests)

    • Constant name suggestions for numbers and strings
    • Location suggestions based on context
    • Type checking methods
  3. Added JSDoc documentation

    • Full documentation for analyzeProject() with examples
    • Documentation for HardcodeDetector class and methods
    • Proper @param and @returns tags
  4. Fixed ESLint errors

    • Changed || to ?? (nullish coalescing)
    • Fixed template literal expressions with String()
    • Fixed constant truthiness errors
  5. Improved test coverage

    • From 85.71% to 90.63% (statements)
    • All metrics now exceed 80% threshold
    • Total tests: 16 → 292 tests
  6. Implemented Framework Leak Detection (v0.2.0)

    • Created FrameworkLeakDetector with 10 framework categories
    • Added FrameworkLeak value object with smart suggestions
    • Integrated with AnalyzeProject use case
    • Added CLI output formatting
    • 28 comprehensive tests with 100% coverage
    • Supports ORM, Web Framework, HTTP Client, Validation, DI Container, Logger, Cache, Message Queue, Email, Storage
    • Created bad example for documentation

How to use this file:

  1. Move completed items to CHANGELOG.md
  2. Create GitHub issues for items you want to work on
  3. Link issues here with #123 syntax
  4. Keep this file up-to-date with new findings