Upgrading dart_code_metrics 3 to 4
Breaking3.3.6 → 4.21.3Breaking1Deprecated2New71Changed28Fixed64Other63
BreakingUpgrade verdict
1 breaking change.
In plain terms
- The old Lines of Executable Code metric is gone, so switch to Source lines of Code.
- The documentation hosted in the GitHub repository is deprecated.
- The GitHub reporter is deprecated and should be avoided in new setups.
Must act 3 items need code or config changes
Dart SDK requirement changed in 4.20.0: >=2.12.0 <3.0.0 → >=2.18.0 <3.0.0.
What you must change
Breaking1
Removes the deprecated Lines of Executable Code metric; use Source lines of Code instead.
Lines of Executable CodeSource lines of CodeDeprecations to plan for
Deprecated2
Deprecates documentation in the GitHub repo.
Deprecates the GitHub reporter.
GitHub reporterAPI changes
Generated by DepDelta from published Dart source. Not mixed with prose notes.
- removed:
variable analysisOptionsFileName: const String - changed:
ctor AnalysisOptions(this.options) → ctor AnalysisOptions(this._path, this.options) - changed:
function analysisOptionsFromFile(File? options): Future<AnalysisOptions> → function analysisOptionsFromFile( File? options, AnalysisContext context, ): AnalysisOptions - changed:
method AnalysisOptions.readIterableOfString(Iterable<String> pathSegments): Iterable<String> → method AnalysisOptions.readIterableOfString( Iterable<String> pathSegments, { bool packageRelated = …, }): Iterable<String> - changed:
method AnalysisOptions.readMap(Iterable<String> pathSegments): Map<String, Object> → method AnalysisOptions.readMap( Iterable<String> pathSegments, { bool packageRelated = …, }): Map<String, Object> - changed:
method AnalysisOptions.readMapOfMap(Iterable<String> pathSegments): Map<String, Map<String, Object>> → method AnalysisOptions.readMapOfMap( Iterable<String> pathSegments, { bool packageRelated = …, }): Map<String, Map<String, Object>> - added:
class ConfigBuilder - added:
function analysisOptionsFromContext( AnalysisContext context, ): AnalysisOptions? - added:
function analysisOptionsFromFilePath( String path, AnalysisContext context, ): AnalysisOptions - added:
get AnalysisOptions.folderPath: String? - added:
static method ConfigBuilder.getLintAnalysisConfig( LintConfig config, String excludesRootFolder, { Iterable<Metric>? classMetrics, Iterable<Metric>? fileMetrics, Iterable<Metric>? functionMetrics, }): LintAnalysisConfig - added:
static method ConfigBuilder.getLintConfigFromArgs(ParsedArguments arguments): LintConfig - added:
static method ConfigBuilder.getLintConfigFromOptions(AnalysisOptions options): LintConfig - added:
static method ConfigBuilder.getUnnecessaryNullableConfig( UnnecessaryNullableConfig config, String rootPath, ): UnnecessaryNullableAnalysisConfig - added:
static method ConfigBuilder.getUnnecessaryNullableConfigFromArgs( Iterable<String> excludePatterns, { required bool isMonorepo, }): UnnecessaryNullableConfig - added:
static method ConfigBuilder.getUnnecessaryNullableConfigFromOption( AnalysisOptions options, ): UnnecessaryNullableConfig - added:
static method ConfigBuilder.getUnusedCodeConfig( UnusedCodeConfig config, String rootPath, ): UnusedCodeAnalysisConfig - added:
static method ConfigBuilder.getUnusedCodeConfigFromArgs( Iterable<String> excludePatterns, { required bool isMonorepo, }): UnusedCodeConfig - added:
static method ConfigBuilder.getUnusedCodeConfigFromOption( AnalysisOptions options, ): UnusedCodeConfig - added:
static method ConfigBuilder.getUnusedFilesConfig( UnusedFilesConfig config, String rootPath, ): UnusedFilesAnalysisConfig - added:
static method ConfigBuilder.getUnusedFilesConfigFromArgs( Iterable<String> excludePatterns, { required bool isMonorepo, }): UnusedFilesConfig - added:
static method ConfigBuilder.getUnusedFilesConfigFromOption( AnalysisOptions options, ): UnusedFilesConfig - added:
static method ConfigBuilder.getUnusedL10nConfig( UnusedL10nConfig config, String rootPath, ): UnusedL10nAnalysisConfig - added:
static method ConfigBuilder.getUnusedL10nConfigFromArgs( Iterable<String> excludePatterns, String classPattern, ): UnusedL10nConfig - added:
static method ConfigBuilder.getUnusedL10nConfigFromOption( AnalysisOptions options, ): UnusedL10nConfig
- added:
class Issue - added:
class LintAnalyzer - added:
class LintConfig - added:
class LintFileReport implements FileReport - added:
class MetricValueLevel implements Comparable<MetricValueLevel> - added:
class Replacement - added:
class Severity - added:
class SummaryLintReportRecord<T extends Object> - added:
class SummaryLintReportRecordStatus - added:
ctor Issue({ required this.ruleId, required this.documentation, required this.location, required this.severity, required this.message, this.verboseMessage, this.suggestion, }) - added:
ctor LintAnalyzer([this._logger]) - added:
ctor LintConfig({ required this.excludePatterns, required this.excludeForMetricsPatterns, required this.metrics, required this.rules, required this.excludeForRulesPatterns, required this.antiPatterns, }) - added:
ctor LintConfig.fromAnalysisOptions(AnalysisOptions options) - added:
ctor LintConfig.fromArgs(ParsedArguments arguments) - added:
ctor LintFileReport({ required this.path, required this.relativePath, required this.file, required this.classes, required this.functions, required this.issues, required this.antiPatternCases, }) - added:
ctor LintFileReport.onlyIssues({ required this.path, required this.relativePath, required this.file, required this.issues, }) - added:
ctor Replacement({ required this.comment, required this.replacement, }) - added:
ctor SummaryLintReportRecord({ this.status = …, required this.title, required this.value, this.violations = …, }) - added:
field Issue.documentation: final Uri - added:
field Issue.location: final SourceSpan - added:
field Issue.message: final String - added:
field Issue.ruleId: final String - added:
field Issue.severity: final Severity - added:
field Issue.suggestion: final Replacement? - added:
field Issue.verboseMessage: final String? - added:
field LintConfig.antiPatterns: final Map<String, Map<String, Object>> - added:
field LintConfig.excludeForMetricsPatterns: final Iterable<String> - added:
field LintConfig.excludeForRulesPatterns: final Iterable<String> - added:
field LintConfig.excludePatterns: final Iterable<String> - added:
field LintConfig.metrics: final Map<String, Object> - added:
field LintConfig.rules: final Map<String, Map<String, Object>> - added:
field LintFileReport.antiPatternCases - added:
field LintFileReport.antiPatternCases: final Iterable<Issue> - added:
field LintFileReport.classes: final Map<String, Report> - added:
field LintFileReport.file: final Report - added:
field LintFileReport.functions - added:
field LintFileReport.functions: final Map<String, Report> - added:
field LintFileReport.issues: final Iterable<Issue> - added:
field LintFileReport.path: final String - added:
field LintFileReport.relativePath: final String - added:
field Replacement.comment: final String - added:
field Replacement.replacement: final String - added:
field SummaryLintReportRecord.status: final SummaryLintReportRecordStatus - added:
field SummaryLintReportRecord.title: final String - added:
field SummaryLintReportRecord.value: final T - added:
field SummaryLintReportRecord.violations: final int - added:
function averageCYCLO(Iterable<LintFileReport> records): double - added:
function averageSLOC(Iterable<LintFileReport> records): int - added:
function hasIssueWithSeverity( Iterable<LintFileReport> records, Severity severity, ): bool - added:
function maxMetricViolationLevel(Iterable<LintFileReport> records): MetricValueLevel - added:
function metricViolations(Iterable<LintFileReport> records, String metricId): int - added:
function scannedFolders(Iterable<LintFileReport> records): Iterable<String> - added:
function totalClasses(Iterable<LintFileReport> records): int - added:
function totalFiles(Iterable<LintFileReport> records): int - added:
function totalSLOC(Iterable<LintFileReport> records): int - added:
function totalTechDebt(Iterable<LintFileReport> records): String - added:
method LintAnalyzer.getReporter({ required String name, required IOSink output, required String reportFolder, @Deprecated('Unused argument. Will be removed in 5.0.0.') LintConfig? config, }): Reporter<FileReport, Object, LintReportParams>? - added:
method LintAnalyzer.getSummary( Iterable<LintFileReport> records, ): Iterable<SummaryLintReportRecord<Object>> - added:
method LintAnalyzer.runCliAnalysis( Iterable<String> folders, String rootFolder, LintConfig config, { String? sdkPath, }): Future<Iterable<LintFileReport>> - added:
method LintAnalyzer.runPluginAnalysis( ResolvedUnitResult result, LintAnalysisConfig config, String rootFolder, ): LintFileReport? - added:
method LintConfig.merge(LintConfig overrides): LintConfig - added:
method MetricValueLevel.compareTo(MetricValueLevel other): int - added:
method MetricValueLevel.operator <(MetricValueLevel other): bool - added:
method MetricValueLevel.operator <=(MetricValueLevel other): bool - added:
method MetricValueLevel.operator >(MetricValueLevel other): bool - added:
method MetricValueLevel.operator >=(MetricValueLevel other): bool - added:
method MetricValueLevel.toString(): String - added:
method Severity.toString(): String - added:
method SummaryLintReportRecordStatus.toString(): String - added:
static field MetricValueLevel.alarm: const - added:
static field MetricValueLevel.none: const - added:
static field MetricValueLevel.noted: const - added:
static field MetricValueLevel.values: const - added:
static field MetricValueLevel.warning: const - added:
static field Severity.error: const - added:
static field Severity.none: const - added:
static field Severity.performance: const - added:
static field Severity.style: const - added:
static field Severity.values: const - added:
static field Severity.warning: const - added:
static field SummaryLintReportRecordStatus.error: const - added:
static field SummaryLintReportRecordStatus.none: const - added:
static field SummaryLintReportRecordStatus.ok: const - added:
static field SummaryLintReportRecordStatus.values: const - added:
static field SummaryLintReportRecordStatus.warning: const - added:
static method MetricValueLevel.fromString(String? level): MetricValueLevel? - added:
static method Severity.fromString(String? severity): Severity?
- removed:
class MetricValueLevel implements Comparable<MetricValueLevel> - removed:
function metrics({ required Map<String, Object> config, EntityType? measuredType, }): Iterable<Metric> - removed:
method MetricValueLevel.compareTo(MetricValueLevel other): int - removed:
method MetricValueLevel.operator <(MetricValueLevel other): bool - removed:
method MetricValueLevel.operator <=(MetricValueLevel other): bool - removed:
method MetricValueLevel.operator >(MetricValueLevel other): bool - removed:
method MetricValueLevel.operator >=(MetricValueLevel other): bool - removed:
method MetricValueLevel.toString(): String - removed:
static field MetricValueLevel.alarm: const - removed:
static field MetricValueLevel.none: const - removed:
static field MetricValueLevel.noted: const - removed:
static field MetricValueLevel.values: const - removed:
static field MetricValueLevel.warning: const - removed:
static method MetricValueLevel.fromString(String? level): MetricValueLevel? - removed:
variable Object>)>: final
- removed:
class Config - removed:
class MetricsAnalysisRunner - removed:
class MetricsAnalyzer - removed:
class MetricsRecordsBuilder: abstract extends ReportsBuilder - removed:
class MetricsRecordsStore: abstract - removed:
ctor Config({ required this.excludePatterns, required this.excludeForMetricsPatterns, required this.metrics, required this.rules, required this.antiPatterns, }) - removed:
ctor Config.fromAnalysisOptions(AnalysisOptions options) - removed:
ctor MetricsAnalysisRunner( this._analyzer, this._store, this._folders, this._rootFolder, ) - removed:
ctor MetricsAnalyzer(this._store, Config config) - removed:
ctor MetricsRecordsStore.store() - removed:
field Config.antiPatterns: final Map<String, Map<String, Object>> - removed:
field Config.excludeForMetricsPatterns: final Iterable<String> - removed:
field Config.excludePatterns: final Iterable<String> - removed:
field Config.metrics: final Map<String, Object> - removed:
field Config.rules: final Map<String, Map<String, Object>> - removed:
method Config.merge(Config overrides): Config - removed:
method MetricsAnalysisRunner.results(): Iterable<FileReport> - removed:
method MetricsAnalysisRunner.run(): Future<void> - removed:
method MetricsAnalyzer.runAnalysis(Iterable<String> folders, String rootFolder): Future<void> - removed:
method MetricsRecordsBuilder.recordFunctionData(ScopedFunctionDeclaration declaration, Report record): void - removed:
method MetricsRecordsStore.recordFile( String filePath, String rootDirectory, void Function(MetricsRecordsBuilder) f, ): MetricsRecordsStore - removed:
method MetricsRecordsStore.records(): Iterable<FileReport> - removed:
variable linesOfExecutableCodeDefaultWarningLevel: const - removed:
variable linesOfExecutableCodeKey: const
- removed:
class ConsoleReporter implements Reporter - removed:
ctor ConsoleReporter(this._output, {this.reportAll = …}) - removed:
field ConsoleReporter.')}' - removed:
field ConsoleReporter.reportAll: final bool - removed:
function reporter({ required String name, required IOSink output, required Config config, required String reportFolder, }): Reporter? - removed:
method ConsoleReporter.report(Iterable<FileReport> records): Future<void> - removed:
variable reportFolder)>: final - added:
class FileReport: abstract - added:
class Reporter<T extends FileReport, S, Params>: abstract - added:
ctor FileReport({ required this.path, required this.relativePath, }) - added:
ctor Reporter() - added:
field FileReport.path: final String - added:
field FileReport.relativePath: final String - added:
method Reporter.report( Iterable<T> records, { Iterable<S> summary = …, Params? additionalParams, }): Future<void>
- added:
class UnusedCodeAnalyzer - added:
class UnusedCodeConfig - added:
class UnusedCodeConsoleReporter extends ConsoleReporter<UnusedCodeFileReport, void, UnusedCodeReportParams> - added:
class UnusedCodeFileReport implements FileReport - added:
class UnusedCodeIssue - added:
class UnusedCodeJsonReporter extends JsonReporter<UnusedCodeFileReport, void, UnusedCodeReportParams> - added:
ctor UnusedCodeAnalyzer([this._logger]) - added:
ctor UnusedCodeConfig({ required this.excludePatterns, required this.analyzerExcludePatterns, required this.isMonorepo, }) - added:
ctor UnusedCodeConfig.fromAnalysisOptions(AnalysisOptions options) - added:
ctor UnusedCodeConfig.fromArgs( Iterable<String> excludePatterns, { required bool isMonorepo, }) - added:
ctor UnusedCodeConsoleReporter(super.output) - added:
ctor UnusedCodeFileReport({ required this.path, required this.relativePath, required this.issues, }) - added:
ctor UnusedCodeIssue({ required this.declarationName, required this.declarationType, required this.location, }) - added:
ctor UnusedCodeJsonReporter(IOSink output) - added:
field UnusedCodeConfig.analyzerExcludePatterns: final Iterable<String> - added:
field UnusedCodeConfig.excludePatterns: final Iterable<String> - added:
field UnusedCodeConfig.isMonorepo: final bool - added:
field UnusedCodeFileReport.issues: final Iterable<UnusedCodeIssue> - added:
field UnusedCodeFileReport.path: final String - added:
field UnusedCodeFileReport.relativePath: final String - added:
field UnusedCodeIssue.declarationName: final String - added:
field UnusedCodeIssue.declarationType: final String - added:
field UnusedCodeIssue.location: final SourceLocation - added:
method UnusedCodeAnalyzer.getReporter({ required String name, required IOSink output, }): Reporter<UnusedCodeFileReport, void, UnusedCodeReportParams>? - added:
method UnusedCodeAnalyzer.runCliAnalysis( Iterable<String> folders, String rootFolder, UnusedCodeConfig config, { String? sdkPath, }): Future<Iterable<UnusedCodeFileReport>> - added:
method UnusedCodeConfig.merge(UnusedCodeConfig overrides): UnusedCodeConfig - added:
method UnusedCodeConsoleReporter.report( Iterable<UnusedCodeFileReport> records, { Iterable<void> summary = …, UnusedCodeReportParams? additionalParams, }): Future<void> - added:
method UnusedCodeJsonReporter.report( Iterable<UnusedCodeFileReport> records, { Iterable<void> summary = …, UnusedCodeReportParams? additionalParams, }): Future<void>
- added:
class UnusedFilesAnalyzer - added:
class UnusedFilesConfig - added:
class UnusedFilesConsoleReporter extends ConsoleReporter<UnusedFilesFileReport, void, UnusedFilesReportParams> - added:
class UnusedFilesFileReport implements FileReport - added:
class UnusedFilesJsonReporter extends JsonReporter<UnusedFilesFileReport, void, UnusedFilesReportParams> - added:
ctor UnusedFilesAnalyzer([this._logger]) - added:
ctor UnusedFilesConfig({ required this.excludePatterns, required this.analyzerExcludePatterns, required this.isMonorepo, }) - added:
ctor UnusedFilesConfig.fromAnalysisOptions(AnalysisOptions options) - added:
ctor UnusedFilesConfig.fromArgs( Iterable<String> excludePatterns, { required bool isMonorepo, }) - added:
ctor UnusedFilesConsoleReporter(super.output) - added:
ctor UnusedFilesFileReport({ required this.path, required this.relativePath, }) - added:
ctor UnusedFilesJsonReporter(IOSink output) - added:
field UnusedFilesConfig.analyzerExcludePatterns: final Iterable<String> - added:
field UnusedFilesConfig.excludePatterns: final Iterable<String> - added:
field UnusedFilesConfig.isMonorepo: final bool - added:
field UnusedFilesFileReport.path: final String - added:
field UnusedFilesFileReport.relativePath: final String - added:
method UnusedFilesAnalyzer.deleteAllUnusedFiles(Iterable<UnusedFilesFileReport> reports): void - added:
method UnusedFilesAnalyzer.getReporter({ required String name, required IOSink output, }): Reporter<UnusedFilesFileReport, void, UnusedFilesReportParams>? - added:
method UnusedFilesAnalyzer.runCliAnalysis( Iterable<String> folders, String rootFolder, UnusedFilesConfig config, { String? sdkPath, }): Future<Iterable<UnusedFilesFileReport>> - added:
method UnusedFilesConfig.merge(UnusedFilesConfig overrides): UnusedFilesConfig - added:
method UnusedFilesConsoleReporter.report( Iterable<UnusedFilesFileReport> records, { Iterable<void> summary = …, UnusedFilesReportParams? additionalParams, }): Future<void> - added:
method UnusedFilesJsonReporter.report( Iterable<UnusedFilesFileReport> records, { Iterable<void> summary = …, UnusedFilesReportParams? additionalParams, }): Future<void>
- added:
class UnusedL10nAnalyzer - added:
class UnusedL10nConfig - added:
class UnusedL10nConsoleReporter extends ConsoleReporter<UnusedL10nFileReport, void, UnusedL10NReportParams> - added:
class UnusedL10nFileReport implements FileReport - added:
class UnusedL10nIssue - added:
class UnusedL10nJsonReporter extends JsonReporter<UnusedL10nFileReport, void, UnusedL10NReportParams> - added:
ctor UnusedL10nAnalyzer([this._logger]) - added:
ctor UnusedL10nConfig({ required this.excludePatterns, required this.analyzerExcludePatterns, required this.classPattern, }) - added:
ctor UnusedL10nConfig.fromAnalysisOptions( AnalysisOptions options, ) - added:
ctor UnusedL10nConfig.fromArgs( Iterable<String> excludePatterns, String classPattern, ) - added:
ctor UnusedL10nConsoleReporter(super.output) - added:
ctor UnusedL10nFileReport({ required this.path, required this.relativePath, required this.issues, required this.className, }) - added:
ctor UnusedL10nIssue({ required this.memberName, required this.location, }) - added:
ctor UnusedL10nJsonReporter(IOSink output) - added:
field UnusedL10nConfig.analyzerExcludePatterns: final Iterable<String> - added:
field UnusedL10nConfig.classPattern: final String? - added:
field UnusedL10nConfig.excludePatterns: final Iterable<String> - added:
field UnusedL10nFileReport.className: final String - added:
field UnusedL10nFileReport.issues: final Iterable<UnusedL10nIssue> - added:
field UnusedL10nFileReport.path: final String - added:
field UnusedL10nFileReport.relativePath: final String - added:
field UnusedL10nIssue.location: final SourceLocation - added:
field UnusedL10nIssue.memberName: final String - added:
method UnusedL10nAnalyzer.getReporter({ required String name, required IOSink output, }): Reporter<UnusedL10nFileReport, void, UnusedL10NReportParams>? - added:
method UnusedL10nAnalyzer.runCliAnalysis( Iterable<String> folders, String rootFolder, UnusedL10nConfig config, { String? sdkPath, }): Future<Iterable<UnusedL10nFileReport>> - added:
method UnusedL10nConfig.merge(UnusedL10nConfig overrides): UnusedL10nConfig - added:
method UnusedL10nConsoleReporter.report( Iterable<UnusedL10nFileReport> records, { Iterable<void> summary = …, UnusedL10NReportParams? additionalParams, }): Future<void> - added:
method UnusedL10nJsonReporter.report( Iterable<UnusedL10nFileReport> records, { Iterable<void> summary = …, UnusedL10NReportParams? additionalParams, }): Future<void>