sorbet - 如何在不降级印记的情况下使用 `srb rbiSuggest-typed`?
问题描述
Ruby 的 Sorbet 类型检查器有一个实用程序 ,srb rbi suggest-typed
它将自动更新# typed:
每个文件上的符号。然而,正如 Sorbet 文档所解释的那样,“目前,建议过程是错误的,并且可能会在没有必要时建议降级。” 我有一个 Sorbet 类型的代码库,我想尝试升级它的类型(以“棘轮”任何已完全键入而没有更改其印记的文件),但因为它是一个非常大的代码库,我不想必须手动审核每个更改的文件。有没有办法让 Sorbet 仅在升级时才对印记应用更改?
解决方案
似乎没有任何方法可以让 Sorbet 自己做到这一点。相反,作为一种解决方法,这里有一些说明,使用 Git 仅提交升级印记的更改,并丢弃任何降级的更改。
- 从一个干净的工作目录开始(确保
git status
不显示任何更改的文件)。 - 运行
srb rbi suggest-typed
。这将改变很多印记,包括升级和降级。 - 对已进行的不同类型的更改进行总结:
git diff --word-diff -U0 | grep '# typed: ' | sort | uniq -c
36 # typed: [-false-]{+ignore+} 8 # typed: [-false-]{+strict+} 27 # typed: [-false-]{+true+} 36 # typed: [-strict-]{+false+} 150 # typed: [-true-]{+strict+} 80 {+# typed: false+}
- 用于
grepdiff
查找您不想要的每个更改,并将结果传递git checkout
给以删除这些更改(根据需要修改以下命令以进行更改):git diff | grepdiff --output-matching=hunk --only-match=rem 'typed: false' | grepdiff --only-match=add 'typed: ignore' --strip=1 | xargs git checkout -- git diff | grepdiff --output-matching=hunk --only-match=rem 'typed: strict' | grepdiff --only-match=add 'typed: false' --strip=1 | xargs git checkout -- git diff | grepdiff --only-match=add 'typed: false' --strip=1 | xargs git checkout --
- 重新运行步骤 3 中的摘要命令,以确保结果仅包含您想要的内容。
- 犯罪。
推荐阅读
- javascript - reactjs - 在 chrome 中检查该元素时元素消失并再次出现
- javascript - 如何从路径连接多个div?
- json - 从 nvarchar 返回 JSON 对象
- python - 子图散点图例的解决方案
- java - Jackson:自定义反序列化器:无法使用数组反序列化 XML
- laravel - Laravel VueJS - 如何正确处理 api 令牌和刷新令牌?
- migration - 当我尝试将 CRM 2013SP1 更新到 CRM 2015 时出现错误
- javascript - Javascript 使用 if else 来确定数组值
- mysql - 如何从 mysql 的 sql_mode 中删除 NO_ZERO_DATE?
- ios - 将emoji unicode转换为十六进制代码点