Skip to content

Commit 71594fd

Browse files
authored
Use package:pedantic as default package analysis ruleset. (#492)
1 parent a7e0820 commit 71594fd

10 files changed

+1846
-234
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
* Link to package layout conventions in example-related suggestions.
44

5+
* Use `package:pedantic` as default package analysis ruleset.
6+
57
## 0.12.11
68

79
* Maintenance score penalty for:

lib/src/analysis_options.dart

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,20 @@ import 'dart:convert';
77
import 'package:yaml/yaml.dart' as yaml;
88

99
const String _analysisOptions = '''
10-
# Source of linter options:
11-
# https://dart-lang.github.io/linter/lints/options/options.html
10+
# Defines a default set of lint rules enforced for
11+
# projects at Google. For details and rationale,
12+
# see https://github.com/dart-lang/pedantic#enabled-lints.
13+
include: package:pedantic/analysis_options.yaml
1214
13-
linter:
14-
rules:
15-
- camel_case_types
16-
- cancel_subscriptions
17-
- hash_and_equals
18-
- iterable_contains_unrelated_type
19-
- list_remove_unrelated_type
20-
- test_types_in_equals
21-
- unrelated_type_equality_checks
22-
- valid_regexps
15+
# For lint rules and documentation, see http://dart-lang.github.io/linter/lints.
16+
# Uncomment to specify additional rules.
17+
# linter:
18+
# rules:
19+
# - camel_case_types
20+
21+
# analyzer:
22+
# exclude:
23+
# - path/to/excluded/files/**
2324
''';
2425

2526
// Keep it updated with

lib/src/pkg_resolution.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,14 @@ List<PkgDependency> _buildDeps(Pubspec pubspec,
176176
}
177177
});
178178

179+
// We are adding pedantic to the dev_dependencies before running `pub upgrade`.
180+
// If the package does not reference it directly, we should remove it from the
181+
// analysis.
182+
if (!pubspec.dependencies.containsKey('pedantic') &&
183+
!pubspec.devDependencies.containsKey('pedantic')) {
184+
deps.removeWhere((p) => p.package == 'pedantic');
185+
}
186+
179187
deps.sort((a, b) => a.package.compareTo(b.package));
180188
return deps;
181189
}

lib/src/sdk_env.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ class ToolEnvironment {
436436
final parsed = yamlToJson(original);
437437
parsed.remove('dev_dependencies');
438438
parsed.remove('dependency_overrides');
439+
parsed['dev_dependencies'] = {'pedantic': '^1.0.0'};
439440

440441
await pubspec.rename(backup.path);
441442
await pubspec.writeAsString(json.encode(parsed));

test/analysis_options_test.dart

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,7 @@ import 'package:pana/src/analysis_options.dart';
1111
void main() {
1212
test('default options', () {
1313
expect(json.decode(customizeAnalysisOptions(null, false)), {
14-
'linter': {
15-
'rules': [
16-
'camel_case_types',
17-
'cancel_subscriptions',
18-
'hash_and_equals',
19-
'iterable_contains_unrelated_type',
20-
'list_remove_unrelated_type',
21-
'test_types_in_equals',
22-
'unrelated_type_equality_checks',
23-
'valid_regexps',
24-
]
25-
},
14+
'include': 'package:pedantic/analysis_options.yaml',
2615
});
2716
});
2817

@@ -73,21 +62,10 @@ analyzer:
7362
todo: ignore
7463
''';
7564
expect(json.decode(customizeAnalysisOptions(original, false)), {
65+
'include': 'package:pedantic/analysis_options.yaml',
7666
'analyzer': {
7767
'errors': {},
7868
},
79-
'linter': {
80-
'rules': [
81-
'camel_case_types',
82-
'cancel_subscriptions',
83-
'hash_and_equals',
84-
'iterable_contains_unrelated_type',
85-
'list_remove_unrelated_type',
86-
'test_types_in_equals',
87-
'unrelated_type_equality_checks',
88-
'valid_regexps',
89-
],
90-
},
9169
});
9270
});
9371

@@ -98,23 +76,12 @@ analyzer:
9876
uri_has_not_been_generated: ignore
9977
''';
10078
expect(json.decode(customizeAnalysisOptions(original, false)), {
79+
'include': 'package:pedantic/analysis_options.yaml',
10180
'analyzer': {
10281
'errors': {
10382
'uri_has_not_been_generated': 'ignore',
10483
},
10584
},
106-
'linter': {
107-
'rules': [
108-
'camel_case_types',
109-
'cancel_subscriptions',
110-
'hash_and_equals',
111-
'iterable_contains_unrelated_type',
112-
'list_remove_unrelated_type',
113-
'test_types_in_equals',
114-
'unrelated_type_equality_checks',
115-
'valid_regexps',
116-
],
117-
},
11885
});
11986
});
12087
}

