Skip to content

Commit ab5346d

Browse files
committed
librustc: Limit the typo suggestions to reasonable suggests.
Impose a limit so that the typo suggester only shows reasonable suggestions (i.e. don't suggest `args` when the error is `foobar`).
1 parent 2888563 commit ab5346d

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/librustc/middle/resolve.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -4667,7 +4667,7 @@ pub impl Resolver {
46674667
}
46684668
}
46694669
4670-
fn find_best_match_for_name(@mut self, name: &str) -> Option<~str> {
4670+
fn find_best_match_for_name(@mut self, name: &str, max_distance: uint) -> Option<~str> {
46714671
let this = &mut *self;
46724672
46734673
let mut maybes: ~[~str] = ~[];
@@ -4695,6 +4695,7 @@ pub impl Resolver {
46954695
if vec::len(values) > 0 &&
46964696
values[smallest] != uint::max_value &&
46974697
values[smallest] < str::len(name) + 2 &&
4698+
values[smallest] <= max_distance &&
46984699
maybes[smallest] != name.to_owned() {
46994700
47004701
Some(vec::swap_remove(&mut maybes, smallest))
@@ -4771,8 +4772,9 @@ pub impl Resolver {
47714772
wrong_name));
47724773
}
47734774
else {
4774-
match self.find_best_match_for_name(wrong_name) {
4775-
4775+
// limit search to 5 to reduce the number
4776+
// of stupid suggestions
4777+
match self.find_best_match_for_name(wrong_name, 5) {
47764778
Some(m) => {
47774779
self.session.span_err(expr.span,
47784780
fmt!("unresolved name: `%s`. \
@@ -5293,4 +5295,3 @@ pub fn resolve_crate(session: Session,
52935295
trait_map: trait_map
52945296
}
52955297
}
5296-
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2012 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+
// error-pattern: unresolved name: `foobar`.
12+
13+
fn main(args: ~[str]) { debug!(foobar); }

0 commit comments

Comments
 (0)