Initial commit

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2024-10-04 13:52:01 +02:00
commit 63d18f5c6c
12 changed files with 272 additions and 0 deletions
+29
View File
@@ -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/
+10
View File
@@ -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
+3
View File
@@ -0,0 +1,3 @@
## 0.0.1
* TODO: Describe initial release.
+1
View File
@@ -0,0 +1 @@
TODO: Add your license here.
+73
View File
@@ -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` → ![Arcane analysis Badge](https://img.shields.io/badge/style-arcane_analysis-6E35AE)
```md
[![style: arcane analysis](https://img.shields.io/badge/style-arcane_analysis-6E35AE)](https://pub.dev/packages/arcane_analysis)
```
+1
View File
@@ -0,0 +1 @@
include: lib/analyysis_options.yaml
+5
View File
@@ -0,0 +1,5 @@
include: package:arcane_analysis/analysis_options.yaml
linter:
rules:
public_member_api_docs: false
+12
View File
@@ -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);
}
+123
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
include: package:arcane_analysis/analysis_options.1.0.0.yaml
+2
View File
@@ -0,0 +1,2 @@
/// Arcane's Dart analyser settings and best practices
library arcane_analysis;
+12
View File
@@ -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