| 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 | } |