问题描述
我已经接管了一个部署过程,其中一部分运行 Cargo Clippy,直到上周晚些时候,当我开始收到此错误时,它一直运行良好:
我已阅读建议的链接 https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark 并理解?不再需要,并查看了它提供的建议更改。我只是想知道我是否可以按照建议进行更改,因为有些似乎删除了一些代码,所以我不确定结果是否相同。
一些建议的更改似乎很简单,也可以: 从这里
Ok(dsl::orgs
.filter(dsl::salesforce_id.eq(salesforce_id))
.get_result(conn)?)
为此:
dsl::orgs
.filter(dsl::salesforce_id.eq(salesforce_id))
.get_result(conn)
所以我猜测上述类型的更改可以安全接受吗?
然后我有这些
-
此处“可选”已在建议的修复中消失。来自:
Ok(dsl::orgs .filter( dsl::customer_id .eq(new_org.customer_id) .and(dsl::name.eq(&new_org.name)),) .get_result(conn) .optional()?)
到
dsl::orgs .filter( dsl::customer_id .eq(new_org.customer_id) .and(dsl::name.eq(&new_org.name)),)
-
还有这个,在建议的修复中内连接消失了:
Ok(orgs::dsl::orgs .filter(orgs::dsl::customer_id.eq(customer_id)) .filter(orgs::dsl::kind.eq(org_kind)) .filter( orgs::dsl::kind .eq(OrgKind::Production) .or(orgs::dsl::name.eq(&org_name)),) .inner_join(schema::customers::dsl::customers) .get_result(conn)?)
为此:
orgs::dsl::orgs .filter(orgs::dsl::customer_id.eq(customer_id)) .filter(orgs::dsl::kind.eq(org_kind)) .filter( orgs::dsl::kind .eq(OrgKind::Production)
这 2 个建议的修复可以实施吗?有人可以提供一些帮助吗?
解决方法
我已经接管了一个部署过程,其中一部分运行 Cargo Clippy,直到上周晚些时候它都运行良好,
lint 上周出现是因为 Rust 1.51 和 new accompanying Clippy version 于上周四发布,并添加了 needless_question_mark
。
当我开始收到此错误时:
您的 CI 可能不应该将所有 Clippy lint 都视为错误。 Clippy 旨在针对许多简单的代码样式改进或可能问题发出警告;将它们视为错误会导致将来不必要的损坏。
所以我猜测上述类型的更改可以安全接受吗?
Ok(some_expression?)
几乎与some_expression
相同。唯一的区别是带有 ?
的版本可能会将表达式的错误类型(E
中的 Result<T,E>
)隐式转换为函数预期的错误类型。如果错误类型相同,不需要转换,那么可以去掉Ok
和?
,得到相同的结果;如果错误类型不同,则简化版本将无法编译。
此处“可选”已在建议的修复中消失。
这似乎是 Clippy 或任何应用此修复程序的工具中的错误,因为生成的代码在语义上是不同的,甚至无法编译。在这种情况下,我会手动删除 Ok
和 ?
,并报告错误。