impeccable_flutter_lints 0.1.4 copy "impeccable_flutter_lints: ^0.1.4" to clipboard
impeccable_flutter_lints: ^0.1.4 copied to clipboard

Plugin custom_lint que detecta anti-padrões de design em apps Flutter. 34 regras: AI slop (gradient, deepPurple) e quality (Semantics, contrast).

Changelog #

Todos os releases do impeccable_flutter_lints. Segue Keep a Changelog e SemVer.

0.1.4 #

Documentação — pana score fix complementar #

Pubspec raiz do monorepo renomeado de impeccable_flutter para impeccable_flutter_workspace (não publicável). Resolve o "Repository has multiple matching pubspec.yaml" do pana, mesmo issue que afetava o pacote irmão CLI.

Sem mudança em regras ou código.

0.1.3 #

Documentação e empacotamento — pana score fixes #

  • Description: encurtada de 288 para 145 chars (pana exige 60-180). Mantém menção a custom_lint, 34 regras e as duas categorias (slop / quality).
  • Repository URL: agora aponta para tree/main/lints em vez da raiz do monorepo, permitindo pana validar o pubspec correto.
  • LICENSE: substituído pelo boilerplate Apache 2.0 canônico (sem indentação no header). Detector SPDX reconhece a licença.

Sem mudança em regras ou comportamento.

0.1.2 #

Documentação #

  • Bump alinhado com impeccable_flutter (CLI) v0.1.2, que ganhou doc de PATH e workaround do bug anthropics/claude-code#18949 de skills via marketplace plugin. Sem mudança neste pacote.

0.1.1 #

Documentação #

  • README reescrito refletindo o estado real do pacote: removido o "pré-MVP, 5 regras proof-of-concept", substituído pela tabela completa das 34 regras (14 slop + 20 quality), schema do output JSON, instruções de instalação atualizadas e link ao pacote irmão impeccable_flutter (CLI).
  • Sem mudanças no código.

0.1.0 #

Adicionadas — 3 regras de a11y/contraste (cobertura agora 34 inline + 2 cross-file = 36) #

  • impeccable_gray_on_color (quality) — Container/Material/Card com fundo de cor saturada (Colors.blue, Colors.purple, etc.) envolvendo Text com TextStyle.color: Colors.grey*. Padrão clássico de dashboards e marketing screens em apps "modernos"; cinza fica próximo do fundo saturado e contraste cai para 1.5–2.5:1 (WCAG AA exige 4.5:1).
  • impeccable_low_contrast (quality) — Container/Material/Card com fundo literal e Text descendente com TextStyle.color literal cujo contraste WCAG é < 4.5:1. Resolve cores via tabela do Material palette + Color(0xFF...) literal + Color.fromARGB. Cores resolvidas em runtime (Theme.of, Color.lerp, withOpacity) são puladas silenciosamente. Sem falsos positivos quando ambas as cores podem ser resolvidas com confiança.
  • impeccable_skipped_heading (quality) — Múltiplos Semantics(header: true, child: Text(_, style: TextStyle(fontSize: <N>))) dentro de um mesmo método build() cujos fontSizes não estão em ordem decrescente (h1 → h2 → h3). Isolamento por método evita falsos positivos quando widgets distintos no mesmo arquivo têm headings independentes.

Mudou #

  • README e contagens atualizadas: 33 → 36 detectores (34 via custom_lint inline + 2 cross-file via impeccable_flutter --fast).

0.0.1 (initial release) #

Adicionadas — 25 regras de detecção #

Slop (10):

  • impeccable_ai_color_paletteColor(0xFF<hex>) da família roxo/índigo IA (10 hexes).
  • impeccable_border_accent_on_roundedBorder.all(width: >2) + borderRadius arredondado.
  • impeccable_deep_purple_seedColorScheme.fromSeed(seedColor: Colors.deepPurple).
  • impeccable_bounce_elastic_curveCurves.bounce* ou Curves.elastic*.
  • impeccable_dark_glowBoxShadow com blurRadius >30.
  • impeccable_gradient_textShaderMask + LinearGradient envolvendo Text.
  • impeccable_italic_serif_displayTextStyle italic + serif (Fraunces, Lora, etc.) + fontSize >32.
  • impeccable_nested_cardsCard aninhado em Card.
  • impeccable_side_tabBorder(left: BorderSide(width: >1)) desigual.
  • impeccable_single_fontTextTheme com mesma fontFamily em ≥4 papéis.

Quality (15):

  • impeccable_all_caps_bodyText('STRING') >12 chars todo em uppercase.
  • impeccable_black_white_literalColors.black / Colors.white literal.
  • impeccable_cramped_paddingEdgeInsets.all(<8).
  • impeccable_justified_textTextAlign.justify em mobile.
  • impeccable_layout_transitionAnimatedContainer mudando width/height/padding/margin/constraints.
  • impeccable_material_baselineMaterialApp/CupertinoApp sem theme:/darkTheme:.
  • impeccable_missing_safe_areaScaffold(extendBodyBehindAppBar: true) sem SafeArea.
  • impeccable_missing_semanticsGestureDetector/InkWell interativo sem Semantics/Text/tooltip.
  • impeccable_missing_tooltipIconButton sem tooltip:.
  • impeccable_textstyle_outside_themeTextStyle(...) literal em vez de textTheme.X.
  • impeccable_tight_leadingTextStyle.height <1.15.
  • impeccable_tiny_textTextStyle.fontSize <12.
  • impeccable_touch_target_too_smallIconButton(padding: EdgeInsets.zero) ou compact density + iconSize <24.
  • impeccable_use_material3_falseuseMaterial3: false.
  • impeccable_wide_trackingTextStyle.letterSpacing >2.

Conhecido — limitações #

  • monotonous_spacing e everything_centered precisam de agregação cross-node, não suportada bem por custom_lint_core 0.7.5. Implementadas via --fast regex no CLI impeccable_flutter.
  • overused_font (GoogleFonts da reflex-reject list) não dispara via addMethodInvocation/addSimpleIdentifier em custom_lint_core 0.7.5. Implementada via --fast regex.

Testes #

  • 26 integration tests via dart test. Cada regra é validada contra fixtures em example/lib/should_flag.dart (deve flagar) e example/lib/should_pass.dart (não deve flagar). Tempo de suite: ~13s.
1
likes
130
points
49
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Plugin custom_lint que detecta anti-padrões de design em apps Flutter. 34 regras: AI slop (gradient, deepPurple) e quality (Semantics, contrast).

Homepage
Repository (GitHub)
View/report issues

Topics

#lints #design #analyzer #flutter #custom-lint

License

Apache-2.0 (license)

Dependencies

analyzer, analyzer_plugin, custom_lint_builder

More

Packages that depend on impeccable_flutter_lints