一键解决诊断问题
如果你像我一样,你有太多的开发时间花在修复分析器发现的问题(诊断)上。如果你曾经希望它能更容易,那么我有一些好消息要告诉你。分析器产生的许多诊断结果都可以通过快速修复来自动修复。
快速修复是针对修复特定诊断报告的问题的自动编辑。在Dart诊断信息文章中,我们看了以下代码。
纠正信息建议了两种解决问题的方法:"尝试使访问有条件(使用'?')或在目标('!')上添加空检查"。
如果你点击高亮区域(有红色斜线的区域),你会在编辑器的左边缘附近看到一个灯泡图标。如果你将鼠标悬停在它上面,你就可以点击打开一个包含可用的快速修正的菜单。
这两个建议的修正都可以从菜单中获得。选择其中一个,就可以将修改应用到你的代码中。例如,如果你选择第一个修正,它会将代码更新为以下内容。
让我们先来看看如何在IntelliJ IDEA和Visual Studio Code中应用一个修正,然后再看一个更强大的例子,看看快速修正能做什么。
IntelliJ IDEA
编辑器中的上下文操作菜单看起来像下面这样。
你可以通过在编辑器的上下文菜单中选择 "显示上下文操作 "或使用其键盘等价物**(Windows和Linux上的Alt+Enter**,或MacOS上的Option+Enter)来访问相同的列表。
当你把鼠标悬停在高亮区域时,你也可以直接从悬停文本中调用这些修复。如果有太多的修复方法,有一个更多的行动项目也会打开菜单。
如果这还不够,你也可以从Dart分析视图中的上下文菜单中调用可用的修复方法。
Visual Studio代码
编辑器中的代码操作菜单看起来像下面这样。
前两个项目是快速修复,其他的是重构。你可以通过使用它的键盘等价物**(Windows和Linux上的Control+.,或MacOS上的Command+.),或从编辑器中的悬停文本中选择快速修复.**..来访问同一个列表。
你也可以从问题面板的上下文菜单中调用它们。
另一个例子
虽然上面的修复方法为你节省了查找更正信息然后手工编辑的时间和精力,但不得不承认,添加一个字符并不是一个巨大的时间节省。然而,有些修复方法能提供更大的生产力提升。考虑一下下面的代码。
诊断书告诉你,"await表达式只能在异步函数中使用"。假设你不想使用同步I/O,修正方法是在函数的主体上标上async关键字。这样做会导致另一个错误,告诉你该方法的返回类型需要是Future,所以你最终也会更新返回类型。
幸运的是,有一个快速修复原始问题的方法。
选择这个修复方法不仅可以添加修改器,还可以更新返回类型,让你一步到位地解决这个问题。
总结
不是每个问题都能自动修复,也不是每个问题都能有一个快速修复的方法。尽管如此,在你下次有诊断需要修复时,绝对值得检查一下是否有可用的快速修复方法。如果你没有看到一个应该有的诊断的修复,请通过创建一个dart-lang/sdk问题让我们知道。
分析问题的快速修复方法最初发表于Darton Medium,在那里人们通过强调和回应这个故事继续对话。