DEV Community

Felipe Leon
Felipe Leon

Posted on

Your Angular tech debt can now fix itself — ahc fix

Three weeks ago I launched Angular Health Check — a CLI that scores
your Angular project 0-100. It's at 1,200+ downloads now, and the #1
piece of feedback was brutally consistent:

"Cool, it found 23 issues. Now what?"

Fair. Detection without action is just guilt. So this release ships ahc fix.

Auto-fix


bash
$ ahc fix . --dry-run

  Would apply 12 fixes:
  ~ src/app/user-list.component.ts:8   Added OnPush to "UserListComponent"
  ~ src/app/cart.service.ts:45         Removed console.log('debug')

$ ahc fix .
  ✔ 12 fixes applied. Review with git diff, then re-run ahc scan.
What it fixes today — deliberately conservative:

Missing OnPush — inserts changeDetection: ChangeDetectionStrategy.OnPush plus the import. Real AST transform (ts-morph), not regex.
console.log — removed. console.warn/console.error stay (usually intentional), and console.log used as an expression value is never touched.
--dry-run first, always. And the CLI reminds you: OnPush changes
rendering behavior — review the diff before committing.

Rules that know your Angular version
The scanner reads @angular/core from your package.json and gates
rules accordingly:


Angular 14 detected — Signals rules skipped (requires Angular 16+)
No noise about input() migration on Angular 14. Rules light up as
your version unlocks them.

How far are you from modern Angular?

$ ahc migrate-check .

  Modernization readiness — Angular 18
  ✔ Standalone components      15/15
  ✔ Signal inputs              3/3
  ✔ Built-in control flow      11/11
  • OnPush change detection    13/15  → 2 components on default CD
Break the build when quality drops

- uses: piipe800/Angular-Health-Check/packages/action@main
  with:
    fail-under: 70
And PR comments now show the delta vs your base branch:
−5 pts vs base branch (was 92).

Try it
No install needed:


npx @angular-health-check/cli scan .
# or
pnpm dlx @angular-health-check/cli scan .
What should ahc fix handle next? trackBy? @Input() → input()
migration? The next fixer ships based on the comments.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)