问题标签 [sorbet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 使用自定义模式对树类进行冰糕类型检查?
我有一个自定义的树状类 ( MyTree
),它将数据存储在分层键下(类似于文件系统路径)。它公开了方法get
和set
,每个方法都对 -"."
分隔的键进行操作。实例化时MyTree
会给出一个模式,该模式指定每个键的类型(就本问题而言,考虑存储为的所有值的类型Nilable
):每个定义的键:
我正在尝试用 来增加这个类sorbet
,以便它可以像这样工作:
但我不确定如何使给定MyTree
实例的架构对冰糕清晰可见。这可能吗?
ruby - 试图理解这个 ruby 语法
我是 ruby 新手,很多事情让我感到困惑。我相信这个特定的来自 Sorbet,它是一些类型检查库?没有把握。这段特定的代码就在方法声明之前
该order
对象是来自 REST API 的 json 对象。有人可以解释这个嵌套的事情是怎么回事。
ruby-on-rails - 包含 `ActiveModel::Model` 时,Sorbet 找不到 `validates` 方法
我正在使用 ActiveModel 来验证我的 Ruby on Rails 中的一些表单对象。一个简化的可重现示例如下所示:
问题是,Sorbet 抱怨说validates
在 上不存在T.class_of(Form)
。即使为ActiveModel::Model
模块正确生成了 RBI 文件。
ruby-on-rails - 冰糕没有找到“has_many”关联方法
我有一个 Rails 模型has_many
items
:
然而,冰糕似乎与has_many :items
. 当我运行 Sorbet 类型检查时,我收到以下错误:
Sorbet 的问题的答案是肯定的——我的意思是那种方法。哪里来的混乱?为什么.items
RBI 文件中的定义不能满足 Sorbet 知道该方法定义在哪里的需要?
sorbet - Sorbet:检查包含目标模块的类
SorbetT.class_of
可用于匹配后代类,但不能用于匹配包含模块的类:
根据https://sorbet.org/docs/class-of,这是因为 B 不是 X 的 singleton_class 的实例:
但没有提供替代建议。有没有办法根据类的祖先的内容进行类型检查?即类似的东西class_of
可以用来检查模块中的类混合吗?
sorbet - 如何在不降级印记的情况下使用 `srb rbiSuggest-typed`?
Ruby 的 Sorbet 类型检查器有一个实用程序 ,srb rbi suggest-typed
它将自动更新# typed:
每个文件上的符号。然而,正如 Sorbet 文档所解释的那样,“目前,建议过程是错误的,并且可能会在没有必要时建议降级。” 我有一个 Sorbet 类型的代码库,我想尝试升级它的类型(以“棘轮”任何已完全键入而没有更改其印记的文件),但因为它是一个非常大的代码库,我不想必须手动审核每个更改的文件。有没有办法让 Sorbet 仅在升级时才对印记应用更改?
ruby - Sorbet T::Struct 的序列化和反序列化
我最近开始玩 Sorbet 并偶然发现了T::Struct,它似乎对类型安全值的对象非常有用。
一个例子可能是:
然后可以通过以下方式轻松实例化:
但是,我也想将这些对象保存在文件或数据库中。幸运的是,序列化为 json 非常简单:
但是当涉及到反序列化时,它变得非常棘手(对于 JSON),因为日期被保存为字符串。做 aJSON.load
和象征键不会这样做。
所以我想知道,是否已经有一个序列化程序可以根据类型检查所有值,并可以为不匹配的类型提供映射器?
ruby - Ruby Sorbet 哈希类型检查
我想了解为什么 Sorbet 不抱怨这个例子:例子:
我已经声明foo
接受 [String, String] 的哈希值,但我传递了 [Integer, Integer] 的哈希值。我以为冰糕会在这里抱怨...
有没有办法让它在这种情况下出错?
ruby-on-rails - 木薯粉没有为 Rails 模型生成正确的 RBI 文件
我正在将生成 RBI 文件的方式从 Sorbet 迁移到 Tapioca。但是,我在我的 Rails 模型的许多 RBI 文件中遇到了一个反复出现的问题。尝试为关系生成签名时,RBI 文件似乎出错了has_many
。
(注意 - 它是 RBI 文件本身而不是生成警告的模型)
在文件中, has_many 关联user.rbi
的签名是:user.plans
当我运行时,srb tc
我看到以下错误:
ruby-on-rails - 由于与 yard gem 冲突,Sorbet `srb init` 与 Kernel#exit 失败
我们开始在工作中使用 Sorbet 并srb init
抛出一个需要yard的错误。文件仍然生成并且似乎工作正常,直到srb tc
开始产生如下错误:
重新生成隐藏定义,bundle exec srb rbi hidden-definitions
产生与 相同的错误srb init
,并且没有一个解决问题。为了确保我们的冰糕文件正确生成,找到错误的底部似乎是值得的。
使用:Ruby 2.6.5、Rails 6.1.4.1、冰糕 0.5.9115、Yard 0.9.26
重现步骤:
将以下内容添加到 Gemfile
输出片段srb init
:
这有点令人困惑,因为 之后缺少换行符YARD::Server::Commands
,所以错误实际上是:
Kernel#exit was called while requiring ruby source files
有趣的是,后续运行bundle exec srb init
或bundle exec srb rbi hidden-definitions
失败的位置与第一次运行略有不同,并生成略有不同的 sorbet 文件。第二次运行失败,Yard::Tags
而不是YARD::Server::Commands
。bundle exec srb rbi hidden-definitions
失败于Naming YARD::Templates
。
我已经尝试了来自https://github.com/sorbet/sorbet/issues/975的一些建议,例如require: false
在院子里使用但同样的问题。
对解决方法或建议持开放态度。有一个相关的问题是,一个项目exit
在加载时调用并以相同的方式中断srb init
,冰糕团队的响应基本上是“你的代码正在调用 Kernel#exit,不要那样做”。
计划向 Yard 和/或 Sorbet 提出问题,但尚不清楚他们是否愿意修复它,而且我仍然不清楚 yard 代码中调用#exit
文件加载的内容。