Skip to content
This repository was archived by the owner on Jul 16, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/src/analyzer_plugin/analyzer_plugin.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'dart:async';

import 'package:analyzer/dart/analysis/context_builder.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/type.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import '../../../../utils/node_utils.dart';
import '../../lint_utils.dart';
import '../../metrics/metric_utils.dart';
Expand Down
7 changes: 7 additions & 0 deletions lib/src/analyzers/lint_analyzer/lint_analyzer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ import 'models/suppression.dart';
import 'reporters/reporter_factory.dart';
import 'utils/report_utils.dart';

/// The analyzer responsible for collecting lint reports.
class LintAnalyzer {
const LintAnalyzer();

/// Returns a reporter for the given [name]. Use the reporter
/// to convert analysis reports to console, JSON or other supported format.
Reporter? getReporter({
required String name,
required IOSink output,
Expand All @@ -43,6 +46,8 @@ class LintAnalyzer {
reportFolder: reportFolder,
);

/// Returns a lint report for analyzing given [result].
/// The analysis is configured with the [config].
LintFileReport? runPluginAnalysis(
ResolvedUnitResult result,
LintAnalysisConfig config,
Expand All @@ -60,6 +65,8 @@ class LintAnalyzer {
return null;
}

/// Returns a list of lint reports for analyzing all files in the given [folders].
/// The analysis is configured with the [config].
Future<Iterable<LintFileReport>> runCliAnalysis(
Iterable<String> folders,
String rootFolder,
Expand Down
6 changes: 6 additions & 0 deletions lib/src/analyzers/lint_analyzer/lint_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class LintConfig {
required this.antiPatterns,
});

/// Creates the config from analysis [options].
factory LintConfig.fromAnalysisOptions(AnalysisOptions options) {
const _rootKey = 'dart_code_metrics';

Expand All @@ -39,6 +40,7 @@ class LintConfig {
);
}

/// Creates the config from cli [arguments].
factory LintConfig.fromArgs(ParsedArguments arguments) => LintConfig(
excludePatterns: [arguments.excludePath],
excludeForMetricsPatterns: const [],
Expand All @@ -52,6 +54,10 @@ class LintConfig {
antiPatterns: const {},
);

/// Merges two configs into a single one
///
/// Config coming from [overrides] has a higher priority
/// and overrides conflicting entries.
LintConfig merge(LintConfig overrides) => LintConfig(
excludePatterns: {...excludePatterns, ...overrides.excludePatterns},
excludeForMetricsPatterns: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
2 changes: 2 additions & 0 deletions lib/src/analyzers/lint_analyzer/metrics/scope_visitor.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/source/line_info.dart';

/// Represents a resolved unit from an AST analysis.
class InternalResolvedUnitResult {
final String path;
final String content;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:meta/meta.dart';

import 'summary_lint_report_record_status.dart';

/// Represents a summary for a lint report.
@immutable
class SummaryLintReportRecord<T> {
final SummaryLintReportRecordStatus status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import 'models/code_climate_issue_category.dart';
import 'models/code_climate_issue_location.dart';
import 'models/code_climate_issue_severity.dart';

/// Lint Code Climate reporter.
///
/// Use it to create reports in Code Climate format.
class LintCodeClimateReporter
extends CodeClimateReporter<LintFileReport, SummaryLintReportRecord> {
LintCodeClimateReporter(IOSink output, {bool gitlabCompatible = false})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'code_climate_issue_category.dart';
import 'code_climate_issue_location.dart';
import 'code_climate_issue_severity.dart';

/// Represents a Code Climate issue.
@immutable
class CodeClimateIssue {
static const String type = 'issue';
Expand All @@ -24,6 +25,7 @@ class CodeClimateIssue {
required this.fingerprint,
});

/// Converts the issue to JSON format.
Map<String, Object> toJson() => {
'type': type,
'check_name': checkName,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/// Represents a Code Climate issue category.
class CodeClimateIssueCategory {
static const bugRisk = CodeClimateIssueCategory._('Bug Risk');
static const clarity = CodeClimateIssueCategory._('Clarity');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import 'package:meta/meta.dart';
import 'package:source_span/source_span.dart';

/// Represents a Code Climate issue location.
@immutable
class CodeClimateIssueLocation {
final String path;
final SourceSpan location;

const CodeClimateIssueLocation(this.path, this.location);

/// Converts the location to JSON format.
Map<String, Object> toJson() => {
'path': path,
'positions': {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/// Represents a Code Climate issue severity.
class CodeClimateIssueSeverity {
static const blocker = CodeClimateIssueSeverity._('blocker');
static const critical = CodeClimateIssueSeverity._('critical');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import '../../../models/report.dart';
import '../../../models/summary_lint_report_record.dart';
import 'lint_console_reporter_helper.dart';

/// Lint console reporter.
///
/// Use it to create reports in console format.
class LintConsoleReporter
extends ConsoleReporter<LintFileReport, SummaryLintReportRecord> {
/// If true will report info about all files even if they're not above warning threshold
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import '../../../metrics/models/metric_value_level.dart';
import '../../../models/issue.dart';
import '../../../models/severity.dart';

/// Helper for building lint console reports
class LintConsoleReporterHelper {
static final _colorPens = {
MetricValueLevel.alarm: AnsiPen()..red(bold: true),
Expand All @@ -22,6 +23,7 @@ class LintConsoleReporterHelper {
Severity.none: AnsiPen()..white(),
};

/// Converts an [issue] to the issue message string.
String getIssueMessage(Issue issue) {
final severity = _getSeverity(issue.severity);
final location =
Expand All @@ -30,6 +32,7 @@ class LintConsoleReporterHelper {
return '$severity${[issue.message, location, issue.ruleId].join(' : ')}';
}

/// Creates a message for [violations] based on given [violationLevel].
String getMetricMessage(
MetricValueLevel violationLevel,
String source,
Expand All @@ -49,6 +52,7 @@ class LintConsoleReporterHelper {
throw StateError('Unexpected violation level.');
}

/// Converts a [metric] to the metric message string.
String getMetricReport(MetricValue<num> metric) {
final color = _colorPens[metric.level];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ import '../../../models/summary_lint_report_record.dart';
const _deprecationMessage =
'DEPRECATED! This reporter is deprecated and will be removed in 5.0.0. You can migrate on our GitHub Action.';

/// Lint GitHub reporter.
///
/// Use it to create reports in GitHub format.
///
/// **Note:** this reporter is deprecated and should not be used.
/// Consider using Dart Code Metrics GitHub Action instead.
class LintGitHubReporter
extends GitHubReporter<LintFileReport, SummaryLintReportRecord> {
const LintGitHubReporter(IOSink output) : super(output);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const _maximumNestingWithViolations = '$_maximumNesting / violations';
const _codeIssues = 'Issues';
const _designIssues = 'Design issues';

/// A table record used by [LintHtmlReporter]
@immutable
class ReportTableRecord {
final String title;
Expand All @@ -61,6 +62,9 @@ class ReportTableRecord {
});
}

/// Lint HTML reporter.
///
/// Use it to create reports in HTML format.
class LintHtmlReporter
extends HtmlReporter<LintFileReport, SummaryLintReportRecord> {
LintHtmlReporter(String reportFolder) : super(reportFolder);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:meta/meta.dart';

@immutable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:meta/meta.dart';

import '../../../../metrics/models/metric_value.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import '../../../models/replacement.dart';
import '../../../models/report.dart';
import '../../../models/summary_lint_report_record.dart';

/// Lint JSON reporter.
///
/// Use it to create reports in JSON format.
@immutable
class LintJsonReporter
extends JsonReporter<LintFileReport, SummaryLintReportRecord> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:collection/collection.dart';
Expand Down
2 changes: 2 additions & 0 deletions lib/src/analyzers/lint_analyzer/rules/dart_rule_utils.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/element/type.dart';

bool isIterableOrSubclass(DartType? type) =>
Expand Down
2 changes: 2 additions & 0 deletions lib/src/analyzers/lint_analyzer/rules/flutter_rule_utils.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/element/type.dart';
import 'package:collection/collection.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'rule.dart';
import 'rule_documentation.dart';
import 'rule_type.dart';

/// Represents a base class for angular-specific rules.
abstract class AngularRule extends Rule {
const AngularRule({
required String id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'rule.dart';
import 'rule_documentation.dart';
import 'rule_type.dart';

/// Represents a base class for common rules.
abstract class CommonRule extends Rule {
const CommonRule({
required String id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'rule.dart';
import 'rule_documentation.dart';
import 'rule_type.dart';

/// Represents a base class for Flutter-specific rules.
abstract class FlutterRule extends Rule {
const FlutterRule({
required String id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'rule.dart';
import 'rule_documentation.dart';
import 'rule_type.dart';

/// Represents a base class for intl-specific rules.
abstract class IntlRule extends Rule {
const IntlRule({
required String id,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs

import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:collection/collection.dart';
Expand Down
Loading