问题标签 [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.
sorbet - T::Struct 出现“尝试重新定义道具”错误
我正在尝试使用 T::Struct 来避免类中的一些样板:
srb tc
不报告任何错误,但是当我运行测试时它失败了:
如果我重新订购道具,我会得到同样的错误,但description
相反。
是不是因为我使用了一个结构,但也在上面定义了方法?我知道 RubyStruct
支持这一点,但我不确定 Sorbet 的T::Struct
.
sorbet - 处理“sorbet-typed”和“gems”RBI 文件之间的冲突
我已经在 Rails 代码库中安装了 Sorbet,并且看到许多出现以下错误的实例:
为了使类型错误消失,我要么必须更改typed: true
为typed: false
其中一个文件(其中不包括一些不重叠的类型),要么我必须手动进入并删除/注释掉重叠的方法(其中耗时且易碎)。
我想知道是否有某种编程解决方案,我可以说“在发生冲突的情况下,使用具有更高数量的方法”或“始终选择冰糕类型的定义”。
同样,这是在 Rails 代码库中,但我想这将存在于手动生成和自动生成的 RBI 之间的任何冲突。
sorbet - 使用 bundler 和 dependabot 生成 Sorbet RBI 文件
我正在尝试将 Sorbet 添加到由 20 位工程师维护的 Rails 代码库中。我们使用dependabot 非常频繁地更新gem,我宁愿不必srb rbi update
在每个版本bump 上手动运行。有没有办法在srb rbi update
每次运行时自动运行bundle install
,并且只更新已更改的 gem(所以不需要 5 分钟)?
ruby - Sorbet 没有报告缺少的方法实现(与 RBI 签名相比),我在这里做错了吗?
我有一个文件my_class.rb
:
安装和初始化 Sorbet后,我决定为这个文件写一个 RBI 签名sorbet/rbi/my_class.rbi
:
我特意为一种adjust
方法添加了一个签名,以查看 Sorbet 是否会报告它。但是 Sorbet 没有报告任何错误。
我在这里配置冰糕级别是错误的,还是做错了什么?
谢谢你。
ruby - 如何在使用冰糕的项目中包含 Enumerable?
如果我定义一个可枚举的类
这种类型检查srb tc
得很好,但如果我尝试运行srb rbi update
,我会得到一个错误。检查reflection.json.err
将声明更改Elem
为(即如何在Enumerable
rbi中定义)
现在srb tc
给了我错误
将Elem
声明更改为
现在srb tc
给了我错误
如何Enumerable
使用 sorbet 在项目中实现一个类,以便它在运行时进行类型检查并且不会出错srb rbi update
?
sorbet - 冰糕的初始错误和设置问题
我正在将 Sorbet 添加到一个相当普通的中小型 Rails 应用程序中。
运行安装脚本srb init
后,我得到了这个错误确认:
我选择了“Y”。脚本随后停顿了一会儿,报告说尝试了 100 次后不成功,但随后又继续说“完成”。我不清楚这是否意味着它正在工作。
但是,当我运行时bundle exec srb tc
,会出现很多问题:
它似乎没有添加任何印记,我认为它会
它似乎报告了核心类中的问题:
- 它似乎在报告我无法控制的 gems 中的问题,比如 activerecord:
我必须手动忽略这些项目吗?我开始这样做,但我认为这也不正确。总的来说,我不确定设置是否有效,或者我收到的初始错误是否是问题所在。
版本信息:
谢谢
sorbet - 如何在带有 sigs 的 gem 中包含类型?
假设我有一个名为的共享 gem thing
,它可以在多个其他项目中使用,例如example-project
. 我想在我的thing
gem 中使用冰糕来利用类型检查。如何让我的消费项目检查我的 gem 中的类型?
例如,代码可能如下所示
东西宝石
示例项目
怎么了
运行后srb rbi update
,我得到一个sorbet/rbi/gems/thing.rbi
这没有我期望的 gem 的信号,srb tc
也不会引发我期望的错误。
我尝试过的其他事情
包括rbi/thing.rbi
在宝石中
这行得通,但我宁愿在 gem 代码中内联写我的 sig,而不是维护单独的 rbi 文件。是否有任何工具可以获取.rb
带有 sigs 的文件并输出.rbi
文件(并且可能从.rb
文件中剥离 sigs,以便它们可以在没有冰糕的情况下分发 gem)。我正在考虑一个类似于 typescript 的工作流程tsc --declaration
,它来自.ts => .d.ts + .js
.
sorbet - ActiveModelSerializer 和 VOID 类型响应
解决了!
孩子们,不要定义read_attribute_for_serialization
返回void
所以我正在尝试将冰糕集成到我的一个 Rails 应用程序中。我已经在 Gemfile 中添加了冰糕
一切看起来都不错,我能够在Price
类中添加 sigs 并解决应用程序内的类型检查问题。
我遇到的问题是序列化程序的返回值
所以序列化器看起来大致是这样的
在规范中,当我想验证关联 ( has_one
) 属性的返回值时,我得到了这个
价格序列化器看起来大致是这样的
我不明白这里到底发生了什么以及为什么发生。提前致谢
编辑:在帖子顶部添加了“解决方案”
ruby-on-rails - 如何为 Ruby 中新添加的模型生成 sorbet.rbi 文件?
我创建了一个新模型 Attachment.rb 并运行
srb tc
但是冰糕抛出错误,因为附件模型不存在该方法https://srb.help/7003
我尝试运行srb rbi update但结果它重新运行了我的整个应用程序。
我已经搜索并阅读了所有文档,但我找不到任何关于如何仅为模型生成 RBI 文件的信息。提前致谢!
ruby - 配置 Sorbet 以将所有没有注释的文件视为输入:忽略注释
我的问题与这个有关1但我可以将类型注释添加到具有类型注释的文件中。我们只是不想在数百个文件上自动生成评论,尽管文件中没有发生任何其他事情。有没有办法配置 Sorbet 像这样工作?