Rust: Melhorar a mensagem de erro para parênteses ausentes na desestruturação da tupla no loop for

Criado em 24 fev. 2018  ·  3Comentários  ·  Fonte: rust-lang/rust

Dado:

    for foo, bar in [(1, 2), (3, 4)] {}

rustc produz:

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)] {}
   |            ^

… Mas seria melhor se descobrisse que o usuário provavelmente pretendia for (foo, bar) in ... e fornecesse uma mensagem de erro mais específica.

Este é provavelmente um erro comum vindo do Python, que tem sintaxe semelhante para for loops, mas permite omitir os parênteses.

A-diagnostics

Comentários muito úteis

Se for algo inspirado em Python, o ideal é que esses diagnósticos / recuperação se apliquem a let também.

let a, b = (10, 11);

=>

let (a, b) = (10, 11);

Suspeito que podemos até implementar essa recuperação como "tuplagem automática" em todos os contextos de expressão e padrão.

illegal a, b, c

=>

(a, b, c)

Todos 3 comentários

Se for algo inspirado em Python, o ideal é que esses diagnósticos / recuperação se apliquem a let também.

let a, b = (10, 11);

=>

let (a, b) = (10, 11);

Suspeito que podemos até implementar essa recuperação como "tuplagem automática" em todos os contextos de expressão e padrão.

illegal a, b, c

=>

(a, b, c)

: +1: Não apenas Python, isso será útil para usuários Go também.

for k, v := range myMap {
    x, err = /* ... */
}

(Fiz algum progresso nisso; PR em breve)

Esta página foi útil?
0 / 5 - 0 avaliações