问题标签 [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.

0 投票
0 回答
34 浏览

ruby - 使用自定义模式对树类进行冰糕类型检查?

我有一个自定义的树状类 ( MyTree),它将数据存储在分层键下(类似于文件系统路径)。它公开了方法getset,每个方法都对 -"."分隔的键进行操作。实例化时MyTree会给出一个模式,该模式指定每个键的类型(就本问题而言,考虑存储为的所有值的类型Nilable):每个定义的键:

我正在尝试用 来增加这个类sorbet,以便它可以像这样工作:

但我不确定如何使给定MyTree实例的架构对冰糕清晰可见。这可能吗?

0 投票
2 回答
679 浏览

ruby - 试图理解这个 ruby​​ 语法

我是 ruby​​ 新手,很多事情让我感到困惑。我相信这个特定的来自 Sorbet,它是一些类型检查库?没有把握。这段特定的代码就在方法声明之前

order对象是来自 REST API 的 json 对象。有人可以解释这个嵌套的事情是怎么回事。

0 投票
1 回答
381 浏览

ruby-on-rails - 包含 `ActiveModel::Model` 时,Sorbet 找不到 `validates` 方法

我正在使用 ActiveModel 来验证我的 Ruby on Rails 中的一些表单对象。一个简化的可重现示例如下所示:

问题是,Sorbet 抱怨说validates在 上不存在T.class_of(Form)。即使为ActiveModel::Model模块正确生成了 RBI 文件。

0 投票
2 回答
248 浏览

ruby-on-rails - 冰糕没有找到“has_many”关联方法

我有一个 Rails 模型has_many items

然而,冰糕似乎与has_many :items. 当我运行 Sorbet 类型检查时,我收到以下错误:

Sorbet 的问题的答案是肯定的——我的意思是那种方法。哪里来的混乱?为什么.itemsRBI 文件中的定义不能满足 Sorbet 知道该方法定义在哪里的需要?

0 投票
0 回答
33 浏览

sorbet - Sorbet:检查包含目标模块的类

SorbetT.class_of可用于匹配后代类,但不能用于匹配包含模块的类:

根据https://sorbet.org/docs/class-of,这是因为 B 不是 X 的 singleton_class 的实例:

但没有提供替代建议。有没有办法根据类的祖先的内容进行类型检查?即类似的东西class_of可以用来检查模块中的类混合吗?

0 投票
2 回答
111 浏览

sorbet - 如何在不降级印记的情况下使用 `srb rbiSuggest-typed`?

Ruby 的 Sorbet 类型检查器有一个实用程序 ,srb rbi suggest-typed它将自动更新# typed:每个文件上的符号。然而,正如 Sorbet 文档所解释的那样,“目前,建议过程是错误的,并且可能会在没有必要时建议降级。” 我有一个 Sorbet 类型的代码库,我想尝试升级它的类型(以“棘轮”任何已完全键入而没有更改其印记的文件),但因为它是一个非常大的代码库,我不想必须手动审核每个更改的文件。有没有办法让 Sorbet 仅在升级时才对印记应用更改?

0 投票
1 回答
261 浏览

ruby - Sorbet T::Struct 的序列化和反序列化

我最近开始玩 Sorbet 并偶然发现了T::Struct,它似乎对类型安全值的对象非常有用。

一个例子可能是:

然后可以通过以下方式轻松实例化:

但是,我也想将这些对象保存在文件或数据库中。幸运的是,序列化为 json 非常简单:

但是当涉及到反序列化时,它变得非常棘手(对于 JSON),因为日期被保存为字符串。做 aJSON.load和象征键不会这样做。

所以我想知道,是否已经有一个序列化程序可以根据类型检查所有值,并可以为不匹配的类型提供映射器?

0 投票
1 回答
94 浏览

ruby - Ruby Sorbet 哈希类型检查

我想了解为什么 Sorbet 不抱怨这个例子:例子

我已经声明foo接受 [String, String] 的哈希值,但我传递了 [Integer, Integer] 的哈希值。我以为冰糕会在这里抱怨...

有没有办法让它在这种情况下出错?

0 投票
1 回答
187 浏览

ruby-on-rails - 木薯粉没有为 Rails 模型生成正确的 RBI 文件

我正在将生成 RBI 文件的方式从 Sorbet 迁移到 Tapioca。但是,我在我的 Rails 模型的许多 RBI 文件中遇到了一个反复出现的问题。尝试为关系生成签名时,RBI 文件似乎出错了has_many

(注意 - 它是 RBI 文件本身而不是生成警告的模型)

在文件中, has_many 关联user.rbi的签名是:user.plans

当我运行时,srb tc 我看到以下错误:

0 投票
1 回答
83 浏览

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 initbundle exec srb rbi hidden-definitions失败的位置与第一次运行略有不同,并生成略有不同的 sorbet 文件。第二次运行失败,Yard::Tags而不是YARD::Server::Commandsbundle 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文件加载的内容。