Skip to content

Commit

Permalink
Improve rustdoc search type filtering.
Browse files Browse the repository at this point in the history
  • Loading branch information
Eljay committed Aug 4, 2015
1 parent 4b79add commit acf9d67
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
4 changes: 2 additions & 2 deletions src/librustdoc/html/layout.rs
Expand Up @@ -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>
Expand Down
34 changes: 27 additions & 7 deletions src/librustdoc/html/static/main.js
Expand Up @@ -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) === "'") &&
Expand All @@ -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});
}
}
Expand Down Expand Up @@ -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),
Expand All @@ -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,
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit acf9d67

Please sign in to comment.