{"id":19197155,"url":"https://github.com/verygoodopensource/very_good_analysis","last_synced_at":"2026-02-16T10:50:27.169Z","repository":{"id":37948950,"uuid":"292080605","full_name":"VeryGoodOpenSource/very_good_analysis","owner":"VeryGoodOpenSource","description":"Lint rules for Dart and Flutter used internally at Very Good Ventures 🦄","archived":false,"fork":false,"pushed_at":"2025-05-06T14:25:39.000Z","size":228,"stargazers_count":408,"open_issues_count":7,"forks_count":41,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-05-06T15:47:06.412Z","etag":null,"topics":["analysis","dart","dart-library","flutter","lint","lint-rules"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/very_good_analysis","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VeryGoodOpenSource.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-01T18:46:54.000Z","updated_at":"2025-05-02T19:48:42.000Z","dependencies_parsed_at":"2023-02-05T23:00:46.336Z","dependency_job_id":"98742771-f433-4b5e-9630-8f05ce0c083d","html_url":"https://github.com/VeryGoodOpenSource/very_good_analysis","commit_stats":{"total_commits":83,"total_committers":16,"mean_commits":5.1875,"dds":0.5903614457831325,"last_synced_commit":"00f898aea7e99c0c5f3dfd85e46aceb896a32359"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VeryGoodOpenSource%2Fvery_good_analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VeryGoodOpenSource%2Fvery_good_analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VeryGoodOpenSource%2Fvery_good_analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VeryGoodOpenSource%2Fvery_good_analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VeryGoodOpenSource","download_url":"https://codeload.github.com/VeryGoodOpenSource/very_good_analysis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254254039,"owners_count":22039792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","dart","dart-library","flutter","lint","lint-rules"],"created_at":"2024-11-09T12:15:42.752Z","updated_at":"2026-02-16T10:50:27.150Z","avatar_url":"https://github.com/VeryGoodOpenSource.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Very Good Analysis\n\n[![Very Good Ventures][logo_black]][very_good_ventures_link_light]\n[![Very Good Ventures][logo_white]][very_good_ventures_link_dark]\n\nDeveloped with 💙 by [Very Good Ventures][very_good_ventures_link] 🦄\n\n[![ci][ci_badge]][ci_badge_link]\n[![pub package][pub_badge]][pub_badge_link]\n[![License: MIT][license_badge]][license_badge_link]\n[![style: very good analysis][badge]][badge_link]\n\n---\n\nThis package provides lint rules for Dart and Flutter which are used at [Very Good Ventures][very_good_ventures_link]. For more information, see the [complete list of options][analysis_options_yaml].\n\n**Note**: This package was heavily inspired by [pedantic][pedantic_link].\n\n## Usage\n\nTo use the lints, add as a dev dependency in your `pubspec.yaml`:\n\n```yaml\ndart pub add dev:very_good_analysis\n# or\nflutter pub add dev:very_good_analysis\n```\n\nThen, add an include in `analysis_options.yaml`:\n\n```yaml\ninclude: package:very_good_analysis/analysis_options.yaml\n```\n\nThis will ensure you always use the latest version of the lints. If you wish to restrict the lint version, specify a version of `analysis_options.yaml` instead:\n\n```yaml\ninclude: package:very_good_analysis/analysis_options.10.0.0.yaml\n```\n\n## Suppressing Lints\n\nThere may be cases where specific lint rules are undesirable. Lint rules can be suppressed at the line, file, or project level.\n\nAn example use case for suppressing lint rules at the file level is suppressing the `prefer_const_constructors` in order to achieve 100% code coverage. This is due to the fact that const constructors are executed before the tests are run, resulting in no coverage collection.\n\n### Line Level\n\nTo suppress a specific lint rule for a specific line of code, use an `ignore` comment directly above the line:\n\n```dart\n// ignore: public_member_api_docs\nclass A {}\n```\n\n### File Level\n\nTo suppress a specific lint rule of a specific file, use an `ignore_for_file` comment at the top of the file:\n\n```dart\n// ignore_for_file: public_member_api_docs\n\nclass A {}\n\nclass B {}\n```\n\n### Project Level\n\nTo suppress a specific lint rule for an entire project, modify `analysis_options.yaml`:\n\n```yaml\ninclude: package:very_good_analysis/analysis_options.yaml\nlinter:\n  rules:\n    public_member_api_docs: false\n```\n\n## Badge\n\nTo indicate your project is using `very_good_analysis` →\n[![style: very good analysis][badge]][badge_link]\n\n```md\n[![style: very good analysis](https://img.shields.io/badge/style-very_good_analysis-B22C89.svg)](https://pub.dev/packages/very_good_analysis)\n```\n\n## Excluded rules\n\nBelow is a list of rules that are not enabled by default together with the reason on why they have been excluded:\n\n\u003c!-- start:excluded_rules_table --\u003e\n| Rule | Reason |\n| --- | --- |\n| [`always_put_control_body_on_new_line`](https://dart.dev/tools/linter-rules/always_put_control_body_on_new_line) | [Can conflict with the Dart formatter](https://dart.dev/tools/linter-rules/always_put_control_body_on_new_line) |\n| [`always_specify_types`](https://dart.dev/tools/linter-rules/always_specify_types) | Incompatible with [omit_local_variable_types](https://dart.dev/tools/linter-rules/omit_local_variable_types) |\n| [`annotate_redeclares`](https://dart.dev/tools/linter-rules/annotate_redeclares) | Experimental |\n| [`avoid_annotating_with_dynamic`](https://dart.dev/tools/linter-rules/avoid_annotating_with_dynamic) | Not specified |\n| [`avoid_classes_with_only_static_members`](https://dart.dev/tools/linter-rules/avoid_classes_with_only_static_members) | Not specified |\n| [`avoid_futureor_void`](https://dart.dev/tools/linter-rules/avoid_futureor_void) | Experimental |\n| [`avoid_implementing_value_types`](https://dart.dev/tools/linter-rules/avoid_implementing_value_types) | We need to implement value types for mocks/fakes in tests |\n| [`avoid_null_checks_in_equality_operators`](https://dart.dev/tools/linter-rules/avoid_null_checks_in_equality_operators) | Has been deprecated and [will be removed](https://github.com/dart-lang/sdk/issues/59514) |\n| [`close_sinks`](https://dart.dev/tools/linter-rules/close_sinks) | [Has unresolved false positives](https://github.com/dart-lang/linter/issues/1381) |\n| [`diagnostic_describe_all_properties`](https://dart.dev/tools/linter-rules/diagnostic_describe_all_properties) | Not specified |\n| [`do_not_use_environment`](https://dart.dev/tools/linter-rules/do_not_use_environment) | Not specified |\n| [`library_names`](https://dart.dev/tools/linter-rules/library_names) | [Superseded by `unnecessary_library_name`](https://github.com/dart-lang/lints/issues/172) |\n| [`omit_obvious_local_variable_types`](https://dart.dev/tools/linter-rules/omit_obvious_local_variable_types) | Experimental |\n| [`omit_obvious_property_types`](https://dart.dev/tools/linter-rules/omit_obvious_property_types) | Incompatible with [type_annotate_public_apis](https://github.com/dart-lang/sdk/issues/60642) |\n| [`package_prefixed_library_names`](https://dart.dev/tools/linter-rules/package_prefixed_library_names) | [Broken; superseded by `unnecessary_library_name`](https://github.com/dart-lang/lints/issues/172) |\n| [`prefer_double_quotes`](https://dart.dev/tools/linter-rules/prefer_double_quotes) | Incompatible with [prefer_single_quotes](https://dart.dev/tools/linter-rules/prefer_single_quotes) |\n| [`prefer_expression_function_bodies`](https://dart.dev/tools/linter-rules/prefer_expression_function_bodies) | Not specified |\n| [`prefer_final_parameters`](https://dart.dev/tools/linter-rules/prefer_final_parameters) | Incompatible with [avoid_final_parameters](https://dart.dev/tools/linter-rules/avoid_final_parameters) |\n| [`prefer_for_elements_to_map_fromiterable`](https://dart.dev/tools/linter-rules/prefer_for_elements_to_map_fromiterable) | Not specified |\n| [`prefer_relative_imports`](https://dart.dev/tools/linter-rules/prefer_relative_imports) | Incompatible with [always_use_package_imports](https://dart.dev/tools/linter-rules/always_use_package_imports) |\n| [`prefer_void_to_null`](https://dart.dev/tools/linter-rules/prefer_void_to_null) | [Has unresolved false positives](https://github.com/dart-lang/linter/issues/4758) |\n| [`specify_nonobvious_local_variable_types`](https://dart.dev/tools/linter-rules/specify_nonobvious_local_variable_types) | Experimental |\n| [`unnecessary_async`](https://dart.dev/tools/linter-rules/unnecessary_async) | Experimental |\n| [`unnecessary_final`](https://dart.dev/tools/linter-rules/unnecessary_final) | Incompatible with [prefer_final_locals](https://dart.dev/tools/linter-rules/prefer_final_locals) |\n| [`unsafe_variance`](https://dart.dev/tools/linter-rules/unsafe_variance) | Experimental |\n| [`use_decorated_box`](https://dart.dev/tools/linter-rules/use_decorated_box) | [Has unresolved malfunctions](https://github.com/dart-lang/linter/issues/3286) |\n\u003c!-- end:excluded_rules_table --\u003e\n\n[analysis_options_yaml]: https://github.com/VeryGoodOpenSource/very_good_analysis/blob/main/lib/analysis_options.10.0.0.yaml\n[ci_badge]: https://github.com/VeryGoodOpenSource/very_good_analysis/workflows/ci/badge.svg\n[ci_badge_link]: https://github.com/VeryGoodOpenSource/very_good_analysis/actions\n[badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg\n[badge_link]: https://pub.dev/packages/very_good_analysis\n[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg\n[license_badge_link]: https://opensource.org/licenses/MIT\n[logo_black]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_black.png#gh-light-mode-only\n[logo_white]: https://raw.githubusercontent.com/VGVentures/very_good_brand/main/styles/README/vgv_logo_white.png#gh-dark-mode-only\n[pedantic_link]: https://github.com/dart-lang/pedantic\n[pub_badge]: https://img.shields.io/pub/v/very_good_analysis.svg\n[pub_badge_link]: https://pub.dartlang.org/packages/very_good_analysis\n[very_good_ventures_link]: https://verygood.ventures\n[very_good_ventures_link_dark]: https://verygood.ventures#gh-dark-mode-only\n[very_good_ventures_link_light]: https://verygood.ventures#gh-light-mode-only\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverygoodopensource%2Fvery_good_analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverygoodopensource%2Fvery_good_analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverygoodopensource%2Fvery_good_analysis/lists"}