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.1.tar.gz (27.9 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.1.tar.gz.

File metadata

File hashes

Hashes for clean_architecture_linter_plugin-1.2.1.tar.gz
Algorithm Hash digest
SHA256 a39e4e9eb70dc964dfc873dcd04b2c40ebe68a888785389cd27b97fcbbc7f54f
MD5 c798f1bca2867cfd2efe37d09657cc0b
BLAKE2b-256 b0a50fa62b7c434a784f8678c814539dc6b910992ec38c1ab54b63d356a5be4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for clean_architecture_linter_plugin-1.2.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for clean_architecture_linter_plugin-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 05e32158a8ce978e306dc257f021f321e94068738c44accbc4e6801f5118bbad
MD5 7dbecaf653d9d30a181c1915c6f0bddd
BLAKE2b-256 3a2b1dbd1bdbc2e068e59142e1a47eb71ae20bf39137f73ae61f2f61c5ac423e

See more details on using hashes here.

Provenance

The following attestation bundles were made for clean_architecture_linter_plugin-1.2.1-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