Skip to main content

A Pylint plugin for enforcing Clean Architecture principles and Design Patterns.

Project description

pylint-clean-architecture

Clean Architecture Linter Logo

A powerful, highly-opinionated Pylint plugin for enforcing Clean Architecture (The Onion Architecture) principles in Python projects.

This linter acts as a "GPS" for your codebase, preventing technical debt by strictly enforcing architectural boundaries, dependency rules, and design patterns.

Features

  • Layer Boundary Enforcement: Prevents inner layers (Domain, UseCase) from importing outer layers (Infrastructure, Interface).
  • Dependency Injection Checks: Forbids direct instantiation of infrastructure classes in UseCases.
  • Design Pattern Enforcement: Detects "naked returns" from repositories, delegation anti-patterns, and more.
  • Law of Demeter: Enforces loose coupling by flagging deep method chains.
  • Contract Integrity: Ensures Infrastructure classes correctly implement Domain Protocols.
  • Anti-Bypass Guard: Prevents "lazy" disabling of linter rules without justification.

Installation

pip install pylint-clean-architecture

Usage

Add the plugin to your pyproject.toml or Pylint configuration:

[tool.pylint.main]
load-plugins = ["clean_architecture_linter"]

Run Pylint as usual:

pylint src/

AI Coding Assistant Support

The clean-arch-init command generates architectural instructions for AI agents (like Cursor or GitHub Copilot) to prevent "Split Brain" issues by teaching the AI your project's rules before it writes code.

Usage:

clean-arch-init

Outcome: This creates a customized .agent/instructions.md file based on the layer names defined in the project's pyproject.toml.

Configuration

The linter is configured via [tool.clean-arch] in pyproject.toml.

[tool.clean-arch]
# 1. Project Type Presets (generic, cli_app, fastapi_sqlalchemy)
project_type = "generic"

# 2. Strict Visibility Enforcement
visibility_enforcement = true

# 3. Custom Layer Mapping (Map directory regex patterns to layers)
[tool.clean-arch.layer_map]
"services" = "UseCase"
"infrastructure/clients" = "Infrastructure"
"domain/models" = "Domain"

Rules

See RULES.md for a complete catalog of enforced rules and "Clean Fix" examples.

Contributing

  1. Fork the repo.
  2. Install dependencies: make install.
  3. Run tests: make test.
  4. Submit a PR.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clean_architecture_linter_plugin-1.2.0.tar.gz (27.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file clean_architecture_linter_plugin-1.2.0.tar.gz.

File metadata

File hashes

Hashes for clean_architecture_linter_plugin-1.2.0.tar.gz
Algorithm Hash digest
SHA256 ee50914ec433d249232fc63120c090947e9546b2a78e5cc24fdb49b0d2880175
MD5 3e99f517659b605654d60bd261ba7d6e
BLAKE2b-256 7776f852b948b0cad72d4dac5eef67f75b3dc097a2b232b1de0e48dbfb219207

See more details on using hashes here.

Provenance

The following attestation bundles were made for clean_architecture_linter_plugin-1.2.0.tar.gz:

Publisher: publish.yml on noah-goodrich/pylint-clean-architecture

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clean_architecture_linter_plugin-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for clean_architecture_linter_plugin-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce98de5774a92c137401090189472b734d3645104d5d5ca6abd2530dab283002
MD5 8c6888a06b146fd7a65b8aced0aacc19
BLAKE2b-256 5bdfa952be3a970c55c20b32730110c1d39a2cf4a26c6fc8b93145a2e9c409af

See more details on using hashes here.

Provenance

The following attestation bundles were made for clean_architecture_linter_plugin-1.2.0-py3-none-any.whl:

Publisher: publish.yml on noah-goodrich/pylint-clean-architecture

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page