Cannot find type `Sinatra::Base`ruby文件
class StaticApp < Sinatra::Base
end rbs文件
class StaticApp < Sinatra::Base
end 跑
bundle exec steep check --log-level=fatal结果
[error] Cannot find type `Sinatra::Base`
Diagnostic ID: RBS::UnknownTypeName 我用steep宝石。似乎需要一些文件。但
library 'sinatra' 不起作用。
#<RBS::EnvironmentLoader::UnknownLibraryError: Cannot find type definitions for library: sinatra ([nil])>我做错什么了?谢谢。
发布于 2021-12-12 05:59:06
但是
library 'sinatra'不工作..。RBS::EnvironmentLoader::UnknownLibraryError
简短回答
# Steepfile
target :app do
repo_path 'vendor/rbs'创建一个类似于vendor/rbs/sinatra/0/sinatra.rbs的目录结构。
您如何编写或生成sinatra.rbs的内容超出了这个答案的范围,但是请查看集合。Rails人员,请参阅钢轨。
长答案
陡峭使用RBS::EnvironmentLoader。
# steep-0.47.0/lib/steep/project/target.rb:54
loader = RBS::EnvironmentLoader.new(core_root: core_root_path, repository: repo)
options.libraries.each do |lib|
name, version = lib.split(/:/, 2)
loader.add(library: name, version: version)
endEnvironmentLoader可以在gem_sig_path (我认为这将是一个分布在gem中的sig文件夹)或repository中找到一个sig。
# rbs-1.7.1/lib/rbs/environment_loader.rb:68
def has_library?(library:, version:)
if self.class.gem_sig_path(library, version) || repository.lookup(library, version)
true
else
false
end
end在Steepfile中,存储库是通过repo_path配置的。
# Steepfile
repo_path 'vendor/rbs'对于存储库的目录结构,我以https://github.com/ruby/rbs/tree/master/stdlib为例。
ls -R vendor/rbs
activesupport
vendor/rbs/activesupport:
0
vendor/rbs/activesupport/0:
activesupport.rbshttps://stackoverflow.com/questions/69285104
复制相似问题