test/end2end/angular_components-0.10.0.json

Lines changed: 15 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"resolveProcessFailed": false,
6464
"analyzerErrorCount": 0,
6565
"analyzerWarningCount": 0,
66-
"analyzerHintCount": 102,
66+
"analyzerHintCount": 92,
6767
"platformConflictCount": 0,
6868
"suggestions": [
6969
{
@@ -93,9 +93,9 @@
9393
{
9494
"code": "bulk",
9595
"level": "hint",
96-
"title": "Fix additional 42 files with analysis or formatting issues.",
97-
"description": "Additional issues in the following files:\n\n- `lib/material_input/material_auto_suggest_input.dart` (5 hints)\n- `lib/material_input/material_input_multiline.dart` (5 hints)\n- `lib/material_stepper/material_step.dart` (5 hints)\n- `lib/material_input/material_input.dart` (4 hints)\n- `lib/model/menu/menu.dart` (4 hints)\n- `lib/src/model/selection/single_selection_model_impl.dart` (4 hints)\n- `lib/laminate/ruler/module.dart` (3 hints)\n- `lib/model/selection/selection_container.dart` (3 hints)\n- `lib/laminate/overlay/module.dart` (2 hints)\n- `lib/laminate/portal/portal.dart` (2 hints)\n- `lib/material_menu/menu_item_groups.dart` (2 hints)\n- `lib/model/date/time_zone_aware_clock.dart` (2 hints)\n- `lib/src/utils/angular/managed_zone/managed_zone.dart` (2 hints)\n- `lib/utils/angular/reference/reference.dart` (2 hints)\n- `lib/utils/comparators/comparators.dart` (2 hints)\n- `lib/dynamic_component/dynamic_component.dart` (1 hint)\n- `lib/material_datepicker/date_input.dart` (1 hint)\n- `lib/material_datepicker/date_range_editor.dart` (1 hint)\n- `lib/material_datepicker/material_calendar_picker.dart` (1 hint)\n- `lib/material_datepicker/material_date_grid_base.dart` (1 hint)\n- `lib/material_datepicker/module.dart` (1 hint)\n- `lib/material_input/base_material_input.dart` (1 hint)\n- `lib/material_menu/menu_popup_wrapper.dart` (1 hint)\n- `lib/material_popup/material_popup.dart` (1 hint)\n- `lib/material_select/dropdown_button.dart` (1 hint)\n- `lib/material_select/material_select.dart` (1 hint)\n- `lib/material_select/material_select_dropdown_item.dart` (1 hint)\n- `lib/material_stepper/material_stepper.dart` (1 hint)\n- `lib/mixins/highlight_assistant_mixin.dart` (1 hint)\n- `lib/model/date/date.dart` (1 hint)\n- `lib/model/menu/selectable_menu.dart` (1 hint)\n- `lib/src/laminate/popup/popup_hierarchy.dart` (1 hint)\n- `lib/src/material_datepicker/calendar/model.dart` (1 hint)\n- `lib/src/material_tree/material_tree_root.dart` (1 hint)\n- `lib/src/utils/angular/scroll_host/pan_controller_impl.dart` (1 hint)\n- `lib/src/utils/angular/scroll_host/position_sticky_controller.dart` (1 hint)\n- `lib/src/utils/angular/scroll_host/sticky_controller_impl.dart` (1 hint)\n- `lib/src/utils/async/simple_stream.dart` (1 hint)\n- `lib/utils/angular/managed_zone/interface.dart` (1 hint)\n- `lib/utils/angular/scroll_host/angular_2.dart` (1 hint)\n- `lib/utils/browser/dom_service/dom_service.dart` (1 hint)\n- `lib/utils/browser/events/events.dart` (1 hint)\n",
98-
"score": 36.89
96+
"title": "Fix additional 33 files with analysis or formatting issues.",
97+
"description": "Additional issues in the following files:\n\n- `lib/material_input/material_auto_suggest_input.dart` (5 hints)\n- `lib/material_input/material_input_multiline.dart` (5 hints)\n- `lib/material_stepper/material_step.dart` (5 hints)\n- `lib/material_input/material_input.dart` (4 hints)\n- `lib/model/menu/menu.dart` (4 hints)\n- `lib/src/model/selection/single_selection_model_impl.dart` (4 hints)\n- `lib/laminate/ruler/module.dart` (3 hints)\n- `lib/model/selection/selection_container.dart` (3 hints)\n- `lib/laminate/overlay/module.dart` (2 hints)\n- `lib/laminate/portal/portal.dart` (2 hints)\n- `lib/material_menu/menu_item_groups.dart` (2 hints)\n- `lib/model/date/time_zone_aware_clock.dart` (2 hints)\n- `lib/src/utils/angular/managed_zone/managed_zone.dart` (2 hints)\n- `lib/utils/angular/reference/reference.dart` (2 hints)\n- `lib/dynamic_component/dynamic_component.dart` (1 hint)\n- `lib/material_datepicker/date_input.dart` (1 hint)\n- `lib/material_datepicker/date_range_editor.dart` (1 hint)\n- `lib/material_datepicker/module.dart` (1 hint)\n- `lib/material_input/base_material_input.dart` (1 hint)\n- `lib/material_menu/menu_popup_wrapper.dart` (1 hint)\n- `lib/material_popup/material_popup.dart` (1 hint)\n- `lib/material_select/dropdown_button.dart` (1 hint)\n- `lib/material_select/material_select.dart` (1 hint)\n- `lib/material_select/material_select_dropdown_item.dart` (1 hint)\n- `lib/material_stepper/material_stepper.dart` (1 hint)\n- `lib/mixins/highlight_assistant_mixin.dart` (1 hint)\n- `lib/model/menu/selectable_menu.dart` (1 hint)\n- `lib/src/laminate/popup/popup_hierarchy.dart` (1 hint)\n- `lib/src/material_tree/material_tree_root.dart` (1 hint)\n- `lib/utils/angular/managed_zone/interface.dart` (1 hint)\n- `lib/utils/angular/scroll_host/angular_2.dart` (1 hint)\n- `lib/utils/browser/dom_service/dom_service.dart` (1 hint)\n- `lib/utils/browser/events/events.dart` (1 hint)\n",
98+
"score": 31.89
9999
}
100100
]
101101
},
@@ -204,7 +204,7 @@
204204
"package": "built_value",
205205
"dependencyType": "transitive",
206206
"constraintType": "inherited",
207-
"resolved": "6.2.0"
207+
"resolved": "6.3.0"
208208
},
209209
{
210210
"package": "charcode",
@@ -388,7 +388,7 @@
388388
"constraintType": "normal",
389389
"constraint": "^0.10.2",
390390
"resolved": "0.10.8",
391-
"available": "0.12.0"
391+
"available": "0.13.0"
392392
},
393393
{
394394
"package": "pub_semver",
@@ -11139,17 +11139,7 @@
1113911139
"uri": "package:angular_components/material_datepicker/material_calendar_picker.dart",
1114011140
"size": 31550,
1114111141
"isFormatted": true,
11142-
"codeProblems": [
11143-
{
11144-
"severity": "INFO",
11145-
"errorType": "LINT",
11146-
"errorCode": "hash_and_equals",
11147-
"file": "lib/material_datepicker/material_calendar_picker.dart",
11148-
"line": 947,
11149-
"col": 17,
11150-
"description": "Always override `hashCode` if overriding `==`."
11151-
}
11152-
],
11142+
"codeProblems": [],
1115311143
"directLibs": [
1115411144
"dart:async",
1115511145
"dart:html",
@@ -11407,17 +11397,7 @@
1140711397
"uri": "package:angular_components/material_datepicker/material_date_grid_base.dart",
1140811398
"size": 10402,
1140911399
"isFormatted": true,
11410-
"codeProblems": [
11411-
{
11412-
"severity": "INFO",
11413-
"errorType": "LINT",
11414-
"errorCode": "cancel_subscriptions",
11415-
"file": "lib/material_datepicker/material_date_grid_base.dart",
11416-
"line": 125,
11417-
"col": 22,
11418-
"description": "Cancel instances of dart.async.StreamSubscription."
11419-
}
11420-
],
11400+
"codeProblems": [],
1142111401
"directLibs": [
1142211402
"dart:async",
1142311403
"dart:html",
@@ -31429,17 +31409,7 @@
3142931409
"uri": "package:angular_components/model/date/date.dart",
3143031410
"size": 9786,
3143131411
"isFormatted": true,
31432-
"codeProblems": [
31433-
{
31434-
"severity": "INFO",
31435-
"errorType": "LINT",
31436-
"errorCode": "hash_and_equals",
31437-
"file": "lib/model/date/date.dart",
31438-
"line": 105,
31439-
"col": 11,
31440-
"description": "Always override `hashCode` if overriding `==`."
31441-
}
31442-
],
31412+
"codeProblems": [],
3144331413
"directLibs": [
3144431414
"dart:async",
3144531415
"package:angular_components/model/observable/observable.dart",
@@ -34413,17 +34383,7 @@
3441334383
"uri": "package:angular_components/src/material_datepicker/calendar/model.dart",
3441434384
"size": 13766,
3441534385
"isFormatted": true,
34416-
"codeProblems": [
34417-
{
34418-
"severity": "INFO",
34419-
"errorType": "LINT",
34420-
"errorCode": "hash_and_equals",
34421-
"file": "lib/src/material_datepicker/calendar/model.dart",
34422-
"line": 351,
34423-
"col": 17,
34424-
"description": "Always override `hashCode` if overriding `==`."
34425-
}
34426-
]
34386+
"codeProblems": []
3442734387
},
3442834388
"lib/src/material_datepicker/calendar/month.dart": {
3442934389
"uri": "package:angular_components/src/material_datepicker/calendar/month.dart",
@@ -34887,33 +34847,13 @@
3488734847
"uri": "package:angular_components/src/utils/angular/scroll_host/pan_controller_impl.dart",
3488834848
"size": 7342,
3488934849
"isFormatted": true,
34890-
"codeProblems": [
34891-
{
34892-
"severity": "INFO",
34893-
"errorType": "LINT",
34894-
"errorCode": "hash_and_equals",
34895-
"file": "lib/src/utils/angular/scroll_host/pan_controller_impl.dart",
34896-
"line": 240,
34897-
"col": 17,
34898-
"description": "Always override `hashCode` if overriding `==`."
34899-
}
34900-
]
34850+
"codeProblems": []
3490134851
},
3490234852
"lib/src/utils/angular/scroll_host/position_sticky_controller.dart": {
3490334853
"uri": "package:angular_components/src/utils/angular/scroll_host/position_sticky_controller.dart",
3490434854
"size": 8531,
3490534855
"isFormatted": true,
34906-
"codeProblems": [
34907-
{
34908-
"severity": "INFO",
34909-
"errorType": "LINT",
34910-
"errorCode": "cancel_subscriptions",
34911-
"file": "lib/src/utils/angular/scroll_host/position_sticky_controller.dart",
34912-
"line": 241,
34913-
"col": 49,
34914-
"description": "Cancel instances of dart.async.StreamSubscription."
34915-
}
34916-
]
34856+
"codeProblems": []
3491734857
},
3491834858
"lib/src/utils/angular/scroll_host/scroll_host_base.dart": {
3491934859
"uri": "package:angular_components/src/utils/angular/scroll_host/scroll_host_base.dart",
@@ -34943,17 +34883,7 @@
3494334883
"uri": "package:angular_components/src/utils/angular/scroll_host/sticky_controller_impl.dart",
3494434884
"size": 19097,
3494534885
"isFormatted": true,
34946-
"codeProblems": [
34947-
{
34948-
"severity": "INFO",
34949-
"errorType": "LINT",
34950-
"errorCode": "hash_and_equals",
34951-
"file": "lib/src/utils/angular/scroll_host/sticky_controller_impl.dart",
34952-
"line": 376,
34953-
"col": 17,
34954-
"description": "Always override `hashCode` if overriding `==`."
34955-
}
34956-
]
34886+
"codeProblems": []
3495734887
},
3495834888
"lib/src/utils/async/async_update_scheduler.dart": {
3495934889
"uri": "package:angular_components/src/utils/async/async_update_scheduler.dart",
@@ -35001,17 +34931,7 @@
3500134931
"uri": "package:angular_components/src/utils/async/simple_stream.dart",
3500234932
"size": 13694,
3500334933
"isFormatted": true,
35004-
"codeProblems": [
35005-
{
35006-
"severity": "INFO",
35007-
"errorType": "LINT",
35008-
"errorCode": "cancel_subscriptions",
35009-
"file": "lib/src/utils/async/simple_stream.dart",
35010-
"line": 173,
35011-
"col": 11,
35012-
"description": "Cancel instances of dart.async.StreamSubscription."
35013-
}
35014-
]
34934+
"codeProblems": []
3501534935
},
3501634936
"lib/src/utils/async/throttle_stream.dart": {
3501734937
"uri": "package:angular_components/src/utils/async/throttle_stream.dart",
@@ -37774,26 +37694,7 @@
3777437694
"uri": "package:angular_components/utils/comparators/comparators.dart",
3777537695
"size": 1205,
3777637696
"isFormatted": true,
37777-
"codeProblems": [
37778-
{
37779-
"severity": "INFO",
37780-
"errorType": "LINT",
37781-
"errorCode": "hash_and_equals",
37782-
"file": "lib/utils/comparators/comparators.dart",
37783-
"line": 17,
37784-
"col": 17,
37785-
"description": "Always override `hashCode` if overriding `==`."
37786-
},
37787-
{
37788-
"severity": "INFO",
37789-
"errorType": "LINT",
37790-
"errorCode": "hash_and_equals",
37791-
"file": "lib/utils/comparators/comparators.dart",
37792-
"line": 33,
37793-
"col": 17,
37794-
"description": "Always override `hashCode` if overriding `==`."
37795-
}
37796-
],
37697+
"codeProblems": [],
3779737698
"directLibs": [],
3779837699
"transitiveLibs": [],
3779937700
"platform": {

0 commit comments

Comments
 (0)