diff --git a/src/librustdoc/html/static/search.js b/src/librustdoc/html/static/search.js
index 0aebb0e9d6588..f6343e4c3d246 100644
--- a/src/librustdoc/html/static/search.js
+++ b/src/librustdoc/html/static/search.js
@@ -801,7 +801,8 @@ window.initSearch = function(rawSearchIndex) {
results_returned[fullId].lev =
Math.min(results_returned[fullId].lev, returned);
}
- if (index !== -1 || lev <= MAX_LEV_DISTANCE) {
+ if (typePassesFilter(typeFilter, ty.ty) &&
+ (index !== -1 || lev <= MAX_LEV_DISTANCE)) {
if (index !== -1 && paths.length < 2) {
lev = 0;
}
diff --git a/src/test/rustdoc-js-std/typed-query.js b/src/test/rustdoc-js-std/typed-query.js
new file mode 100644
index 0000000000000..f656aa72986fd
--- /dev/null
+++ b/src/test/rustdoc-js-std/typed-query.js
@@ -0,0 +1,12 @@
+// exact-check
+
+const QUERY = 'macro:print';
+
+const EXPECTED = {
+ 'others': [
+ { 'path': 'std', 'name': 'print' },
+ { 'path': 'std', 'name': 'eprint' },
+ { 'path': 'std', 'name': 'println' },
+ { 'path': 'std', 'name': 'eprintln' },
+ ],
+};