Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rake任务上运行sorbet typecheck_Ruby On Rails_Rake_Sorbet - Fatal编程技术网

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的情况。