Skip to content

CEP-0044: First-Class Lint Engine

Draft

Draft proposal for a full compiler-integrated lint engine. V1 catalogs lintable patterns but does not require a lint engine, lint configuration, or source-level suppression.

Summary

Catalyst should eventually define a first-class lint engine architecture with categories, severities, configuration, autofixes, and project integration.

V1 keeps linting advisory: lint identities and suggested severities are cataloged, but lint findings are optional tooling output and do not define source validity.

Example

Possible future configuration shape:

[lint]
unused = "warn"
resource_leak = "deny"
style.naming = "allow"

[lint.autofix]
organize_imports = true

The proposal must decide configuration location, severity model, local suppressions, generated-code behavior, autofix representation, and whether Catalyst wants a source-level suppression attribute such as a future @allow.

Motivation

Linting is part of the language experience. A first-class engine can keep warnings, style guidance, resource checks, and migration help consistent across CLI and IDEs.

Proposed Direction

The proposal should cover:

  • lint identities and categories;
  • default lint sets;
  • severities and promotion/demotion;
  • project/module configuration;
  • local suppressions, including whether to add a source-level suppression attribute such as @allow;
  • autofix representation;
  • phase ownership and generated-code behavior.

V1 Compatibility

V1 may document and optionally implement targeted lint behavior without committing to the full engine architecture. The active cross-domain lint identities live in Lint Catalog.