about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEdward Wang <edward.yu.wang@gmail.com>2014-04-24 05:19:23 +0800
committerEdward Wang <edward.yu.wang@gmail.com>2014-04-24 06:16:46 +0800
commit899f22238669bade874f29f784cdffba28ff0982 (patch)
treedec876a0dd6a32f30d555388c592cf8a579b0390 /src/test
parentb5dd3f05fe95168b5569d0f519636149479eb6ac (diff)
downloadrust-899f22238669bade874f29f784cdffba28ff0982.tar.gz
rust-899f22238669bade874f29f784cdffba28ff0982.zip
Calibrate span for method call error messages
Specifically, the method parameter cardinality mismatch or missing
method error message span now gets method itself exactly. It was the
whole expression.

Closes #9390
Closes #13684
Closes #13709
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/method-call-err-msg.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/test/compile-fail/method-call-err-msg.rs b/src/test/compile-fail/method-call-err-msg.rs
new file mode 100644
index 00000000000..3610a0e2e9d
--- /dev/null
+++ b/src/test/compile-fail/method-call-err-msg.rs
@@ -0,0 +1,30 @@
+// Copyright 2012-2014 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Test that parameter cardinality or missing method error gets span exactly.
+
+pub struct Foo;
+impl Foo {
+    fn zero(self) -> Foo { self }
+    fn one(self, _: int) -> Foo { self }
+    fn two(self, _: int, _: int) -> Foo { self }
+}
+
+fn main() {
+    let x = Foo;
+    x.zero(0)   //~ ERROR this function takes 0 parameters but 1 parameter was supplied
+     .one()     //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+     .two(0);   //~ ERROR this function takes 2 parameters but 1 parameter was supplied
+
+    let y = Foo;
+    y.zero()
+     .take()    //~ ERROR type `Foo` does not implement any method in scope named `take`
+     .one(0);
+}