impeccable_flutter_lints 0.1.2
impeccable_flutter_lints: ^0.1.2 copied to clipboard
Detector estático de anti-padrões de design para apps Flutter. Plugin custom_lint que cobre AI slop (gradient AppBar, deepPurple seed, bounce easing) e quality (TextStyle literal, missing Semantics, t [...]
Changelog #
Todos os releases do impeccable_flutter_lints. Segue Keep a Changelog e SemVer.
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/Cardcom fundo de cor saturada (Colors.blue,Colors.purple, etc.) envolvendoTextcomTextStyle.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/Cardcom fundo literal eTextdescendente comTextStyle.colorliteral 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últiplosSemantics(header: true, child: Text(_, style: TextStyle(fontSize: <N>)))dentro de um mesmo métodobuild()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_palette—Color(0xFF<hex>)da família roxo/índigo IA (10 hexes).impeccable_border_accent_on_rounded—Border.all(width: >2)+borderRadiusarredondado.impeccable_deep_purple_seed—ColorScheme.fromSeed(seedColor: Colors.deepPurple).impeccable_bounce_elastic_curve—Curves.bounce*ouCurves.elastic*.impeccable_dark_glow—BoxShadowcomblurRadius >30.impeccable_gradient_text—ShaderMask+LinearGradientenvolvendoText.impeccable_italic_serif_display—TextStyleitalic + serif (Fraunces, Lora, etc.) +fontSize >32.impeccable_nested_cards—Cardaninhado emCard.impeccable_side_tab—Border(left: BorderSide(width: >1))desigual.impeccable_single_font—TextThemecom mesmafontFamilyem ≥4 papéis.
Quality (15):
impeccable_all_caps_body—Text('STRING')>12 chars todo em uppercase.impeccable_black_white_literal—Colors.black/Colors.whiteliteral.impeccable_cramped_padding—EdgeInsets.all(<8).impeccable_justified_text—TextAlign.justifyem mobile.impeccable_layout_transition—AnimatedContainermudando width/height/padding/margin/constraints.impeccable_material_baseline—MaterialApp/CupertinoAppsemtheme:/darkTheme:.impeccable_missing_safe_area—Scaffold(extendBodyBehindAppBar: true)semSafeArea.impeccable_missing_semantics—GestureDetector/InkWellinterativo semSemantics/Text/tooltip.impeccable_missing_tooltip—IconButtonsemtooltip:.impeccable_textstyle_outside_theme—TextStyle(...)literal em vez detextTheme.X.impeccable_tight_leading—TextStyle.height <1.15.impeccable_tiny_text—TextStyle.fontSize <12.impeccable_touch_target_too_small—IconButton(padding: EdgeInsets.zero)ou compact density + iconSize <24.impeccable_use_material3_false—useMaterial3: false.impeccable_wide_tracking—TextStyle.letterSpacing >2.
Conhecido — limitações #
monotonous_spacingeeverything_centeredprecisam de agregação cross-node, não suportada bem porcustom_lint_core0.7.5. Implementadas via--fastregex no CLIimpeccable_flutter.overused_font(GoogleFonts da reflex-reject list) não dispara viaaddMethodInvocation/addSimpleIdentifieremcustom_lint_core0.7.5. Implementada via--fastregex.
Testes #
- 26 integration tests via
dart test. Cada regra é validada contra fixtures emexample/lib/should_flag.dart(deve flagar) eexample/lib/should_pass.dart(não deve flagar). Tempo de suite: ~13s.