繁殖步骤:
# Extract package:retry version 3.0.1
$ curl -L https://storage.googleapis.com/pub-packages/packages/retry-3.0.1.tar.gz | tar -xz
$ pub get
# Get dartdoc from git
$ mkdir /source/dartdoc
$ git clone https://github.com/dart-lang/dartdoc.git /source/dartdoc
$ cd /source/dartdoc; pub get; cd -;
# Generate docs
$ dart /source/dartdoc/bin/dartdoc.dart
请注意, pubspec.yaml
的package:retry
具有:
environment:
sdk: ">=2.0.0 <3.0.0"
而.dart_tool/package_config.json
为package:retry
指定语言版本 2.0:
{
"configVersion": 2,
"packages": [
/* various other dependencies, mostly test and it's transitive dependencies, omitted here */
{
"name": "retry",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "2.0" // <-- language version 2.0, hence, no library in package:retry supports null-safety
}
],
"generated": "2020-10-21T10:44:27.912220Z",
"generator": "pub",
"generatorVersion": "2.10.0"
}
意想不到的结果:
虽然retry
函数不能返回null
是正确的,但包没有迁移到空安全,所以我们真的应该在这里添加任何类型的空安全标签吗?
笔记。 个别库可以选择退出空安全是正确的,因此,可以说注释一个函数或类是否支持空安全是有价值的。
但是对于大多数迁移到 null-safety 的包,所有库都将迁移到 null-safety。
编辑:我不完全确定我们应该在这里做什么。 只是在没有语言版本 >= 2.12.0 的包中向库添加“空安全”可能是错误的。
同意这可能是错误的。 不确定这里发生了什么,但明天会尝试调查; 如果它很普遍(即我们现在出于某种原因将所有东西都标记为这样)可能应该提升到 P1。
我知道分析器仍然知道这些不是空安全包的事实,但是现在我们到处散布空安全标签。
@jcollins-g 我们是否想要在会员级别使用此标签? 在其他地方,例如在 pub.dev 上,我们将把空安全视为包级属性(整个包都有,或者没有)
@mit-mit 无论哪种方式,我都没有强烈的意见。 有一种观点认为,在浏览 API 文档的语料库和跨越包边界时,知道您何时偶然进入(或退出)空安全包可能会很好,并且成员标记是一种方法那。
我们可以把它放在这里吗?
有一种观点认为,在浏览 API 文档的语料库和跨越包边界时,知道您何时偶然进入(或退出)空安全包可能会很好,并且成员标记是一种方法那。
通常是否有可能从空安全包中跌出非空安全包?
在pub.dev
上, pana
pub.dev
的分析只会将包分类为支持 null-safety ,如果:
>=2.12
,// @dart=2.5
)选择退出空安全,pub upgrade
解析中的所有依赖项(不包括dev_dependencies
)_supports null-safety_(遵循此递归定义)。因此,如果您开始阅读支持空安全的包的文档,您不太可能意外地发现一个不是空安全的包/库。
但是,如果您从一个非空安全的包开始,您可以走另一条路。 如果你最终通过在谷歌搜索中找到文档页面,我想知道它也很高兴。 所以图书馆级别的标签可能很好。
由于https://github.com/dart-lang/sdk/issues/43903 ,这被证明是一个难以解决的问题,据我所知,由于实验标志及其使用方式,这也是一个难以解决的问题对于不可为空。 当标志变为默认值时,此问题可能会“消失”。 我的倾向是允许标签在短时间内出错,假设该标志很快在分析器中成为默认值,因为解决这个问题需要付出很大的努力。 周一将与分析器团队讨论,他们中的大部分人今天都出去了。
一些坏消息。 将标志默认为 on 实际上并不能解决问题。 所以我们需要额外的工作来纠正这个问题。 好消息是@scheglov已经在分析器和 dartdoc 中做了繁重的工作来解决 #2309 中的这个问题,尽管它需要更新并修复了一些 Windows 兼容性问题。 一旦这项工作落地,应该可以修复这个错误。
现在开始基于 #2309 的 PR,修复他遇到的问题并解决合并冲突。
尝试使用 #2309 的更新版本来解决这个问题遇到了麻烦。 简短的版本是 dartdoc 允许一些需要非默认解析器的东西,所以我们的一些测试失败了。 这可能是可以解决的,但不是在时间范围内。
我第二次尝试“修复”它只是在 dartdoc 中重新实现了 pubspec 阅读逻辑。 这很愚蠢,但会奏效。 @scheglov指出,这可能是由于未将包传递到 AnalysisDriver 而造成的,事实上,我们未能做到这一点。
提交错误 #2410 以处理 AnalysisContextCollection 的端口,因为未能解决该债务无疑会在未来导致更多类似这样的混乱问题。
提交错误 #2409 以实现@mit-mit 关于更改空安全标签位置的评论。
#2411登陆后将关闭并发布新版本。