Skip to content

Commit d40197c

Browse files
committed
in which .. is suggested for erroneous ... in struct field patterns
Resolves #46718.
1 parent b3392f8 commit d40197c

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/libsyntax/parse/parser.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,9 @@ impl<'a> Parser<'a> {
12121212
pub fn span_err(&self, sp: Span, m: &str) {
12131213
self.sess.span_diagnostic.span_err(sp, m)
12141214
}
1215+
pub fn struct_span_err(&self, sp: Span, m: &str) -> DiagnosticBuilder<'a> {
1216+
self.sess.span_diagnostic.struct_span_err(sp, m)
1217+
}
12151218
pub fn span_err_help(&self, sp: Span, m: &str, h: &str) {
12161219
let mut err = self.sess.span_diagnostic.mut_span_err(sp, m);
12171220
err.help(h);
@@ -3445,7 +3448,16 @@ impl<'a> Parser<'a> {
34453448
let lo = self.span;
34463449
let hi;
34473450

3448-
if self.check(&token::DotDot) {
3451+
if self.check(&token::DotDot) || self.token == token::DotDotDot {
3452+
if self.token == token::DotDotDot { // Issue #46718
3453+
let mut err = self.struct_span_err(self.span,
3454+
"expected field pattern, found `...`");
3455+
err.span_suggestion(self.span,
3456+
"to omit remaining fields, use one fewer `.`",
3457+
"..".to_owned());
3458+
err.emit();
3459+
}
3460+
34493461
self.bump();
34503462
if self.token != token::CloseDelim(token::Brace) {
34513463
let token_str = self.this_token_to_string();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![allow(unused)]
12+
13+
struct PersonalityInventory {
14+
expressivity: f32,
15+
instrumentality: f32
16+
}
17+
18+
impl PersonalityInventory {
19+
fn expressivity(&self) -> f32 {
20+
match *self {
21+
PersonalityInventory { expressivity: exp, ... } => exp
22+
//~^ ERROR expected field pattern, found `...`
23+
}
24+
}
25+
}
26+
27+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: expected field pattern, found `...`
2+
--> $DIR/issue-46718-struct-pattern-dotdotdot.rs:21:55
3+
|
4+
21 | PersonalityInventory { expressivity: exp, ... } => exp
5+
| ^^^ help: to omit remaining fields, use one fewer `.`: `..`
6+
7+
error: aborting due to previous error
8+

0 commit comments

Comments
 (0)