mirror of
https://github.com/hanskokx/arcane_analysis.git
synced 2026-05-14 02:19:10 +02:00
+29
@@ -0,0 +1,29 @@
|
|||||||
|
# Miscellaneous
|
||||||
|
*.class
|
||||||
|
*.log
|
||||||
|
*.pyc
|
||||||
|
*.swp
|
||||||
|
.DS_Store
|
||||||
|
.atom/
|
||||||
|
.buildlog/
|
||||||
|
.history
|
||||||
|
.svn/
|
||||||
|
migrate_working_dir/
|
||||||
|
|
||||||
|
# IntelliJ related
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# The .vscode folder contains launch configuration and tasks you configure in
|
||||||
|
# VS Code which you may wish to be included in version control, so this line
|
||||||
|
# is commented out by default.
|
||||||
|
#.vscode/
|
||||||
|
|
||||||
|
# Flutter/Dart/Pub related
|
||||||
|
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
|
||||||
|
/pubspec.lock
|
||||||
|
**/doc/api/
|
||||||
|
.dart_tool/
|
||||||
|
build/
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# This file tracks properties of this Flutter project.
|
||||||
|
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||||
|
#
|
||||||
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
|
version:
|
||||||
|
revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
|
||||||
|
channel: "stable"
|
||||||
|
|
||||||
|
project_type: package
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
## 0.0.1
|
||||||
|
|
||||||
|
* TODO: Describe initial release.
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
This package provides lint rules for Dart and Flutter which are used by the [Arcane Framework](https://github.com/hanskokx/arcane_framework). For more information, see the [complete list of options](https://github.com/hanskokx/arcane_analysis/blob/main/lib/analysis_options.1.0.0.yaml).
|
||||||
|
|
||||||
|
**Note**: Although the linting rules differ, the package layout has taken enormous inspiration from the excellent [very_good_analysis](https://github.com/VeryGoodOpenSource/very_good_analysis) package from [Very Good Ventures](https://verygood.ventures/), which was in turn heavily inspired by [pedantic](https://github.com/dart-lang/pedantic).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To use the linting rules, add this package as a dev dependency in your `pubspec.yaml`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dart pub add dev:arcane_analysis
|
||||||
|
# or
|
||||||
|
flutter pub add dev:arcane_analysis
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, include it in `analysis_options.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
include: package:arcane_analysis/analysis_options.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
This 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:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
include: package:arcane_analysis/analysis_options.1.0.0.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Suppressing Lints
|
||||||
|
|
||||||
|
There may be cases where specific lint rules are undesirable. Lint rules can be suppressed at the line, file, or project level.
|
||||||
|
|
||||||
|
An 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.
|
||||||
|
|
||||||
|
### Line Level
|
||||||
|
|
||||||
|
To suppress a specific lint rule for a specific line of code, use an `ignore` comment directly above the line:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
void doSomething() {
|
||||||
|
// ignore: avoid_print
|
||||||
|
print("This would produce a warning.");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### File Level
|
||||||
|
|
||||||
|
To suppress a specific lint rule of a specific file, use an `ignore_for_file` comment at the top of the file:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
// ignore_for_file: avoid_print
|
||||||
|
|
||||||
|
void doSomething() {
|
||||||
|
print("This would produce a warning.");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Project Level
|
||||||
|
|
||||||
|
To suppress a specific lint rule for an entire project, modify `analysis_options.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
include: package:arcane_analysis/analysis_options.yaml
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
avoid_print: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Badge
|
||||||
|
|
||||||
|
To indicate your project is using `arcane_analysis` → 
|
||||||
|
|
||||||
|
```md
|
||||||
|
[](https://pub.dev/packages/arcane_analysis)
|
||||||
|
```
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
include: lib/analyysis_options.yaml
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
include: package:arcane_analysis/analysis_options.yaml
|
||||||
|
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
public_member_api_docs: false
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// The following syntax deactivates a lint for the entire file:
|
||||||
|
// ignore_for_file: avoid_print
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
/// The following line would normally show a lint warning
|
||||||
|
/// but we can disable the lint rule for this line using the following syntax.
|
||||||
|
var greeting = 'hello world'; // ignore: prefer_final_locals
|
||||||
|
|
||||||
|
/// The following line would normally show a lint warning
|
||||||
|
/// but we can disable the lint rule for this file using `ignore_for_file`.
|
||||||
|
print(greeting);
|
||||||
|
}
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
include: package:flutter_lints/flutter.yaml
|
||||||
|
|
||||||
|
analyzer:
|
||||||
|
errors:
|
||||||
|
# treat missing required parameters as an error (not a hint)
|
||||||
|
missing_required_param: error
|
||||||
|
# treat missing returns as an error (not a hint)
|
||||||
|
missing_return: error
|
||||||
|
invalid_annotation_target: ignore
|
||||||
|
exclude:
|
||||||
|
- lib/**/*.g.dart
|
||||||
|
- lib/*.g.dart
|
||||||
|
- lib/**/*.graphql.dart
|
||||||
|
- lib/**/*.freezed.dart
|
||||||
|
- test/**/*.mocks.dart
|
||||||
|
language:
|
||||||
|
strict-casts: true
|
||||||
|
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
always_declare_return_types: true
|
||||||
|
always_put_required_named_parameters_first: true
|
||||||
|
annotate_overrides: true
|
||||||
|
avoid_annotating_with_dynamic: true
|
||||||
|
avoid_dynamic_calls: true
|
||||||
|
avoid_escaping_inner_quotes: true
|
||||||
|
avoid_function_literals_in_foreach_calls: true
|
||||||
|
avoid_null_checks_in_equality_operators: true
|
||||||
|
avoid_print: true
|
||||||
|
avoid_relative_lib_imports: true
|
||||||
|
avoid_setters_without_getters: true
|
||||||
|
avoid_shadowing_type_parameters: true
|
||||||
|
avoid_single_cascade_in_expression_statements: true
|
||||||
|
avoid_unnecessary_containers: true
|
||||||
|
avoid_unused_constructor_parameters: true
|
||||||
|
avoid_void_async: true
|
||||||
|
camel_case_extensions: true
|
||||||
|
camel_case_types: true
|
||||||
|
cancel_subscriptions: true
|
||||||
|
close_sinks: true
|
||||||
|
collection_methods_unrelated_type: true
|
||||||
|
constant_identifier_names: true
|
||||||
|
control_flow_in_finally: true
|
||||||
|
depend_on_referenced_packages: true
|
||||||
|
directives_ordering: true
|
||||||
|
empty_constructor_bodies: true
|
||||||
|
empty_statements: true
|
||||||
|
eol_at_end_of_file: true
|
||||||
|
exhaustive_cases: true
|
||||||
|
file_names: true
|
||||||
|
flutter_style_todos: true
|
||||||
|
hash_and_equals: true
|
||||||
|
implementation_imports: true
|
||||||
|
implicit_call_tearoffs: true
|
||||||
|
leading_newlines_in_multiline_strings: true
|
||||||
|
missing_whitespace_between_adjacent_strings: true
|
||||||
|
no_adjacent_strings_in_list: true
|
||||||
|
no_duplicate_case_values: true
|
||||||
|
no_leading_underscores_for_library_prefixes: true
|
||||||
|
no_leading_underscores_for_local_identifiers: true
|
||||||
|
no_logic_in_create_state: true
|
||||||
|
no_runtimeType_toString: true
|
||||||
|
non_constant_identifier_names: true
|
||||||
|
null_check_on_nullable_type_parameter: true
|
||||||
|
null_closures: true
|
||||||
|
only_throw_errors: true
|
||||||
|
package_prefixed_library_names: true
|
||||||
|
prefer_adjacent_string_concatenation: true
|
||||||
|
prefer_asserts_in_initializer_lists: true
|
||||||
|
prefer_collection_literals: true
|
||||||
|
prefer_conditional_assignment: true
|
||||||
|
prefer_const_constructors_in_immutables: true
|
||||||
|
prefer_const_constructors: true
|
||||||
|
prefer_const_declarations: true
|
||||||
|
prefer_const_literals_to_create_immutables: true
|
||||||
|
prefer_constructors_over_static_methods: true
|
||||||
|
prefer_contains: true
|
||||||
|
prefer_double_quotes: true
|
||||||
|
prefer_final_fields: true
|
||||||
|
prefer_final_in_for_each: true
|
||||||
|
prefer_final_locals: true
|
||||||
|
prefer_for_elements_to_map_fromIterable: true
|
||||||
|
prefer_function_declarations_over_variables: true
|
||||||
|
prefer_generic_function_type_aliases: true
|
||||||
|
prefer_if_null_operators: true
|
||||||
|
prefer_initializing_formals: true
|
||||||
|
prefer_inlined_adds: true
|
||||||
|
prefer_interpolation_to_compose_strings: true
|
||||||
|
prefer_is_empty: true
|
||||||
|
prefer_is_not_empty: true
|
||||||
|
prefer_is_not_operator: true
|
||||||
|
prefer_iterable_whereType: true
|
||||||
|
prefer_null_aware_operators: true
|
||||||
|
prefer_spread_collections: true
|
||||||
|
prefer_typing_uninitialized_variables: true
|
||||||
|
provide_deprecation_message: true
|
||||||
|
recursive_getters: true
|
||||||
|
require_trailing_commas: true
|
||||||
|
sized_box_for_whitespace: true
|
||||||
|
sized_box_shrink_expand: true
|
||||||
|
slash_for_doc_comments: true
|
||||||
|
sort_child_properties_last: true
|
||||||
|
sort_pub_dependencies: true
|
||||||
|
type_init_formals: true
|
||||||
|
type_literal_in_constant_pattern: true
|
||||||
|
unawaited_futures: true
|
||||||
|
unnecessary_await_in_return: true
|
||||||
|
unnecessary_brace_in_string_interps: true
|
||||||
|
unnecessary_const: true
|
||||||
|
unnecessary_constructor_name: true
|
||||||
|
unnecessary_getters_setters: true
|
||||||
|
unnecessary_late: true
|
||||||
|
unnecessary_new: true
|
||||||
|
unnecessary_null_aware_assignments: true
|
||||||
|
unnecessary_null_in_if_null_operators: true
|
||||||
|
unnecessary_nullable_for_final_variable_declarations: true
|
||||||
|
unnecessary_overrides: true
|
||||||
|
unnecessary_parenthesis: true
|
||||||
|
unnecessary_statements: true
|
||||||
|
use_build_context_synchronously: true
|
||||||
|
use_colored_box: true
|
||||||
|
use_key_in_widget_constructors: true
|
||||||
|
valid_regexps: true
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
include: package:arcane_analysis/analysis_options.1.0.0.yaml
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
/// Arcane's Dart analyser settings and best practices
|
||||||
|
library arcane_analysis;
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
name: arcane_analysis
|
||||||
|
description: Linting rules for Dart and Flutter used by the Arcane Framework
|
||||||
|
version: 1.0.0
|
||||||
|
homepage: https://github.com/hanskokx/arcane_analysis
|
||||||
|
repository: https://github.com/hanskokx/arcane_analysis
|
||||||
|
documentation: https://github.com/hanskokx/arcane_analysis
|
||||||
|
issue_tracker: https://github.com/hanskokx/arcane_analysis/issues
|
||||||
|
topics: [lints, analyzer, analysis, linting rules, linter, arcane_framework, arcane]
|
||||||
|
|
||||||
|
environment:
|
||||||
|
sdk: ^3.5.3
|
||||||
|
|
||||||
Reference in New Issue
Block a user