dev
dart 49 lines 1.52 KB
Raw
1 import "package:analysis_server_plugin/edit/dart/correction_producer.dart";
2 import "package:analysis_server_plugin/edit/dart/dart_fix_kind_priority.dart";
3 import "package:analyzer/dart/ast/ast.dart";
4 import "package:analyzer_plugin/utilities/change_builder/change_builder_core.dart";
5 import "package:analyzer_plugin/utilities/fixes/fixes.dart";
6 import "package:analyzer_plugin/utilities/range_factory.dart";
7
8 class ReplaceWithPrintV extends ResolvedCorrectionProducer {
9 ReplaceWithPrintV({required super.context});
10
11 static const _importString = "package:cw_core/utils/print_verbose.dart";
12
13 static const _fixKind = FixKind(
14 "dart.fix.replaceWithPrintV",
15 DartFixKindPriority.standard,
16 "Replace with printV()",
17 );
18
19 @override
20 CorrectionApplicability get applicability => CorrectionApplicability.singleLocation;
21
22 @override
23 FixKind get fixKind => _fixKind;
24
25 @override
26 Future<void> compute(ChangeBuilder builder) async {
27 final invocation = node.thisOrAncestorOfType<MethodInvocation>();
28 if (invocation == null) {
29 return;
30 }
31
32 final root = invocation.root;
33 final hasImport = root is CompilationUnit &&
34 root.directives.whereType<ImportDirective>().any(
35 (directive) => directive.uri.stringValue == _importString,
36 );
37
38 await builder.addDartFileEdit(file, (builder) {
39 builder.addSimpleReplacement(
40 range.node(invocation.methodName),
41 "printV",
42 );
43
44 if (!hasImport) {
45 builder.importLibrary(Uri.parse(_importString));
46 }
47 });
48 }
49 }