Ruby on rails 如何在rake任务上运行sorbet typecheck
我注意到默认情况下,Ruby on rails 如何在rake任务上运行sorbet typecheck,ruby-on-rails,rake,sorbet,Ruby On Rails,Rake,Sorbet,我注意到默认情况下,srb initetc不会在rake任务上放置#typed标志。然而,在VSCode上,它确实在rake任务上显示错误(例如缺少常量) 我曾尝试将#typed:true添加到rake任务中,但它会立即显示错误,如“根目录中没有命名空间”。有人试过打字检查你的rake任务吗?设置的目的是什么?Rake monkeypatches全局main对象(即顶级代码)以扩展其DSL: #使用DSL命令扩展主对象。这允许顶级的 #要求task等在耙铲上工作而不污染环境 #对象继承树。 se
srb init
etc不会在rake任务上放置#typed标志。然而,在VSCode上,它确实在rake任务上显示错误(例如缺少常量)
我曾尝试将
#typed:true
添加到rake任务中,但它会立即显示错误,如“根目录中没有命名空间”。有人试过打字检查你的rake任务吗?设置的目的是什么?Rake monkeypatches全局main
对象(即顶级代码)以扩展其DSL:
#使用DSL命令扩展主对象。这允许顶级的
#要求task等在耙铲上工作而不污染环境
#对象继承树。
self.extend Rake::DSL
→
Sorbet无法对对象的单个实例(在本例中为main
)与该实例的类(在本例中为object
)具有不同的继承层次结构进行建模
为了解决这个问题,我们建议重构Rakefile
,创建一个继承层次结构明确的新类:
#--my_rake_tasks.rb--
#(1)在扩展名为*.rb的文件中创建适当的类
MyRakeTasks类
#(2)在此类中显式扩展Rake::DSL
扩展Rake::DSL
#(3)定义任务,如正常:
任务:测试do
“测试…”
结束
# ... 更多任务。。。
结束
#--耙子--
#(4)要求从Rakefile获取该文件
需要\u relative./my\u rake\u tasks'
或者,我们可以为
对象
编写一个RBI,使其看起来像是扩展了Rake::DSL
。此RBI将大部分错误:并非所有对象的实例都有此扩展
,只有一个实例有此扩展。我们不建议使用这种方法,因为它可能使它看起来像一些代码类型检查,即使没有定义task
和namespace
之类的方法。如果您想以任何方式执行此操作,可以为对象
编写此RBI文件:
#--object.rbi--
#警告!!Monkeypatches所有物体无处不在!
类对象
扩展Rake::DSL
结束
您是否有示例Rakefile
或rake任务?我很高兴能更详细地看一个失败的例子。它实际上是任何rake任务。“namespace:”命令显示错误,该命令是rake任务的第一行。我会寄给你一个关于slack的样本。是的,我的回购协议中的所有Rake任务都有问题。我认为这只是一种Sorbet不知道Rake文件的DSL的情况。