diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 6d80145b29c7c..8569abeb09cc1 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -993,7 +993,7 @@
Math.min(results_returned[fullId].lev, returned);
}
if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
- if (index !== -1) {
+ if (index !== -1 && paths.length < 2) {
lev = 0;
}
if (results[fullId] === undefined) {
diff --git a/src/test/rustdoc-js/pinbox-new.js b/src/test/rustdoc-js/pinbox-new.js
new file mode 100644
index 0000000000000..061c7b30741d9
--- /dev/null
+++ b/src/test/rustdoc-js/pinbox-new.js
@@ -0,0 +1,20 @@
+// Copyright 2018 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.
+
+// exact-check
+
+const QUERY = 'pinbox::new';
+
+const EXPECTED = {
+ 'others': [
+ { 'path': 'std::boxed::PinBox', 'name': 'new' },
+ { 'path': 'alloc::boxed::PinBox', 'name': 'new' },
+ ],
+};
diff --git a/src/test/rustdoc-js/vec-new.js b/src/test/rustdoc-js/vec-new.js
new file mode 100644
index 0000000000000..702953e2e9dd1
--- /dev/null
+++ b/src/test/rustdoc-js/vec-new.js
@@ -0,0 +1,19 @@
+// Copyright 2018 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.
+
+const QUERY = 'Vec::new';
+
+const EXPECTED = {
+ 'others': [
+ { 'path': 'std::vec::Vec', 'name': 'new' },
+ { 'path': 'std::vec::Vec', 'name': 'ne' },
+ { 'path': 'std::boxed::PinBox', 'name': 'new' },
+ ],
+};
diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js
index 1c79443dedf35..25f7a2d1294c5 100644
--- a/src/tools/rustdoc-js/tester.js
+++ b/src/tools/rustdoc-js/tester.js
@@ -88,6 +88,7 @@ function loadContent(content) {
var m = new Module();
m._compile(content, "tmp.js");
m.exports.ignore_order = content.indexOf("\n// ignore-order\n") !== -1;
+ m.exports.exact_check = content.indexOf("\n// exact-check\n") !== -1;
return m.exports;
}
@@ -179,6 +180,7 @@ function main(argv) {
const expected = loadedFile.EXPECTED;
const query = loadedFile.QUERY;
const ignore_order = loadedFile.ignore_order;
+ const exact_check = loadedFile.exact_check;
var results = loaded.execSearch(loaded.getQuery(query), index);
process.stdout.write('Checking "' + file + '" ... ');
var error_text = [];
@@ -191,13 +193,17 @@ function main(argv) {
break;
}
var entry = expected[key];
- var prev_pos = 0;
+ var prev_pos = -1;
for (var i = 0; i < entry.length; ++i) {
var entry_pos = lookForEntry(entry[i], results[key]);
if (entry_pos === null) {
error_text.push("==> Result not found in '" + key + "': '" +
JSON.stringify(entry[i]) + "'");
- } else if (entry_pos < prev_pos && ignore_order === false) {
+ } else if (exact_check === true && prev_pos + 1 !== entry_pos) {
+ error_text.push("==> Exact check failed at position " + (prev_pos + 1) + ": " +
+ "expected '" + JSON.stringify(entry[i]) + "' but found '" +
+ JSON.stringify(results[key][i]) + "'");
+ } else if (ignore_order === false && entry_pos < prev_pos) {
error_text.push("==> '" + JSON.stringify(entry[i]) + "' was supposed to be " +
" before '" + JSON.stringify(results[key][entry_pos]) + "'");
} else {