about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEljay <lee@leejeffery.co.uk>2015-08-04 16:40:23 +0100
committerEljay <lee@leejeffery.co.uk>2015-08-04 16:40:23 +0100
commitacf9d6768e93bbffce7e57de647042af7d40b33d (patch)
tree0c34158649a73ab174b7b87c023bd7ef7b9b0ce1
parent4b79add08653d89f08e5a5c94c2132515a1aa30f (diff)
downloadrust-acf9d6768e93bbffce7e57de647042af7d40b33d.tar.gz
rust-acf9d6768e93bbffce7e57de647042af7d40b33d.zip
Improve rustdoc search type filtering.
-rw-r--r--src/librustdoc/html/layout.rs4
-rw-r--r--src/librustdoc/html/static/main.js34
2 files changed, 29 insertions, 9 deletions
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index 18f8ce3385f..51dc8c6e477 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -113,8 +113,8 @@ r##"<!DOCTYPE html>
                 <p>
                     Accepted types are: <code>fn</code>, <code>mod</code>,
                     <code>struct</code>, <code>enum</code>,
-                    <code>trait</code>, <code>typedef</code> (or
-                    <code>tdef</code>).
+                    <code>trait</code>, <code>type</code>, <code>macro</code>,
+                    and <code>const</code>.
                 </p>
 
                 <p>
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 1d2cc38b4fc..f1351893915 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -230,6 +230,28 @@
                 }
             }
 
+            function typePassesFilter(filter, type) {
+                // No filter
+                if (filter < 0) return true;
+
+                // Exact match
+                if (filter === type) return true;
+
+                // Match related items
+                var name = itemTypes[type];
+                switch (itemTypes[filter]) {
+                    case "constant":
+                        return (name == "associatedconstant");
+                    case "fn":
+                        return (name == "method" || name == "tymethod");
+                    case "type":
+                        return (name == "primitive");
+                }
+
+                // No match
+                return false;
+            }
+
             // quoted values mean literal search
             var nSearchWords = searchWords.length;
             if ((val.charAt(0) === "\"" || val.charAt(0) === "'") &&
@@ -239,7 +261,7 @@
                 for (var i = 0; i < nSearchWords; ++i) {
                     if (searchWords[i] === val) {
                         // filter type: ... queries
-                        if (typeFilter < 0 || typeFilter === searchIndex[i].ty) {
+                        if (typePassesFilter(typeFilter, searchIndex[i].ty)) {
                             results.push({id: i, index: -1});
                         }
                     }
@@ -285,7 +307,7 @@
                             searchWords[j].replace(/_/g, "").indexOf(val) > -1)
                         {
                             // filter type: ... queries
-                            if (typeFilter < 0 || typeFilter === searchIndex[j].ty) {
+                            if (typePassesFilter(typeFilter, searchIndex[j].ty)) {
                                 results.push({
                                     id: j,
                                     index: searchWords[j].replace(/_/g, "").indexOf(val),
@@ -295,7 +317,7 @@
                         } else if (
                             (lev_distance = levenshtein(searchWords[j], val)) <=
                                 MAX_LEV_DISTANCE) {
-                            if (typeFilter < 0 || typeFilter === searchIndex[j].ty) {
+                            if (typePassesFilter(typeFilter, searchIndex[j].ty)) {
                                 results.push({
                                     id: j,
                                     index: 0,
@@ -451,11 +473,9 @@
             var matches, type, query, raw = $('.search-input').val();
             query = raw;
 
-            matches = query.match(/^(fn|mod|struct|enum|trait|t(ype)?d(ef)?)\s*:\s*/i);
+            matches = query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);
             if (matches) {
-                type = matches[1].replace(/^td$/, 'typedef')
-                                 .replace(/^tdef$/, 'typedef')
-                                 .replace(/^typed$/, 'typedef');
+                type = matches[1].replace(/^const$/, 'constant');
                 query = query.substring(matches[0].length);
             }