Rust: Улучшение сообщения об ошибке для отсутствующих скобок в деструктуре кортежа в цикле for

Созданный на 24 февр. 2018  ·  3Комментарии  ·  Источник: rust-lang/rust

Данный:

    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 но позволяет опускать круглые скобки.

A-diagnostics

Самый полезный комментарий

Если это что-то вдохновленное Python, тогда эти диагностика / восстановление в идеале должны применяться и к let .

let a, b = (10, 11);

=>

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

Я подозреваю, что мы можем даже реализовать это восстановление как «автоматическое кортежирование» во всех контекстах выражений и шаблонов.

illegal a, b, c

=>

(a, b, c)

Все 3 Комментарий

Если это что-то вдохновленное 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 = /* ... */
}

(Я добился некоторого прогресса в этом; ожидается PR)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги