我注意到,默认情况下,srb init
等不会在rake任务上放置# typed标志。然而,在VSCode上,它确实在rake任务上显示错误(例如缺少常量)。
我尝试将# typed: true
添加到rake任务中,但它会立即显示“namespace is not available in Root”这样的错误。有人试过对你的耙式任务进行打字检查吗?你有什么计划?
我注意到,默认情况下,srb init
等不会在rake任务上放置# typed标志。然而,在VSCode上,它确实在rake任务上显示错误(例如缺少常量)。
我尝试将# typed: true
添加到rake任务中,但它会立即显示“namespace is not available in Root”这样的错误。有人试过对你的耙式任务进行打字检查吗?你有什么计划?
2条答案
按热度按时间wgxvkvu91#
Rake monkeypat全局
main
对象(即顶层代码)来扩展他们的DSL:字符串
→ lib/rake/dsl_definition.rb
Sorbet不能建模一个对象的单个示例(在本例中是
main
)与该示例的类(在本例中是Object
)具有不同的继承层次结构。为了解决这个问题,我们建议重构
Rakefile
以创建一个继承层次是显式的新类:型
或者,我们可以为
Object
编写一个RBI,使其显示为extend Rake::DSL
。这个RBI可能是大部分错误:不是所有的Object
示例都有这个extend
,只有一个有。我们不建议这种方法,因为它可能使它看起来像一些代码类型检查,即使像task
和namespace
这样的方法没有定义。如果你想这样做,你可以为Object
写这个RBI文件:型
yqyhoc1h2#
一个更好的方法是告诉冰糕Rake在做什么。
在某些时候,Rake会像这样扩展Object:
字符串
在每个rake文件中,你可以告诉冰糕,这是发生的。
型
唯一要做的就是告诉冰糕的typechecker查看.rake文件。默认情况下,它只查看.ruby和.rbi文件。但是您可以告诉它也查看.rake文件。
型