为什么飞镖分析器无法识别类型错误



以下是代码:

static const _defaults = <String, dynamic>{
'api_key': '4839234792374',
'enabled': false,
'concurrency': 4,
};
String getString(String key) {
return _remoteConfig == null ?
_defaults.containsKey(key) && _defaults[key] :
_remoteConfig.getString(key);
}

这个错误是显而易见的(我很遗憾,它是由类似的getBool(key)函数的盲复制粘贴产生的。如果_remoteConfignull,则执行命中bool && String路径,我得到运行时异常type 'String' is not a subtype of type 'bool'。完全合法,但为什么分析器没有看到它?执行流非常清楚,一个路径返回String,另一个路径(理论上(返回dynamic,返回类型为String这意味着所有路径返回CCD_ 9。我不明白的是什么?

飞镖2.12.0迂腐的1.11.0

分析仪选项:

include: package:pedantic/analysis_options.yaml
analyzer:
exclude:
- lib/generated/*
- lib/**/*.g.dar

我想你在问两个问题:

  1. 为什么分析仪不抱怨_defaults.containsKey(key) && _defaults[key]

  2. 为什么分析器不抱怨沿着其两条路径具有不同类型的三元表达式?

对于#1:由于_defaults[key]返回类型dynamic(在运行时可能是bool(,我不希望出现分析投诉。

对于#2:由于两个路径具有不同的类型,三元表达式的类型是常见的基类型:Object。如果启用了隐式强制转换,则Object将自动强制转换为String返回类型。

如果在analysis_options.yaml配置文件中禁用隐式强制转换,分析器会捕获这两个错误

analyzer:
strong-mode:
implicit-casts: false

运行分析仪,然后打印:

error•运算符"&amp;'必须可在…处分配给"bool"。•(non_bool_operand(

error•无法从函数"getString"返回"Object"类型的值,因为它在…处的返回类型为"String"。•(return_of_invalid_type(

(我很惊讶implicit-casts: falsedynamic操作数触发了&&表达式的分析错误;也许我的理解不太准确,也许这是分析器中的一个错误。(

最新更新