From 47a9ffa573aac587b7d045177a4f05bd649261e3 Mon Sep 17 00:00:00 2001
From: Guillaume Gomez
Date: Sat, 14 Apr 2018 17:01:28 +0200
Subject: [PATCH 1/3] Add multi-query search
---
src/librustdoc/html/static/main.js | 77 +++++++++++++++++++++++++++---
src/test/rustdoc-js/multi-query.js | 20 ++++++++
src/tools/rustdoc-js/tester.js | 5 +-
3 files changed, 93 insertions(+), 9 deletions(-)
create mode 100644 src/test/rustdoc-js/multi-query.js
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 3a3fa833c238b..2546a9410a9f6 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -1299,14 +1299,78 @@
printTab(currentTab);
}
+ function execSearch(query, searchWords) {
+ var queries = query.raw.split(",");
+ var results = {
+ 'in_args': [],
+ 'returned': [],
+ 'others': [],
+ };
+
+ for (var i = 0; i < queries.length; ++i) {
+ var query = queries[i].trim();
+ if (query.length !== 0) {
+ var tmp = execQuery(getQuery(query), searchWords);
+
+ results['in_args'].push(tmp['in_args']);
+ results['returned'].push(tmp['returned']);
+ results['others'].push(tmp['others']);
+ }
+ }
+ if (queries.length > 1) {
+ function getSmallest(arrays, positions) {
+ var start = null;
+
+ for (var it = 0; it < positions.length; ++it) {
+ if (arrays[it].length > positions[it] &&
+ (start === null || start > arrays[it][positions[it]].lev)) {
+ start = arrays[it][positions[it]].lev;
+ }
+ }
+ return start;
+ }
+
+ function mergeArrays(arrays) {
+ var ret = [];
+ var positions = [];
+
+ for (var x = 0; x < arrays.length; ++x) {
+ positions.push(0);
+ }
+ while (ret.length < MAX_RESULTS) {
+ var smallest = getSmallest(arrays, positions);
+ if (smallest === null) {
+ break;
+ }
+ for (x = 0; x < arrays.length && ret.length < MAX_RESULTS; ++x) {
+ if (arrays[x].length > positions[x] &&
+ arrays[x][positions[x]].lev === smallest) {
+ ret.push(arrays[x][positions[x]]);
+ positions[x] += 1;
+ }
+ }
+ }
+ return ret;
+ }
+
+ return {
+ 'in_args': mergeArrays(results['in_args']),
+ 'returned': mergeArrays(results['returned']),
+ 'others': mergeArrays(results['others']),
+ };
+ } else {
+ return {
+ 'in_args': results['in_args'][0],
+ 'returned': results['returned'][0],
+ 'others': results['others'][0],
+ };
+ }
+ }
+
function search(e) {
- var query,
- obj, i, len,
- results = {"in_args": [], "returned": [], "others": []},
- resultIndex;
var params = getQueryStringParams();
+ var query = getQuery(document.getElementsByClassName('search-input')[0].value);
- query = getQuery(document.getElementsByClassName('search-input')[0].value);
if (e) {
e.preventDefault();
}
@@ -1328,8 +1392,7 @@
}
}
- results = execQuery(query, index);
- showResults(results);
+ showResults(execSearch(query, index));
}
function buildIndex(rawSearchIndex) {
diff --git a/src/test/rustdoc-js/multi-query.js b/src/test/rustdoc-js/multi-query.js
new file mode 100644
index 0000000000000..3793ca6599c5f
--- /dev/null
+++ b/src/test/rustdoc-js/multi-query.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.
+
+const QUERY = 'str,u8';
+
+const EXPECTED = {
+ 'others': [
+ { 'path': 'std', 'name': 'str' },
+ { 'path': 'std', 'name': 'u8' },
+ { 'path': 'std::ffi', 'name': 'CStr' },
+ { 'path': 'std::simd', 'name': 'u8x2' },
+ ],
+};
diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js
index 7c9ee2a49430b..1e6c4336a9e99 100644
--- a/src/tools/rustdoc-js/tester.js
+++ b/src/tools/rustdoc-js/tester.js
@@ -157,7 +157,8 @@ function main(argv) {
// execQuery first parameter is built in getQuery (which takes in the search input).
// execQuery last parameter is built in buildIndex.
// buildIndex requires the hashmap from search-index.
- var functionsToLoad = ["levenshtein", "validateResult", "getQuery", "buildIndex", "execQuery"];
+ var functionsToLoad = ["levenshtein", "validateResult", "getQuery", "buildIndex", "execQuery",
+ "execSearch"];
finalJS += 'window = { "currentCrate": "std" };\n';
finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs);
@@ -174,7 +175,7 @@ function main(argv) {
'exports.QUERY = QUERY;exports.EXPECTED = EXPECTED;');
const expected = loadedFile.EXPECTED;
const query = loadedFile.QUERY;
- var results = loaded.execQuery(loaded.getQuery(query), index);
+ var results = loaded.execSearch(loaded.getQuery(query), index);
process.stdout.write('Checking "' + file + '" ... ');
var error_text = [];
for (var key in expected) {
From d08f8978e7b883cb01ec8f1118b5eeb3ebc94ab4 Mon Sep 17 00:00:00 2001
From: Guillaume Gomez
Date: Sat, 14 Apr 2018 17:13:46 +0200
Subject: [PATCH 2/3] Small size reduction
---
src/librustdoc/html/layout.rs | 228 ++++++++++++++++------------------
1 file changed, 106 insertions(+), 122 deletions(-)
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index aac5d0d2601de..88d28323e1ac5 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -37,128 +37,112 @@ pub fn render(
-> io::Result<()>
{
write!(dst,
-r##"
-
-
-
-
-
-
-
-
- {title}
-
-
-
- {themes}
-
-
-
- {css_extension}
-
- {favicon}
- {in_header}
-
-
-
-
- {before_content}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {after_content}
-
-
-
-
-
-"##,
+"\
+\
+\
+ \
+ \
+ \
+ \
+ \
+ {title}\
+ \
+ \
+ {themes}\
+ \
+ \
+ \
+ {css_extension}\
+ {favicon}\
+ {in_header}\
+\
+\
+ \
+ {before_content}\
+ \
+ \
+
\
+
\
+
\
+ \
+ \
+ \
+ \
+ \
+ \
+ {after_content}\
+ \
+ \
+ \
+\
+",
css_extension = if css_file_extension {
format!("",
root_path = page.root_path,
From c83c7c91f5eaeef349d356bfb3272d619ac54401 Mon Sep 17 00:00:00 2001
From: Guillaume Gomez
Date: Sat, 14 Apr 2018 17:20:36 +0200
Subject: [PATCH 3/3] Add doc
---
src/librustdoc/html/layout.rs | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs
index 88d28323e1ac5..583c9f2b67144 100644
--- a/src/librustdoc/html/layout.rs
+++ b/src/librustdoc/html/layout.rs
@@ -131,6 +131,10 @@ pub fn render(
Search functions by type signature (e.g. \
vec -> usize
or * -> vec
)\
\
+ \
+ Search multiple things at once by splitting your query with comma (e.g. \
+ str,u8
or String,struct:Vec,test
)\
+
\
\
\
\