blob: f3873dc4e911eec3ef8f79a7d0a1138416f1b424 [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/error/error.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
show SourceChange;
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
/// A description of a single proposed fix for some problem.
///
/// Clients may not extend, implement or mix-in this class.
class Fix {
/// A comparator that can be used to sort fixes by their relevance. The most
/// relevant fixes will be sorted before fixes with a lower relevance. Fixes
/// with the same relevance are sorted alphabetically.
static final Comparator<Fix> SORT_BY_RELEVANCE = (Fix a, Fix b) {
if (a.kind.priority != b.kind.priority) {
// A higher priority indicates a higher relevance
// and should be sorted before a lower priority.
return b.kind.priority - a.kind.priority;
}
return a.change.message.compareTo(b.change.message);
};
/// A description of the fix being proposed.
final FixKind kind;
/// The change to be made in order to apply the fix.
final SourceChange change;
/// Initialize a newly created fix to have the given [kind] and [change].
Fix(this.kind, this.change);
@override
String toString() {
return 'Fix(kind=$kind, change=$change)';
}
}
/// An object used to provide context information for [FixContributor]s.
///
/// Clients may not extend, implement or mix-in this class.
abstract class FixContext {
/// The error to fix.
AnalysisError get error;
}
/// An object used to produce fixes for a specific error. Fix contributors are
/// long-lived objects and must not retain any state between invocations of
/// [computeFixes].
///
/// Clients may implement this class when implementing plugins.
abstract class FixContributor {
/// Return a list of fixes for the given [context].
Future<List<Fix>> computeFixes(covariant FixContext context);
}