Skip to main content

clean_arch_lint 1.0.0 copy "clean_arch_lint: ^1.0.0" to clipboard
clean_arch_lint: ^1.0.0 copied to clipboard

Custom lint rules for enforcing Clean Architecture boundaries in Flutter/Dart projects.

clean_arch_lint #

Lint customizado para Flutter Clean Architecture, focado em enforce de camadas usando análise estática (AST) com custom_lint.

Este package atua como um guardião da arquitetura: se uma camada depender de quem não deve, o erro aparece na hora.


🎯 Objetivo #

Garantir que a estrutura abaixo seja respeitada automaticamente:

lib/
 ├─ core/
 ├─ data/
 └─ presentation/

Sem discussão em PR. Sem “foi sem querer”. O lint resolve.


🧱 Conceito das camadas #

core #

Camada pura, sem Flutter e sem infraestrutura.

Contém:

  • entidades
  • usecases
  • contratos (interfaces)
  • regras de negócio

data #

Implementações técnicas.

Contém:

  • datasources
  • models / DTOs
  • mappers
  • implementações de repositórios (Impl)

presentation #

Interface do usuário.

Contém:

  • widgets
  • pages
  • bloc / cubit
  • viewmodels / controllers

🚨 Regras de lint #

1️⃣ core_no_flutter (ERROR) #

❌ Proíbe imports de Flutter no core.

Bloqueia:

  • package:flutter/*
  • dart:ui
  • package:flutter_test/*

Motivo: Core precisa ser totalmente independente de UI.


2️⃣ core_no_data_or_presentation (ERROR) #

❌ Proíbe o core de depender de data ou presentation.

Regra de ouro da Clean Architecture:

Dependências sempre apontam para dentro.


3️⃣ data_no_presentation (ERROR) #

❌ data não pode importar nada de presentation.

Motivo:

  • Evita acoplamento de infraestrutura com UI
  • Garante testabilidade

4️⃣ presentation_no_data (WARNING configurável) #

⚠️ Por padrão, presentation não deve depender diretamente de data.

✔️ Usecases e contratos devem vir do core.

Essa regra pode ser configurada para ERROR.


📦 Instalação #

1) Adicione as dependências no app Flutter #

dev_dependencies:
  custom_lint: ^0.8.1
  clean_arch_lint:
    path: ../clean_arch_lint
    # Ou, quando publicado:
    # clean_arch_lint: ^1.0.0

Ajuste o path conforme sua estrutura de repositórios.


2) Habilite o plugin no analysis_options.yaml #

analyzer:
  plugins:
    - custom_lint

▶️ Como rodar #

# Execução única
dart run custom_lint

# Modo watch (re-executa ao salvar arquivos)
dart run custom_lint --watch

No VSCode / Android Studio:

  • Os erros aparecem automaticamente no editor
  • Funciona em tempo real enquanto você digita

⚙️ Configuração #

Tornar presentation_no_data um ERROR #

custom_lint:
  rules:
    - presentation_no_data:
        severity: error

Ignorar paths específicos (exemplo) #

custom_lint:
  rules:
    - core_no_flutter:
        ignore:
          - lib/core/di/**

Útil para casos muito específicos como bootstrap de DI.


✅ Exemplos #

Import permitido #

import 'package:my_app/core/usecases/get_user.dart';

Import proibido (core → flutter) #

import 'package:flutter/material.dart'; // ❌ erro

Import proibido (presentation → data) #

import 'package:my_app/data/user_repository_impl.dart'; // ⚠️ ou ❌

🧠 Boas práticas recomendadas #

  • Interfaces sempre no core
  • Implementações sempre no data
  • UI depende apenas de abstrações
  • Injeção de dependência resolve o resto

❌ O que este lint NÃO faz #

  • Não gera código
  • Não corrige automaticamente
  • Não substitui code review

Ele apenas aponta o erro antes de virar dívida técnica.


🧩 Stack técnica #

  • Dart SDK >= 3.0
  • analyzer
  • custom_lint_builder
  • path

Sem build_runner. Sem source_gen.


🏁 Resumo rápido #

Camada Pode depender de
core core apenas
data core, data
presentation core, presentation

Se passar disso, o lint apita.


Arquitetura limpa não é opinião. É contrato.

0
likes
0
points
278
downloads

Publisher

verified publishersaulogatti.com.br

Weekly Downloads

Custom lint rules for enforcing Clean Architecture boundaries in Flutter/Dart projects.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

analyzer, custom_lint_builder, path

More

Packages that depend on clean_arch_lint