From 38abca8c2d7de08861cd61bc439efdb7cf4de398 Mon Sep 17 00:00:00 2001 From: Esteban Küber Date: Sun, 22 Jul 2018 22:40:24 -0700 Subject: Point at internal span in format string --- src/test/compile-fail/ifmt-bad-arg.rs | 67 -------- src/test/ui/ifmt-bad-arg.rs | 67 ++++++++ src/test/ui/ifmt-bad-arg.stderr | 187 ++++++++++++++++++++++ src/test/ui/macros/macro-backtrace-println.stderr | 4 +- 4 files changed, 256 insertions(+), 69 deletions(-) delete mode 100644 src/test/compile-fail/ifmt-bad-arg.rs create mode 100644 src/test/ui/ifmt-bad-arg.rs create mode 100644 src/test/ui/ifmt-bad-arg.stderr (limited to 'src/test') diff --git a/src/test/compile-fail/ifmt-bad-arg.rs b/src/test/compile-fail/ifmt-bad-arg.rs deleted file mode 100644 index afe9bc152a3..00000000000 --- a/src/test/compile-fail/ifmt-bad-arg.rs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2013 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -fn main() { - // bad arguments to the format! call - - // bad number of arguments, see #44954 (originally #15780) - - format!("{}"); - //~^ ERROR: 1 positional argument in format string, but no arguments were given - - format!("{1}", 1); - //~^ ERROR: invalid reference to positional argument 1 (there is 1 argument) - //~^^ ERROR: argument never used - - format!("{} {}"); - //~^ ERROR: 2 positional arguments in format string, but no arguments were given - - format!("{0} {1}", 1); - //~^ ERROR: invalid reference to positional argument 1 (there is 1 argument) - - format!("{0} {1} {2}", 1, 2); - //~^ ERROR: invalid reference to positional argument 2 (there are 2 arguments) - - format!("{} {value} {} {}", 1, value=2); - //~^ ERROR: invalid reference to positional argument 2 (there are 2 arguments) - format!("{name} {value} {} {} {} {} {} {}", 0, name=1, value=2); - //~^ ERROR: invalid reference to positional arguments 3, 4 and 5 (there are 3 arguments) - - format!("{} {foo} {} {bar} {}", 1, 2, 3); - //~^ ERROR: there is no argument named `foo` - //~^^ ERROR: there is no argument named `bar` - - format!("{foo}"); //~ ERROR: no argument named `foo` - format!("", 1, 2); //~ ERROR: multiple unused formatting arguments - format!("{}", 1, 2); //~ ERROR: argument never used - format!("{1}", 1, 2); //~ ERROR: argument never used - format!("{}", 1, foo=2); //~ ERROR: named argument never used - format!("{foo}", 1, foo=2); //~ ERROR: argument never used - format!("", foo=2); //~ ERROR: named argument never used - format!("{} {}", 1, 2, foo=1, bar=2); //~ ERROR: multiple unused formatting arguments - - format!("{foo}", foo=1, foo=2); //~ ERROR: duplicate argument - format!("", foo=1, 2); //~ ERROR: positional arguments cannot follow - - // bad named arguments, #35082 - - format!("{valuea} {valueb}", valuea=5, valuec=7); - //~^ ERROR there is no argument named `valueb` - //~^^ ERROR named argument never used - - // bad syntax of the format string - - format!("{"); //~ ERROR: expected `'}'` but string was terminated - - format!("foo } bar"); //~ ERROR: unmatched `}` found - format!("foo }"); //~ ERROR: unmatched `}` found - - format!("foo %s baz", "bar"); //~ ERROR: argument never used -} diff --git a/src/test/ui/ifmt-bad-arg.rs b/src/test/ui/ifmt-bad-arg.rs new file mode 100644 index 00000000000..afe9bc152a3 --- /dev/null +++ b/src/test/ui/ifmt-bad-arg.rs @@ -0,0 +1,67 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + // bad arguments to the format! call + + // bad number of arguments, see #44954 (originally #15780) + + format!("{}"); + //~^ ERROR: 1 positional argument in format string, but no arguments were given + + format!("{1}", 1); + //~^ ERROR: invalid reference to positional argument 1 (there is 1 argument) + //~^^ ERROR: argument never used + + format!("{} {}"); + //~^ ERROR: 2 positional arguments in format string, but no arguments were given + + format!("{0} {1}", 1); + //~^ ERROR: invalid reference to positional argument 1 (there is 1 argument) + + format!("{0} {1} {2}", 1, 2); + //~^ ERROR: invalid reference to positional argument 2 (there are 2 arguments) + + format!("{} {value} {} {}", 1, value=2); + //~^ ERROR: invalid reference to positional argument 2 (there are 2 arguments) + format!("{name} {value} {} {} {} {} {} {}", 0, name=1, value=2); + //~^ ERROR: invalid reference to positional arguments 3, 4 and 5 (there are 3 arguments) + + format!("{} {foo} {} {bar} {}", 1, 2, 3); + //~^ ERROR: there is no argument named `foo` + //~^^ ERROR: there is no argument named `bar` + + format!("{foo}"); //~ ERROR: no argument named `foo` + format!("", 1, 2); //~ ERROR: multiple unused formatting arguments + format!("{}", 1, 2); //~ ERROR: argument never used + format!("{1}", 1, 2); //~ ERROR: argument never used + format!("{}", 1, foo=2); //~ ERROR: named argument never used + format!("{foo}", 1, foo=2); //~ ERROR: argument never used + format!("", foo=2); //~ ERROR: named argument never used + format!("{} {}", 1, 2, foo=1, bar=2); //~ ERROR: multiple unused formatting arguments + + format!("{foo}", foo=1, foo=2); //~ ERROR: duplicate argument + format!("", foo=1, 2); //~ ERROR: positional arguments cannot follow + + // bad named arguments, #35082 + + format!("{valuea} {valueb}", valuea=5, valuec=7); + //~^ ERROR there is no argument named `valueb` + //~^^ ERROR named argument never used + + // bad syntax of the format string + + format!("{"); //~ ERROR: expected `'}'` but string was terminated + + format!("foo } bar"); //~ ERROR: unmatched `}` found + format!("foo }"); //~ ERROR: unmatched `}` found + + format!("foo %s baz", "bar"); //~ ERROR: argument never used +} diff --git a/src/test/ui/ifmt-bad-arg.stderr b/src/test/ui/ifmt-bad-arg.stderr new file mode 100644 index 00000000000..4ad3c2b6550 --- /dev/null +++ b/src/test/ui/ifmt-bad-arg.stderr @@ -0,0 +1,187 @@ +error: 1 positional argument in format string, but no arguments were given + --> $DIR/ifmt-bad-arg.rs:16:14 + | +LL | format!("{}"); + | ^^ + +error: invalid reference to positional argument 1 (there is 1 argument) + --> $DIR/ifmt-bad-arg.rs:19:14 + | +LL | format!("{1}", 1); + | ^^^ + | + = note: positional arguments are zero-based + +error: argument never used + --> $DIR/ifmt-bad-arg.rs:19:20 + | +LL | format!("{1}", 1); + | ^ + +error: 2 positional arguments in format string, but no arguments were given + --> $DIR/ifmt-bad-arg.rs:23:14 + | +LL | format!("{} {}"); + | ^^ ^^ + +error: invalid reference to positional argument 1 (there is 1 argument) + --> $DIR/ifmt-bad-arg.rs:26:14 + | +LL | format!("{0} {1}", 1); + | ^^^ ^^^ + | + = note: positional arguments are zero-based + +error: invalid reference to positional argument 2 (there are 2 arguments) + --> $DIR/ifmt-bad-arg.rs:29:14 + | +LL | format!("{0} {1} {2}", 1, 2); + | ^^^ ^^^ ^^^ + | + = note: positional arguments are zero-based + +error: invalid reference to positional argument 2 (there are 2 arguments) + --> $DIR/ifmt-bad-arg.rs:32:14 + | +LL | format!("{} {value} {} {}", 1, value=2); + | ^^ ^^^^^^^ ^^ ^^ + | + = note: positional arguments are zero-based + +error: invalid reference to positional arguments 3, 4 and 5 (there are 3 arguments) + --> $DIR/ifmt-bad-arg.rs:34:14 + | +LL | format!("{name} {value} {} {} {} {} {} {}", 0, name=1, value=2); + | ^^^^^^ ^^^^^^^ ^^ ^^ ^^ ^^ ^^ ^^ + | + = note: positional arguments are zero-based + +error: there is no argument named `foo` + --> $DIR/ifmt-bad-arg.rs:37:13 + | +LL | format!("{} {foo} {} {bar} {}", 1, 2, 3); + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: there is no argument named `bar` + --> $DIR/ifmt-bad-arg.rs:37:13 + | +LL | format!("{} {foo} {} {bar} {}", 1, 2, 3); + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: there is no argument named `foo` + --> $DIR/ifmt-bad-arg.rs:41:13 + | +LL | format!("{foo}"); //~ ERROR: no argument named `foo` + | ^^^^^^^ + +error: multiple unused formatting arguments + --> $DIR/ifmt-bad-arg.rs:42:17 + | +LL | format!("", 1, 2); //~ ERROR: multiple unused formatting arguments + | -- ^ ^ + | | + | multiple missing formatting arguments + +error: argument never used + --> $DIR/ifmt-bad-arg.rs:43:22 + | +LL | format!("{}", 1, 2); //~ ERROR: argument never used + | ^ + +error: argument never used + --> $DIR/ifmt-bad-arg.rs:44:20 + | +LL | format!("{1}", 1, 2); //~ ERROR: argument never used + | ^ + +error: named argument never used + --> $DIR/ifmt-bad-arg.rs:45:26 + | +LL | format!("{}", 1, foo=2); //~ ERROR: named argument never used + | ^ + +error: argument never used + --> $DIR/ifmt-bad-arg.rs:46:22 + | +LL | format!("{foo}", 1, foo=2); //~ ERROR: argument never used + | ^ + +error: named argument never used + --> $DIR/ifmt-bad-arg.rs:47:21 + | +LL | format!("", foo=2); //~ ERROR: named argument never used + | ^ + +error: multiple unused formatting arguments + --> $DIR/ifmt-bad-arg.rs:48:32 + | +LL | format!("{} {}", 1, 2, foo=1, bar=2); //~ ERROR: multiple unused formatting arguments + | ------- ^ ^ + | | + | multiple missing formatting arguments + +error: duplicate argument named `foo` + --> $DIR/ifmt-bad-arg.rs:50:33 + | +LL | format!("{foo}", foo=1, foo=2); //~ ERROR: duplicate argument + | ^ + | +note: previously here + --> $DIR/ifmt-bad-arg.rs:50:26 + | +LL | format!("{foo}", foo=1, foo=2); //~ ERROR: duplicate argument + | ^ + +error: expected ident, positional arguments cannot follow named arguments + --> $DIR/ifmt-bad-arg.rs:51:24 + | +LL | format!("", foo=1, 2); //~ ERROR: positional arguments cannot follow + | ^ + +error: there is no argument named `valueb` + --> $DIR/ifmt-bad-arg.rs:55:13 + | +LL | format!("{valuea} {valueb}", valuea=5, valuec=7); + | ^^^^^^^^^^^^^^^^^^^ + +error: named argument never used + --> $DIR/ifmt-bad-arg.rs:55:51 + | +LL | format!("{valuea} {valueb}", valuea=5, valuec=7); + | ^ + +error: invalid format string: expected `'}'` but string was terminated + --> $DIR/ifmt-bad-arg.rs:61:15 + | +LL | format!("{"); //~ ERROR: expected `'}'` but string was terminated + | ^ expected `'}'` in format string + | + = note: if you intended to print `{`, you can escape it using `{{` + +error: invalid format string: unmatched `}` found + --> $DIR/ifmt-bad-arg.rs:63:18 + | +LL | format!("foo } bar"); //~ ERROR: unmatched `}` found + | ^ unmatched `}` in format string + | + = note: if you intended to print `}`, you can escape it using `}}` + +error: invalid format string: unmatched `}` found + --> $DIR/ifmt-bad-arg.rs:64:18 + | +LL | format!("foo }"); //~ ERROR: unmatched `}` found + | ^ unmatched `}` in format string + | + = note: if you intended to print `}`, you can escape it using `}}` + +error: argument never used + --> $DIR/ifmt-bad-arg.rs:66:27 + | +LL | format!("foo %s baz", "bar"); //~ ERROR: argument never used + | ^^^^^ + | + = help: `%s` should be written as `{}` + = note: printf formatting not supported; see the documentation for `std::fmt` + +error: aborting due to 26 previous errors + diff --git a/src/test/ui/macros/macro-backtrace-println.stderr b/src/test/ui/macros/macro-backtrace-println.stderr index 8f2eb0173a4..f0ca576f652 100644 --- a/src/test/ui/macros/macro-backtrace-println.stderr +++ b/src/test/ui/macros/macro-backtrace-println.stderr @@ -1,8 +1,8 @@ error: 1 positional argument in format string, but no arguments were given - --> $DIR/macro-backtrace-println.rs:24:30 + --> $DIR/macro-backtrace-println.rs:24:31 | LL | ($fmt:expr) => (myprint!(concat!($fmt, "/n"))); //~ ERROR no arguments were given - | ^^^^^^^^^^^^^^^^^^^ + | ^^ ... LL | myprintln!("{}"); | ----------------- in this macro invocation -- cgit 1.4.1-3-g733a5