fix-angular-fixmes

Resolves eslint-disable suppression comments by fixing underlying Angular and TypeScript issues.

13.7k|2.0k|Updated Mar 9, 2016
One-click install
npx skills add https://github.com/bitwarden/clients --skill fix-angular-fixmes
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: fix-angular-fixmes
Source: https://github.com/bitwarden/clients/tree/main/.claude/skills/fix-angular-fixmes
Command: npx skills add https://github.com/bitwarden/clients --skill fix-angular-fixmes

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

The Bitwarden clients codebase accumulates eslint-disable suppression comments (often paired with FIXME tickets like CL-764 and CL-903) that hide real technical debt. This Skill removes those suppressions by actually fixing the underlying code issue rather than just deleting the comment.

Core Features & Use Cases

  • Suppression Discovery: Uses Grep patterns to find all eslint-disable and FIXME-tracked suppressions, grouped by rule name.
  • Rule-Specific Fix Guidance: Provides before/after patterns for Angular rules (OnPush change detection, signals, output emitter refs), TypeScript rules (no-floating-promises, no-unused-vars, no-unsafe-function-type), RxJS rules (no-async-subscribe, prefer-takeuntil), Bitwarden custom rules (no-enums, no-bwi-class-usage), and template/Tailwind rules.
  • Validation Workflow: Includes a per-instance cleanup checklist and validation via npm run lint:fix and npm run test.
  • Use Case: When asked to "fix FIXMEs" or "clean up eslint-disable-next-line" in a module, the Skill locates each suppression, applies the correct fix (e.g., adding OnPush change detection or converting inputs to signals), removes the full comment block, and verifies lint passes.

Quick Start

Ask the AI to fix the eslint suppressions in a specific directory, for example: "Fix the FIXME eslint suppressions in libs/components using the fix-angular-fixmes skill."

Frequently Asked Questions about fix-angular-fixmes

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I fix eslint-disable-next-line suppressions in Angular code?

Find suppressions with Grep patterns like eslint-disable or FIXME.*CL-, then fix the underlying issue per rule: add OnPush change detection, convert decorators to signals, or handle promises. Finally remove the full comment block and run npm run lint:fix.

How to migrate Angular components to OnPush change detection?

Add changeDetection: ChangeDetectionStrategy.OnPush to the component decorator and remove ChangeDetectorRef if it is only used for detectChanges(). Note that @Directive does not support changeDetection, so skip OnPush for pure directives.

Should I convert Angular service observables to signals?

No. Per ADR-0027, service observables must not be converted to signals. Signal migration applies only to component-local state and decorator bindings like @Input(), @Output(), @ViewChild, and @ContentChild.

How do I fix @typescript-eslint/no-floating-promises errors?

Handle the returned Promise in one of three ways: await it in async functions, prefix with void for explicit fire-and-forget calls like navigation, or chain .catch() for explicit error handling with a logging service.

What replaces TypeScript enums in the Bitwarden codebase?

Per ADR-0025 and the @bitwarden/platform/no-enums rule, convert enums to frozen const objects with a type alias: Object.freeze({...} as const) plus a keyof typeof type. Usage sites like CipherType.Login remain unchanged.

Why is a bare eslint-disable-next-line without a rule name wrong?

A bare disable suppresses all rules for the next line, hiding unknown violations. Remove it, run npm run lint:fix to identify the specific rule, fix the underlying issue, and only use a named rule if the violation truly cannot be fixed.