[{"data":1,"prerenderedAt":23},["ShallowReactive",2],{"articolo-analisi-statica-avanzata-in-flutter-configurare-i-lint-con-analysis-optionsyaml":3,"comments-article-analisi-statica-avanzata-in-flutter-configurare-i-lint-con-analysis-optionsyaml":22},{"id":4,"title":5,"slug":6,"excerpt":7,"body":8,"cover_image":9,"video_url":10,"status":11,"published_at":12,"meta_title":13,"meta_description":14,"category":15,"author":19},58,"Analisi statica avanzata in Flutter: configurare i lint con analysis_options.yaml","analisi-statica-avanzata-in-flutter-configurare-i-lint-con-analysis-optionsyaml","Scopri come sfruttare l'analizzatore statico di Dart per scrivere codice più pulito e sicuro. Guida pratica alla configurazione di analysis_options.yaml, alle regole di lint e ai custom lint.","## Perché l'analisi statica conta\n\nL'analizzatore statico di Dart è uno degli strumenti più sottovalutati dagli sviluppatori Flutter. Lavora silenziosamente nell'IDE evidenziando errori, potenziali bug e violazioni di stile *prima* che il codice venga eseguito. Configurarlo correttamente significa intercettare problemi in fase di scrittura, uniformare lo stile del team e ridurre il carico di lavoro durante le code review.\n\nIn questo articolo vediamo come dominare il file `analysis_options.yaml`, cuore della configurazione dell'analizzatore.\n\n## Il file analysis_options.yaml\n\nÈ un file di configurazione YAML posizionato nella root del progetto. Se non esiste, crealo. La struttura base include l'importazione di un set di regole predefinite:\n\n```yaml\ninclude: package:flutter_lints\u002Fflutter.yaml\n\nanalyzer:\n  language:\n    strict-casts: true\n    strict-inference: true\n    strict-raw-types: true\n  errors:\n    invalid_annotation_target: ignore\n\nlinter:\n  rules:\n    - prefer_const_constructors\n    - avoid_print\n    - require_trailing_commas\n```\n\nIl pacchetto `flutter_lints` è incluso di default nei nuovi progetti Flutter. Un'alternativa più severa e popolare è `very_good_analysis`, mantenuto da Very Good Ventures.\n\n```yaml\ndev_dependencies:\n  flutter_lints: ^5.0.0\n  # oppure\n  very_good_analysis: ^7.0.0\n```\n\n## Le tre modalità strict\n\nLe opzioni sotto `language` attivano controlli di tipo più rigorosi che ti proteggono da errori sottili:\n\n- **strict-casts**: impedisce cast impliciti da `dynamic` a tipi concreti, forzandoti a esplicitarli.\n- **strict-inference**: segnala quando il tipo viene inferito come `dynamic` senza annotazione esplicita.\n- **strict-raw-types**: richiede parametri generici espliciti, ad esempio `List\u003CString>` invece di `List`.\n\nAttivarle fin dall'inizio di un progetto è una best practice: farlo su una codebase esistente può generare centinaia di segnalazioni.\n\n## Gestire errori e severità\n\nLa sezione `errors` permette di modificare la severità di ogni diagnostica. I valori possibili sono `error`, `warning`, `info` e `ignore`:\n\n```yaml\nanalyzer:\n  errors:\n    # Trasforma un warning in errore bloccante\n    missing_required_param: error\n    # Ignora una regola specifica del progetto\n    todo: ignore\n    # Declassa a info\n    deprecated_member_use: info\n```\n\nTrasformare i lint critici in `error` è utile nelle pipeline CI: `dart analyze` restituirà un exit code diverso da zero e bloccherà la build.\n\n## Escludere file dall'analisi\n\nI file generati (come quelli di `build_runner`) non devono essere analizzati. Usa `exclude`:\n\n```yaml\nanalyzer:\n  exclude:\n    - \"**\u002F*.g.dart\"\n    - \"**\u002F*.freezed.dart\"\n    - \"lib\u002Fgenerated_plugin_registrant.dart\"\n    - \"build\u002F**\"\n```\n\n## Regole utili da attivare\n\nOltre ai preset, alcune regole valgono la pena di essere aggiunte manualmente per la qualità del codice:\n\n```yaml\nlinter:\n  rules:\n    - always_declare_return_types\n    - avoid_dynamic_calls\n    - prefer_final_locals\n    - unawaited_futures\n    - use_build_context_synchronously\n    - sort_child_properties_last\n    - avoid_redundant_argument_values\n```\n\nLa regola `use_build_context_synchronously` è particolarmente preziosa: segnala l'uso del `BuildContext` dopo un `await`, una delle cause più comuni di crash quando il widget viene smontato.\n\n## Ignorare regole a livello di codice\n\nA volte una regola non ha senso in un punto specifico. Puoi disabilitarla con un commento, senza toccare la configurazione globale:\n\n```dart\n\u002F\u002F ignore_for_file: avoid_print\n\nvoid debugLog(String message) {\n  \u002F\u002F ignore: avoid_print\n  print(message);\n}\n```\n\nUsa `ignore` per la singola riga successiva e `ignore_for_file` per l'intero file. Meglio usarli con parsimonia e documentarne il motivo.\n\n## Custom lint con custom_lint\n\nPer regole specifiche del tuo dominio, il pacchetto `custom_lint` permette di scrivere lint personalizzati. Molti pacchetti popolari lo sfruttano: ad esempio `riverpod_lint` fornisce regole dedicate a Riverpod.\n\n```yaml\ndev_dependencies:\n  custom_lint: ^0.7.0\n  riverpod_lint: ^2.6.0\n\nanalyzer:\n  plugins:\n    - custom_lint\n```\n\nDopo la configurazione, esegui `dart run custom_lint` per vedere le segnalazioni personalizzate anche fuori dall'IDE.\n\n## Integrazione con la CI\n\nIl comando chiave da eseguire nella pipeline è:\n\n```bash\ndart analyze --fatal-infos\n```\n\nCon `--fatal-infos` anche le segnalazioni di livello `info` fanno fallire la build, garantendo il massimo rigore. Combinalo con `dart format --set-exit-if-changed .` per verificare anche la formattazione.\n\n## Conclusione\n\nUn `analysis_options.yaml` ben curato è un investimento a basso costo con altissimo ritorno: previene bug, standardizza il codice e alleggerisce le review. Parti da un preset solido come `very_good_analysis`, attiva le modalità strict e aggiungi progressivamente le regole più adatte al tuo team. Il tuo io futuro (e i tuoi colleghi) ti ringrazieranno.","https:\u002F\u002Fflutter.it\u002Fstorage\u002Farticles\u002F2d2c063c-af0b-4acf-acdf-8904bc0cce91.jpg",null,"published","2026-08-06T04:00:39+00:00","Analisi statica Flutter: guida a analysis_options.yaml","Configura lint e analisi statica in Flutter con analysis_options.yaml: regole strict, custom lint e integrazione CI per codice più pulito e sicuro.",{"id":16,"name":17,"slug":18},3,"Best practice","best-practice",{"id":20,"name":21},1,"Flutter Bot",[],1786003300699]