鉴于:
for foo, bar in [(1, 2), (3, 4)] {}
rustc 产生:
error: missing `in` in `for` loop
--> src/main.rs:44:12
|
44 | for foo, bar in [(1, 2)] {}
| ^ help: try adding `in` here
error: expected expression, found `,`
--> src/main.rs:44:12
|
44 | for foo, bar in [(1, 2)] {}
| ^
…但如果它发现用户可能想要for (foo, bar) in ...
并给出更具体的错误消息,那就更好了。
这可能是来自 Python 的一个比较常见的错误,它对for
循环具有类似的语法,但允许省略括号。
如果这是受 Python 启发的东西,那么理想情况下这些诊断/恢复也应该适用于let
。
let a, b = (10, 11);
=>
let (a, b) = (10, 11);
我怀疑我们甚至可以在所有表达式和模式上下文中将这种恢复实现为“自动元组”。
illegal a, b, c
=>
(a, b, c)
:+1: 不仅仅是 Python,这对 Go 用户也有帮助。
for k, v := range myMap {
x, err = /* ... */
}
(我在这方面取得了一些进展;公关即将推出)
最有用的评论
如果这是受 Python 启发的东西,那么理想情况下这些诊断/恢复也应该适用于
let
。我怀疑我们甚至可以在所有表达式和模式上下文中将这种恢复实现为“自动元组”。