如何 运行 对 rake 任务进行 sorbet typecheck
How to run sorbet typecheck on rake tasks
我注意到默认情况下,srb init
etc 不会在 rake 任务上放置 # typed 标志。但是,在 VSCode 上,它确实在 rake 任务上显示错误(例如缺少常量)。
我尝试将 # typed: true
添加到 rake 任务中,但它会立即显示 "namespace is not available in Root" 之类的错误。有没有人试过对你的 rake 任务进行类型检查?这样做的设置是什么?
Rake monkey 修补全局 main
对象(即顶级代码)以扩展其 DSL:
# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
Sorbet 无法建模对象的单个实例(在本例中为 main
)与该实例的 class(在本例中为 Object
)具有不同的继承层次结构。
为了解决这个问题,我们建议重构 Rakefile
以创建新的 class,其中继承层次结构是明确的:
# -- my_rake_tasks.rb --
# (1) Make a proper class inside a file with a *.rb extension
class MyRakeTasks
# (2) Explicitly extend Rake::DSL in this class
extend Rake::DSL
# (3) Define tasks like normal:
task :test do
puts 'Testing...'
end
# ... more tasks ...
end
# -- Rakefile --
# (4) Require that file from the Rakefile
require_relative './my_rake_tasks'
或者,我们可以为 Object
编写一个 RBI,使其在 extend Rake::DSL
中显示。这个打点 大部分是错误的 :并非 Object
的所有实例都有这个 extend
,只有一个有。我们不 建议使用这种方法,因为即使未定义 task
和 namespace
等方法,它也可能使其看起来像某些代码类型检查。如果您无论如何都想这样做,您可以为 Object
:
编写此 RBI 文件
# -- object.rbi --
# Warning!! Monkeypatches all Object's everywhere!
class Object
extend Rake::DSL
end
我注意到默认情况下,srb init
etc 不会在 rake 任务上放置 # typed 标志。但是,在 VSCode 上,它确实在 rake 任务上显示错误(例如缺少常量)。
我尝试将 # typed: true
添加到 rake 任务中,但它会立即显示 "namespace is not available in Root" 之类的错误。有没有人试过对你的 rake 任务进行类型检查?这样做的设置是什么?
Rake monkey 修补全局 main
对象(即顶级代码)以扩展其 DSL:
# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
Sorbet 无法建模对象的单个实例(在本例中为 main
)与该实例的 class(在本例中为 Object
)具有不同的继承层次结构。
为了解决这个问题,我们建议重构 Rakefile
以创建新的 class,其中继承层次结构是明确的:
# -- my_rake_tasks.rb --
# (1) Make a proper class inside a file with a *.rb extension
class MyRakeTasks
# (2) Explicitly extend Rake::DSL in this class
extend Rake::DSL
# (3) Define tasks like normal:
task :test do
puts 'Testing...'
end
# ... more tasks ...
end
# -- Rakefile --
# (4) Require that file from the Rakefile
require_relative './my_rake_tasks'
或者,我们可以为 Object
编写一个 RBI,使其在 extend Rake::DSL
中显示。这个打点 大部分是错误的 :并非 Object
的所有实例都有这个 extend
,只有一个有。我们不 建议使用这种方法,因为即使未定义 task
和 namespace
等方法,它也可能使其看起来像某些代码类型检查。如果您无论如何都想这样做,您可以为 Object
:
# -- object.rbi --
# Warning!! Monkeypatches all Object's everywhere!
class Object
extend Rake::DSL
end