diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 337c973a2c84f..0a73d32dac2de 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -3904,6 +3904,8 @@ class DocSearch {
return name === "primitive" || name === "associatedtype";
case "trait":
return name === "traitalias";
+ case "macro":
+ return name === "attr" || name === "derive";
}
// No match
diff --git a/tests/rustdoc-js-std/filter-macro-attr-derive.js b/tests/rustdoc-js-std/filter-macro-attr-derive.js
new file mode 100644
index 0000000000000..4c8ec77030b42
--- /dev/null
+++ b/tests/rustdoc-js-std/filter-macro-attr-derive.js
@@ -0,0 +1,9 @@
+// This test ensures that filtering on "macro" will also include attribute and derive
+// macros.
+
+const EXPECTED = {
+ 'query': 'macro:debug',
+ 'others': [
+ { 'path': 'std::fmt', 'name': 'Debug', 'href': '../std/fmt/derive.Debug.html' },
+ ],
+};