diff --git a/lib/src/analyzers/lint_analyzer/anti_patterns/pattern_utils.dart b/lib/src/analyzers/lint_analyzer/anti_patterns/pattern_utils.dart index ada69cdd56..450634bf00 100644 --- a/lib/src/analyzers/lint_analyzer/anti_patterns/pattern_utils.dart +++ b/lib/src/analyzers/lint_analyzer/anti_patterns/pattern_utils.dart @@ -24,15 +24,11 @@ Issue createIssue({ /// Returns a url of a page containing documentation associated with [pattern] Uri documentation(Pattern pattern) => Uri( scheme: 'https', - host: 'github.com', + host: 'dartcodemetrics.dev', pathSegments: [ - 'dart-code-checker', - 'dart-code-metrics', - 'blob', - 'master', - 'doc', + 'docs', 'anti-patterns', - '${pattern.id}.md', + pattern.id, ], ); diff --git a/lib/src/analyzers/lint_analyzer/metrics/metric_utils.dart b/lib/src/analyzers/lint_analyzer/metrics/metric_utils.dart index 0dfdaeec7d..c5e898a1c1 100644 --- a/lib/src/analyzers/lint_analyzer/metrics/metric_utils.dart +++ b/lib/src/analyzers/lint_analyzer/metrics/metric_utils.dart @@ -3,15 +3,11 @@ import 'models/metric_value_level.dart'; /// Returns the url of a page containing documentation associated with [metricId] Uri documentation(String metricId) => Uri( scheme: 'https', - host: 'github.com', + host: 'dartcodemetrics.dev', pathSegments: [ - 'dart-code-checker', - 'dart-code-metrics', - 'blob', - 'master', - 'doc', + 'docs', 'metrics', - '$metricId.md', + metricId, ], ); diff --git a/lib/src/analyzers/lint_analyzer/rules/models/angular_rule.dart b/lib/src/analyzers/lint_analyzer/rules/models/angular_rule.dart new file mode 100644 index 0000000000..88807e15f0 --- /dev/null +++ b/lib/src/analyzers/lint_analyzer/rules/models/angular_rule.dart @@ -0,0 +1,19 @@ +import '../../models/severity.dart'; +import 'rule.dart'; +import 'rule_documentation.dart'; +import 'rule_type.dart'; + +abstract class AngularRule extends Rule { + const AngularRule({ + required String id, + required RuleDocumentation documentation, + required Severity severity, + required Iterable excludes, + }) : super( + id: id, + type: RuleType.angular, + documentation: documentation, + severity: severity, + excludes: excludes, + ); +} diff --git a/lib/src/analyzers/lint_analyzer/rules/models/common_rule.dart b/lib/src/analyzers/lint_analyzer/rules/models/common_rule.dart new file mode 100644 index 0000000000..7a17ac4edc --- /dev/null +++ b/lib/src/analyzers/lint_analyzer/rules/models/common_rule.dart @@ -0,0 +1,19 @@ +import '../../models/severity.dart'; +import 'rule.dart'; +import 'rule_documentation.dart'; +import 'rule_type.dart'; + +abstract class CommonRule extends Rule { + const CommonRule({ + required String id, + required RuleDocumentation documentation, + required Severity severity, + required Iterable excludes, + }) : super( + id: id, + type: RuleType.common, + documentation: documentation, + severity: severity, + excludes: excludes, + ); +} diff --git a/lib/src/analyzers/lint_analyzer/rules/models/flutter_rule.dart b/lib/src/analyzers/lint_analyzer/rules/models/flutter_rule.dart new file mode 100644 index 0000000000..7fdfaa95a9 --- /dev/null +++ b/lib/src/analyzers/lint_analyzer/rules/models/flutter_rule.dart @@ -0,0 +1,19 @@ +import '../../models/severity.dart'; +import 'rule.dart'; +import 'rule_documentation.dart'; +import 'rule_type.dart'; + +abstract class FlutterRule extends Rule { + const FlutterRule({ + required String id, + required RuleDocumentation documentation, + required Severity severity, + required Iterable excludes, + }) : super( + id: id, + type: RuleType.flutter, + documentation: documentation, + severity: severity, + excludes: excludes, + ); +} diff --git a/lib/src/analyzers/lint_analyzer/rules/models/intl_rule.dart b/lib/src/analyzers/lint_analyzer/rules/models/intl_rule.dart new file mode 100644 index 0000000000..1550185d32 --- /dev/null +++ b/lib/src/analyzers/lint_analyzer/rules/models/intl_rule.dart @@ -0,0 +1,19 @@ +import '../../models/severity.dart'; +import 'rule.dart'; +import 'rule_documentation.dart'; +import 'rule_type.dart'; + +abstract class IntlRule extends Rule { + const IntlRule({ + required String id, + required RuleDocumentation documentation, + required Severity severity, + required Iterable excludes, + }) : super( + id: id, + type: RuleType.intl, + documentation: documentation, + severity: severity, + excludes: excludes, + ); +} diff --git a/lib/src/analyzers/lint_analyzer/rules/models/rule.dart b/lib/src/analyzers/lint_analyzer/rules/models/rule.dart index 2b3f17e484..85e19f2c5b 100644 --- a/lib/src/analyzers/lint_analyzer/rules/models/rule.dart +++ b/lib/src/analyzers/lint_analyzer/rules/models/rule.dart @@ -2,6 +2,7 @@ import '../../models/internal_resolved_unit_result.dart'; import '../../models/issue.dart'; import '../../models/severity.dart'; import 'rule_documentation.dart'; +import 'rule_type.dart'; /// An interface to communicate with a rules /// @@ -10,6 +11,9 @@ abstract class Rule { /// The id of the rule. final String id; + /// The type of the rule. + final RuleType type; + /// The documentation associated with the rule final RuleDocumentation documentation; @@ -22,6 +26,7 @@ abstract class Rule { /// Initialize a newly created [Rule]. const Rule({ required this.id, + required this.type, required this.documentation, required this.severity, required this.excludes, diff --git a/lib/src/analyzers/lint_analyzer/rules/models/rule_type.dart b/lib/src/analyzers/lint_analyzer/rules/models/rule_type.dart new file mode 100644 index 0000000000..a6d3e8ca6f --- /dev/null +++ b/lib/src/analyzers/lint_analyzer/rules/models/rule_type.dart @@ -0,0 +1,11 @@ +/// Represents a rule type. Used by documentation path construction. +class RuleType { + final String value; + + const RuleType._(this.value); + + static const common = RuleType._('common'); + static const flutter = RuleType._('flutter'); + static const intl = RuleType._('intl'); + static const angular = RuleType._('angular'); +} diff --git a/lib/src/analyzers/lint_analyzer/rules/rule_utils.dart b/lib/src/analyzers/lint_analyzer/rules/rule_utils.dart index 37de78d55c..ccee9b862c 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rule_utils.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rule_utils.dart @@ -28,15 +28,12 @@ Issue createIssue({ /// Returns a url of a page containing documentation associated with [rule] Uri documentation(Rule rule) => Uri( scheme: 'https', - host: 'github.com', + host: 'dartcodemetrics.dev', pathSegments: [ - 'dart-code-checker', - 'dart-code-metrics', - 'blob', - 'master', - 'doc', + 'docs', 'rules', - '${rule.id}.md', + rule.type.value, + rule.id, ], ); diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/always_remove_listener/always_remove_listener.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/always_remove_listener/always_remove_listener.dart index f788b160dc..cf0507a91e 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/always_remove_listener/always_remove_listener.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/always_remove_listener/always_remove_listener.dart @@ -9,13 +9,13 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AlwaysRemoveListenerRule extends Rule { +class AlwaysRemoveListenerRule extends FlutterRule { static const String ruleId = 'always-remove-listener'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_late_keyword/avoid_late_keyword.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_late_keyword/avoid_late_keyword.dart index 10b198903e..ae39341a77 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_late_keyword/avoid_late_keyword.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_late_keyword/avoid_late_keyword.dart @@ -5,13 +5,13 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AvoidLateKeywordRule extends Rule { +class AvoidLateKeywordRule extends CommonRule { static const String ruleId = 'avoid-late-keyword'; static const _warning = "Avoid using 'late' keyword."; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_non_null_assertion/avoid_non_null_assertion.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_non_null_assertion/avoid_non_null_assertion.dart index 70ab9e31c1..985903ed59 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_non_null_assertion/avoid_non_null_assertion.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_non_null_assertion/avoid_non_null_assertion.dart @@ -6,13 +6,13 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AvoidNonNullAssertionRule extends Rule { +class AvoidNonNullAssertionRule extends CommonRule { static const String ruleId = 'avoid-non-null-assertion'; static const _warning = 'Avoid using non null assertion.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_preserve_whitespace_false/avoid_preserve_whitespace_false.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_preserve_whitespace_false/avoid_preserve_whitespace_false.dart index 185dcbb467..7ddb37ffbc 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_preserve_whitespace_false/avoid_preserve_whitespace_false.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_preserve_whitespace_false/avoid_preserve_whitespace_false.dart @@ -7,13 +7,13 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/angular_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AvoidPreserveWhitespaceFalseRule extends Rule { +class AvoidPreserveWhitespaceFalseRule extends AngularRule { static const String ruleId = 'avoid-preserve-whitespace-false'; static const _warning = 'Avoid using preserveWhitespace: false.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_returning_widgets/avoid_returning_widgets.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_returning_widgets/avoid_returning_widgets.dart index 23d7bbc0d4..6faed7991b 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_returning_widgets/avoid_returning_widgets.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_returning_widgets/avoid_returning_widgets.dart @@ -7,7 +7,7 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -15,7 +15,7 @@ part 'config_parser.dart'; part 'visit_declaration.dart'; part 'visitor.dart'; -class AvoidReturningWidgetsRule extends Rule { +class AvoidReturningWidgetsRule extends FlutterRule { static const String ruleId = 'avoid-returning-widgets'; static const _warningMessage = 'Avoid returning widgets from a function.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate.dart index daf597ec0f..aeddf340e5 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unnecessary_setstate/avoid_unnecessary_setstate.dart @@ -6,13 +6,13 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AvoidUnnecessarySetStateRule extends Rule { +class AvoidUnnecessarySetStateRule extends FlutterRule { static const String ruleId = 'avoid-unnecessary-setstate'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unused_parameters/avoid_unused_parameters.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unused_parameters/avoid_unused_parameters.dart index ff6f5a5ad2..e6ada2b0a9 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unused_parameters/avoid_unused_parameters.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_unused_parameters/avoid_unused_parameters.dart @@ -8,7 +8,7 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -16,7 +16,7 @@ part 'visitor.dart'; // Inspired by PVS-Studio (https://www.viva64.com/en/w/v6022/) -class AvoidUnusedParametersRule extends Rule { +class AvoidUnusedParametersRule extends CommonRule { static const String ruleId = 'avoid-unused-parameters'; static const _warningMessage = 'Parameter is unused.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_wrapping_in_padding/avoid_wrapping_in_padding.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_wrapping_in_padding/avoid_wrapping_in_padding.dart index 4b91f03c61..a10a4df055 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_wrapping_in_padding/avoid_wrapping_in_padding.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_wrapping_in_padding/avoid_wrapping_in_padding.dart @@ -8,13 +8,13 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class AvoidWrappingInPaddingRule extends Rule { +class AvoidWrappingInPaddingRule extends FlutterRule { static const String ruleId = 'avoid-wrapping-in-padding'; static const _warning = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/binary_expression_operand_order/binary_expression_operand_order.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/binary_expression_operand_order/binary_expression_operand_order.dart index ab2d5e710a..99c8f2e8f9 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/binary_expression_operand_order/binary_expression_operand_order.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/binary_expression_operand_order/binary_expression_operand_order.dart @@ -7,13 +7,13 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class BinaryExpressionOperandOrderRule extends Rule { +class BinaryExpressionOperandOrderRule extends CommonRule { static const String ruleId = 'binary-expression-operand-order'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/component_annotation_arguments_ordering/component_annotation_arguments_ordering.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/component_annotation_arguments_ordering/component_annotation_arguments_ordering.dart index e421dfeb76..7e8d68b93a 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/component_annotation_arguments_ordering/component_annotation_arguments_ordering.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/component_annotation_arguments_ordering/component_annotation_arguments_ordering.dart @@ -9,14 +9,14 @@ import '../../../../../utils/string_extension.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/angular_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'config_parser.dart'; part 'visitor.dart'; -class ComponentAnnotationArgumentsOrderingRule extends Rule { +class ComponentAnnotationArgumentsOrderingRule extends AngularRule { static const ruleId = 'component-annotation-arguments-ordering'; static const _warningMessage = 'should be before'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/double_literal_format/double_literal_format.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/double_literal_format/double_literal_format.dart index d93043aa7a..8322216c7f 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/double_literal_format/double_literal_format.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/double_literal_format/double_literal_format.dart @@ -6,7 +6,7 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -14,7 +14,7 @@ part 'visitor.dart'; // Inspired by TSLint (https://palantir.github.io/tslint/rules/number-literal-format/) -class DoubleLiteralFormatRule extends Rule { +class DoubleLiteralFormatRule extends CommonRule { static const String ruleId = 'double-literal-format'; static const _warningLeadingZero = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering/member_ordering.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering/member_ordering.dart index 67b894f2e3..b23005a6a6 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering/member_ordering.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering/member_ordering.dart @@ -8,7 +8,7 @@ import '../../../../../utils/string_extension.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -17,7 +17,7 @@ part 'visitor.dart'; // Inspired by TSLint (https://palantir.github.io/tslint/rules/member-ordering/) -class MemberOrderingRule extends Rule { +class MemberOrderingRule extends CommonRule { static const ruleId = 'member-ordering'; static const _warningMessage = 'should be before'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering_extended/member_ordering_extended.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering_extended/member_ordering_extended.dart index ceb74ea9a1..ed141dd079 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering_extended/member_ordering_extended.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/member_ordering_extended/member_ordering_extended.dart @@ -8,7 +8,7 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -20,7 +20,7 @@ part 'models/member_type.dart'; part 'models/modifier.dart'; part 'visitor.dart'; -class MemberOrderingExtendedRule extends Rule { +class MemberOrderingExtendedRule extends CommonRule { static const ruleId = 'member-ordering-extended'; static const _warningMessage = 'should be before'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/newline_before_return/newline_before_return.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/newline_before_return/newline_before_return.dart index 3491090ca6..2c515f0cbc 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/newline_before_return/newline_before_return.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/newline_before_return/newline_before_return.dart @@ -7,7 +7,7 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -15,7 +15,7 @@ part 'visitor.dart'; // Inspired by ESLint (https://eslint.org/docs/rules/newline-before-return) -class NewlineBeforeReturnRule extends Rule { +class NewlineBeforeReturnRule extends CommonRule { static const String ruleId = 'newline-before-return'; static const _warning = 'Missing blank line before return.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_boolean_literal_compare/no_boolean_literal_compare.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_boolean_literal_compare/no_boolean_literal_compare.dart index f992a7c5af..c9c7e454a8 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_boolean_literal_compare/no_boolean_literal_compare.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_boolean_literal_compare/no_boolean_literal_compare.dart @@ -9,7 +9,7 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -17,7 +17,7 @@ part 'visitor.dart'; // Inspired by TSLint (https://palantir.github.io/tslint/rules/no-boolean-literal-compare/) -class NoBooleanLiteralCompareRule extends Rule { +class NoBooleanLiteralCompareRule extends CommonRule { static const String ruleId = 'no-boolean-literal-compare'; static const _warning = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_empty_block/no_empty_block.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_empty_block/no_empty_block.dart index c1cde245c0..243ea0a38c 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_empty_block/no_empty_block.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_empty_block/no_empty_block.dart @@ -5,7 +5,7 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -13,7 +13,7 @@ part 'visitor.dart'; // Inspired by TSLint (https://palantir.github.io/tslint/rules/no-empty/) -class NoEmptyBlockRule extends Rule { +class NoEmptyBlockRule extends CommonRule { static const String ruleId = 'no-empty-block'; static const _warning = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_arguments/no_equal_arguments.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_arguments/no_equal_arguments.dart index 054ff73218..ac5739b3f0 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_arguments/no_equal_arguments.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_arguments/no_equal_arguments.dart @@ -5,14 +5,14 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'config_parser.dart'; part 'visitor.dart'; -class NoEqualArgumentsRule extends Rule { +class NoEqualArgumentsRule extends CommonRule { static const String ruleId = 'no-equal-arguments'; static const _warningMessage = 'The argument has already been passed.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_then_else/no_equal_then_else.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_then_else/no_equal_then_else.dart index ffb6e97051..80b6c2159e 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_then_else/no_equal_then_else.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_equal_then_else/no_equal_then_else.dart @@ -5,7 +5,7 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -13,7 +13,7 @@ part 'visitor.dart'; // Inspired by PVS-Studio (https://www.viva64.com/en/w/v6004/) -class NoEqualThenElseRule extends Rule { +class NoEqualThenElseRule extends CommonRule { static const String ruleId = 'no-equal-then-else'; static const _warningMessage = 'Then and else branches are equal.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number.dart index e5615d9e1a..e8cb9ef568 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number.dart @@ -5,14 +5,14 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'config_parser.dart'; part 'visitor.dart'; -class NoMagicNumberRule extends Rule { +class NoMagicNumberRule extends CommonRule { static const String ruleId = 'no-magic-number'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_object_declaration/no_object_declaration.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_object_declaration/no_object_declaration.dart index 9ebf505ea7..d2f44490fd 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_object_declaration/no_object_declaration.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_object_declaration/no_object_declaration.dart @@ -5,13 +5,13 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class NoObjectDeclarationRule extends Rule { +class NoObjectDeclarationRule extends CommonRule { static const String ruleId = 'no-object-declaration'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_conditional_expressions/prefer_conditional_expressions.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_conditional_expressions/prefer_conditional_expressions.dart index d1776d4932..88afc5caf3 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_conditional_expressions/prefer_conditional_expressions.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_conditional_expressions/prefer_conditional_expressions.dart @@ -7,7 +7,7 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/common_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; @@ -15,7 +15,7 @@ part 'visitor.dart'; // Inspired by TSLint (https://palantir.github.io/tslint/rules/prefer-conditional-expression/) -class PreferConditionalExpressionsRule extends Rule { +class PreferConditionalExpressionsRule extends CommonRule { static const String ruleId = 'prefer-conditional-expressions'; static const _warningMessage = 'Prefer conditional expression'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_extracting_callbacks/prefer_extracting_callbacks.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_extracting_callbacks/prefer_extracting_callbacks.dart index df42f919c1..f775bddacf 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_extracting_callbacks/prefer_extracting_callbacks.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_extracting_callbacks/prefer_extracting_callbacks.dart @@ -6,14 +6,14 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; -part 'visitor.dart'; part 'config_parser.dart'; +part 'visitor.dart'; -class PreferExtractingCallbacksRule extends Rule { +class PreferExtractingCallbacksRule extends FlutterRule { static const String ruleId = 'prefer-extracting-callbacks'; static const _warningMessage = diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_intl_name/prefer_intl_name.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_intl_name/prefer_intl_name.dart index 135c12b10c..8815709846 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_intl_name/prefer_intl_name.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_intl_name/prefer_intl_name.dart @@ -9,13 +9,13 @@ import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; import '../../base_visitors/intl_base_visitor.dart'; -import '../../models/rule.dart'; +import '../../models/intl_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class PreferIntlNameRule extends Rule { +class PreferIntlNameRule extends IntlRule { static const String ruleId = 'prefer-intl-name'; static const _intlPackageUrl = 'package:intl/intl.dart'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_on_push_cd_strategy/prefer_on_push_cd_strategy.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_on_push_cd_strategy/prefer_on_push_cd_strategy.dart index cae1347d43..62d5c327ca 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_on_push_cd_strategy/prefer_on_push_cd_strategy.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_on_push_cd_strategy/prefer_on_push_cd_strategy.dart @@ -7,13 +7,13 @@ import '../../../../../utils/node_utils.dart'; import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/angular_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class PreferOnPushCdStrategyRule extends Rule { +class PreferOnPushCdStrategyRule extends AngularRule { static const String ruleId = 'prefer-on-push-cd-strategy'; static const _failure = 'Prefer using onPush change detection strategy.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_single_widget_per_file/prefer_single_widget_per_file.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_single_widget_per_file/prefer_single_widget_per_file.dart index ebc09b378a..11bdce9bc2 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_single_widget_per_file/prefer_single_widget_per_file.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_single_widget_per_file/prefer_single_widget_per_file.dart @@ -6,14 +6,14 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../flutter_rule_utils.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'config_parser.dart'; part 'visitor.dart'; -class PreferSingleWidgetPerFileRule extends Rule { +class PreferSingleWidgetPerFileRule extends FlutterRule { static const String ruleId = 'prefer-single-widget-per-file'; static const _warningMessage = 'Only a single widget per file is allowed.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_trailing_comma/prefer_trailing_comma.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_trailing_comma/prefer_trailing_comma.dart index 8bb8fff9e6..c59793ae05 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_trailing_comma/prefer_trailing_comma.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_trailing_comma/prefer_trailing_comma.dart @@ -9,14 +9,14 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/replacement.dart'; import '../../../models/severity.dart'; -import '../../models/rule.dart'; +import '../../models/flutter_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'config_parser.dart'; part 'visitor.dart'; -class PreferTrailingCommaRule extends Rule { +class PreferTrailingCommaRule extends FlutterRule { static const String ruleId = 'prefer-trailing-comma'; static const _warningMessage = 'Prefer trailing comma.'; diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/provide_correct_intl_args/provide_correct_intl_args.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/provide_correct_intl_args/provide_correct_intl_args.dart index d9c4866ffa..f6458bbe86 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/provide_correct_intl_args/provide_correct_intl_args.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/provide_correct_intl_args/provide_correct_intl_args.dart @@ -8,13 +8,13 @@ import '../../../models/internal_resolved_unit_result.dart'; import '../../../models/issue.dart'; import '../../../models/severity.dart'; import '../../base_visitors/intl_base_visitor.dart'; -import '../../models/rule.dart'; +import '../../models/intl_rule.dart'; import '../../models/rule_documentation.dart'; import '../../rule_utils.dart'; part 'visitor.dart'; -class ProvideCorrectIntlArgsRule extends Rule { +class ProvideCorrectIntlArgsRule extends IntlRule { static const String ruleId = 'provide-correct-intl-args'; static const _intlPackageUrl = 'package:intl/intl.dart'; diff --git a/test/analyzers/lint_analyzer/anti_patterns/pattern_utils_test.dart b/test/analyzers/lint_analyzer/anti_patterns/pattern_utils_test.dart index 3d2ea5a1ee..9104fba598 100644 --- a/test/analyzers/lint_analyzer/anti_patterns/pattern_utils_test.dart +++ b/test/analyzers/lint_analyzer/anti_patterns/pattern_utils_test.dart @@ -18,7 +18,7 @@ void main() { () { const id = 'pattern-id'; final documentationUrl = Uri.parse( - 'https://github.com/dart-code-checker/dart-code-metrics/blob/master/doc/anti-patterns/pattern-id.md', + 'https://dartcodemetrics.dev/docs/anti-patterns/pattern-id', ); const severity = Severity.none; @@ -65,12 +65,12 @@ void main() { expect( documentation(pattern1).toString(), equals( - 'https://github.com/dart-code-checker/dart-code-metrics/blob/master/doc/anti-patterns/$patternId1.md', + 'https://dartcodemetrics.dev/docs/anti-patterns/$patternId1', ), ); expect( documentation(pattern2).pathSegments.last, - equals('$patternId2.md'), + equals(patternId2), ); }); diff --git a/test/analyzers/lint_analyzer/metrics/metric_utils_test.dart b/test/analyzers/lint_analyzer/metrics/metric_utils_test.dart index 5888bee65b..32b13877db 100644 --- a/test/analyzers/lint_analyzer/metrics/metric_utils_test.dart +++ b/test/analyzers/lint_analyzer/metrics/metric_utils_test.dart @@ -14,12 +14,12 @@ void main() { expect( documentation(metricId1).toString(), equals( - 'https://github.com/dart-code-checker/dart-code-metrics/blob/master/doc/metrics/metric-id-1.md', + 'https://dartcodemetrics.dev/docs/metrics/metric-id-1', ), ); expect( documentation(metricId2).pathSegments.last, - equals('$metricId2.md'), + equals(metricId2), ); }); diff --git a/test/analyzers/lint_analyzer/rules/rule_utils_test.dart b/test/analyzers/lint_analyzer/rules/rule_utils_test.dart index 703528c734..879c984933 100644 --- a/test/analyzers/lint_analyzer/rules/rule_utils_test.dart +++ b/test/analyzers/lint_analyzer/rules/rule_utils_test.dart @@ -2,6 +2,7 @@ import 'package:dart_code_metrics/src/analyzers/lint_analyzer/models/replacement.dart'; import 'package:dart_code_metrics/src/analyzers/lint_analyzer/models/severity.dart'; import 'package:dart_code_metrics/src/analyzers/lint_analyzer/rules/models/rule.dart'; +import 'package:dart_code_metrics/src/analyzers/lint_analyzer/rules/models/rule_type.dart'; import 'package:dart_code_metrics/src/analyzers/lint_analyzer/rules/rule_utils.dart'; import 'package:mocktail/mocktail.dart'; import 'package:source_span/source_span.dart'; @@ -16,7 +17,7 @@ void main() { () { const id = 'rule-id'; final documentationUrl = Uri.parse( - 'https://github.com/dart-code-checker/dart-code-metrics/blob/master/doc/rules/rule-id.md', + 'https://dartcodemetrics.dev/docs/rules/flutter/rule-id', ); const severity = Severity.none; @@ -37,6 +38,7 @@ void main() { final rule = RuleMock(); when(() => rule.id).thenReturn(id); when(() => rule.severity).thenReturn(severity); + when(() => rule.type).thenReturn(RuleType.flutter); final issue = createIssue( rule: rule, @@ -62,20 +64,22 @@ void main() { final rule1 = RuleMock(); when(() => rule1.id).thenReturn(ruleId1); + when(() => rule1.type).thenReturn(RuleType.flutter); final rule2 = RuleMock(); when(() => rule2.id).thenReturn(ruleId2); + when(() => rule2.type).thenReturn(RuleType.angular); expect( documentation(rule1).toString(), equals( - 'https://github.com/dart-code-checker/dart-code-metrics/blob/master/doc/rules/$ruleId1.md', + 'https://dartcodemetrics.dev/docs/rules/flutter/$ruleId1', ), ); - expect( - documentation(rule2).pathSegments.last, - equals('$ruleId2.md'), - ); + + final doc2 = [...documentation(rule2).pathSegments]; + expect(doc2.removeLast(), equals(ruleId2)); + expect(doc2.removeLast(), equals(RuleType.angular.value)); }); test('readSeverity returns a Severity from Map based config', () {