From cf9209f87274548f25e01621a712afcb036ede6e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 26 Apr 2018 00:36:00 +0200 Subject: [PATCH 1/9] Improve results --- src/librustdoc/html/static/main.js | 75 +++++++++++++++++--------- src/librustdoc/html/static/rustdoc.css | 4 ++ 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 8569abeb09cc1..ba92ac7bd306e 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -454,12 +454,16 @@ var obj = searchIndex[results[i].id]; obj.lev = results[i].lev; if (isType !== true || obj.type) { + var res = buildHrefAndPath(obj); + obj.displayPath = pathSplitter(res[0]); + obj.fullPath = obj.displayPath + obj.name; + obj.href = res[1]; out.push(obj); + if (out.length >= MAX_RESULTS) { + break; + } } } - if (out.length >= MAX_RESULTS) { - break; - } } return out; } @@ -1017,6 +1021,12 @@ ALIASES[window.currentCrate][query.raw]) { var aliases = ALIASES[window.currentCrate][query.raw]; for (var i = 0; i < aliases.length; ++i) { + aliases[i].is_alias = true; + aliases[i].alias = query.raw; + var res = buildHrefAndPath(aliases[i]); + aliases[i].displayPath = pathSplitter(res[0]); + aliases[i].fullPath = aliases[i].displayPath + aliases[i].name; + aliases[i].href = res[1]; ret['others'].unshift(aliases[i]); if (ret['others'].length > MAX_RESULTS) { ret['others'].pop(); @@ -1179,16 +1189,6 @@ }; } - function escape(content) { - var h1 = document.createElement('h1'); - h1.textContent = content; - return h1.innerHTML; - } - - function pathSplitter(path) { - return '' + path.replace(/::/g, '::'); - } - function buildHrefAndPath(item) { var displayPath; var href; @@ -1227,6 +1227,16 @@ return [displayPath, href]; } + function escape(content) { + var h1 = document.createElement('h1'); + h1.textContent = content; + return h1.innerHTML; + } + + function pathSplitter(path) { + return '' + path.replace(/::/g, '::'); + } + function addTab(array, query, display) { var extraStyle = ''; if (display === false) { @@ -1234,12 +1244,13 @@ } var output = ''; + var duplicates = {}; if (array.length > 0) { output = ''; var shown = []; array.forEach(function(item) { - var name, type, href, displayPath; + var name, type; var id_ty = item.ty + item.path + item.name; if (shown.indexOf(id_ty) !== -1) { @@ -1250,15 +1261,23 @@ name = item.name; type = itemTypes[item.ty]; - var res = buildHrefAndPath(item); - var href = res[1]; - var displayPath = res[0]; + if (item.is_alias !== true) { + var fullPath = item.displayPath + name; + + if (duplicates[fullPath]) { + return; + } + duplicates[fullPath] = true; + } output += ''; }); @@ -1284,8 +1303,7 @@ if (results['others'].length === 1 && getCurrentValue('rustdoc-go-to-only-result') === "true") { var elem = document.createElement('a'); - var res = buildHrefAndPath(results['others'][0]); - elem.href = res[1]; + elem.href = results['others'][0].href; elem.style.display = 'none'; // For firefox, we need the element to be in the DOM so it can be clicked. document.body.appendChild(elem); @@ -1347,12 +1365,13 @@ } } if (queries.length > 1) { - function getSmallest(arrays, positions) { + function getSmallest(arrays, positions, notDuplicates) { 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 === null || start > arrays[it][positions[it]].lev) && + !notDuplicates[arrays[it][positions[it]].fullPath]) { start = arrays[it][positions[it]].lev; } } @@ -1362,19 +1381,23 @@ function mergeArrays(arrays) { var ret = []; var positions = []; + var notDuplicates = {}; for (var x = 0; x < arrays.length; ++x) { positions.push(0); } while (ret.length < MAX_RESULTS) { - var smallest = getSmallest(arrays, positions); + var smallest = getSmallest(arrays, positions, notDuplicates); + 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) { + arrays[x][positions[x]].lev === smallest && + !notDuplicates[arrays[x][positions[x]].fullPath]) { ret.push(arrays[x][positions[x]]); + notDuplicates[arrays[x][positions[x]].fullPath] = true; positions[x] += 1; } } diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index d6b3ab26af8ae..08df4adf57d34 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -1326,4 +1326,8 @@ kbd { } #all-types > p { margin: 5px 0; +} + +.search-results td span.grey { + color: #ccc; } \ No newline at end of file From e81b59bba88d216dcbc7bdf3f6aef8098fe3a7d7 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 26 Apr 2018 21:14:10 +0200 Subject: [PATCH 2/9] Improve alias rendering --- src/librustdoc/html/static/main.js | 2 +- src/librustdoc/html/static/rustdoc.css | 4 ---- src/librustdoc/html/static/themes/dark.css | 9 ++++++++- src/librustdoc/html/static/themes/light.css | 7 +++++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index ba92ac7bd306e..8c4dac9238ce9 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -1273,7 +1273,7 @@ output += '
' + - '' + - pathSplitter(displayPath) + '' + + '' + + (item.is_alias === true ? + ('' + item.alias + '  - see ') : '') + + item.displayPath + '' + name + '' + - '' + + '' + '' + escape(item.desc) + ' 
' + '' + (item.is_alias === true ? - ('' + item.alias + ' ' + item.alias + '  - see ') : '') + item.displayPath + '' + name + '' + diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 08df4adf57d34..d6b3ab26af8ae 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -1326,8 +1326,4 @@ kbd { } #all-types > p { margin: 5px 0; -} - -.search-results td span.grey { - color: #ccc; } \ No newline at end of file diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css index da4be7db5aa92..493a75e25211d 100644 --- a/src/librustdoc/html/static/themes/dark.css +++ b/src/librustdoc/html/static/themes/dark.css @@ -382,7 +382,7 @@ kbd { } #theme-choices > button:hover, #theme-choices > button:focus { - background-color: #444; + background-color: #4e4e4e; } @media (max-width: 700px) { @@ -397,3 +397,10 @@ kbd { #all-types:hover { background-color: #606060; } + +.search-results td span.alias { + color: #fff; +} +.search-results td span.grey { + color: #ccc; +} \ No newline at end of file diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css index 12af01d2e2498..22f4635fb02e1 100644 --- a/src/librustdoc/html/static/themes/light.css +++ b/src/librustdoc/html/static/themes/light.css @@ -390,4 +390,11 @@ kbd { } #all-types:hover { background-color: #f9f9f9; +} + +.search-results td span.alias { + color: #000; +} +.search-results td span.grey { + color: #999; } \ No newline at end of file From 8c80124fef9c2d9afceafc4f154b98390974670a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 26 Apr 2018 22:27:12 +0200 Subject: [PATCH 3/9] Add missing description in alias items --- src/librustdoc/html/render.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 21de2db1dfe74..7fff981d09094 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -879,8 +879,8 @@ themePicker.onclick = function() {{ } fn show_item(item: &IndexItem, krate: &str) -> String { - format!("{{'crate':'{}','ty':{},'name':'{}','path':'{}'{}}}", - krate, item.ty as usize, item.name, item.path, + format!("{{'crate':'{}','ty':{},'name':'{}','desc':'{}','path':'{}'{}}}", + krate, item.ty as usize, item.name, item.desc, item.path, if let Some(p) = item.parent_idx { format!(",'parent':{}", p) } else { @@ -1442,7 +1442,7 @@ impl<'a> Cache { ty: item.type_(), name: item_name.to_string(), path: path.clone(), - desc: String::new(), + desc: plain_summary_line(item.doc_value()), parent: None, parent_idx: None, search_type: get_index_search_type(&item), From 9483e9b56474788e6549a1922e57f4a65c1c0bb0 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 26 Apr 2018 23:44:25 +0200 Subject: [PATCH 4/9] Handle blur on theme buttons nicely --- src/librustdoc/html/render.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 7fff981d09094..d6ea9b00a4873 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -789,7 +789,8 @@ fn write_shared(cx: &Context, format!( r#"var themes = document.getElementById("theme-choices"); var themePicker = document.getElementById("theme-picker"); -themePicker.onclick = function() {{ + +function switchThemeButtonState() {{ if (themes.style.display === "block") {{ themes.style.display = "none"; themePicker.style.borderBottomRightRadius = "3px"; @@ -800,12 +801,29 @@ themePicker.onclick = function() {{ themePicker.style.borderBottomLeftRadius = "0"; }} }}; + +function handleThemeButtonsBlur(e) {{ + var active = document.activeElement; + var related = e.relatedTarget; + + if (active.id !== "themePicker" && + (!active.parentNode || active.parentNode.id !== "theme-choices") && + (!related || + (related.id !== "themePicker" && + (!related.parentNode || related.parentNode.id !== "theme-choices")))) {{ + switchThemeButtonState(); + }} +}} + +themePicker.onclick = switchThemeButtonState; +themePicker.onblur = handleThemeButtonsBlur; [{}].forEach(function(item) {{ var but = document.createElement('button'); but.innerHTML = item; but.onclick = function(el) {{ switchTheme(currentTheme, mainTheme, item); }}; + but.onblur = handleThemeButtonsBlur; themes.appendChild(but); }});"#, themes.iter() From 72b7c8d2912b062e421bf17a584835e2ac66c124 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 5 May 2018 16:36:49 +0200 Subject: [PATCH 5/9] Remove extra span tags --- src/librustdoc/html/static/main.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 8c4dac9238ce9..b8d861d376f25 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -57,6 +57,12 @@ return this.indexOf(searchString, position) === position; }; } + if (!String.prototype.endsWith) { + String.prototype.endsWith = function(suffix, length) { + var l = length || this.length; + return this.indexOf(suffix, l - suffix.length) !== -1; + }; + } function getPageId() { var id = document.location.href.split('#')[1]; @@ -1234,7 +1240,11 @@ } function pathSplitter(path) { - return '' + path.replace(/::/g, '::'); + var tmp = '' + path.replace(/::/g, '::'); + if (tmp.endsWith("")) { + return tmp.slice(0, tmp.length - 6); + } + return tmp; } function addTab(array, query, display) { From 6a4bdda87bc09ba080f42ffe30cb488b3740ca9e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 5 May 2018 17:06:08 +0200 Subject: [PATCH 6/9] Reduce js files size --- src/librustdoc/html/render.rs | 16 +++++++----- src/librustdoc/html/static/main.js | 41 +++++++++++++++--------------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index d6ea9b00a4873..7bddeb2f33f75 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -413,9 +413,9 @@ impl ToJson for Type { match self.name { Some(ref name) => { let mut data = BTreeMap::new(); - data.insert("name".to_owned(), name.to_json()); + data.insert("n".to_owned(), name.to_json()); if let Some(ref generics) = self.generics { - data.insert("generics".to_owned(), generics.to_json()); + data.insert("g".to_owned(), generics.to_json()); } Json::Object(data) }, @@ -438,8 +438,12 @@ impl ToJson for IndexItemFunctionType { Json::Null } else { let mut data = BTreeMap::new(); - data.insert("inputs".to_owned(), self.inputs.to_json()); - data.insert("output".to_owned(), self.output.to_json()); + if !self.inputs.is_empty() { + data.insert("i".to_owned(), self.inputs.to_json()); + } + if let Some(ref output) = self.output { + data.insert("o".to_owned(), output.to_json()); + } Json::Object(data) } } @@ -897,8 +901,8 @@ themePicker.onblur = handleThemeButtonsBlur; } fn show_item(item: &IndexItem, krate: &str) -> String { - format!("{{'crate':'{}','ty':{},'name':'{}','desc':'{}','path':'{}'{}}}", - krate, item.ty as usize, item.name, item.desc, item.path, + format!("{{'crate':'{}','ty':{},'name':'{}','desc':'{}','p':'{}'{}}}", + krate, item.ty as usize, item.name, item.desc.replace("'", "\\'"), item.path, if let Some(p) = item.parent_idx { format!(",'parent':{}", p) } else { diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index b8d861d376f25..527c880b34ff0 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -462,7 +462,7 @@ if (isType !== true || obj.type) { var res = buildHrefAndPath(obj); obj.displayPath = pathSplitter(res[0]); - obj.fullPath = obj.displayPath + obj.name; + obj.fullPath = obj.displayPath + obj.n; obj.href = res[1]; out.push(obj); if (out.length >= MAX_RESULTS) { @@ -597,8 +597,8 @@ // match as well. var lev_distance = MAX_LEV_DISTANCE + 1; if (val.generics.length > 0) { - if (obj.generics && obj.generics.length >= val.generics.length) { - var elems = obj.generics.slice(0); + if (obj.g && obj.g.length >= val.generics.length) { + var elems = obj.g.slice(0); var total = 0; var done = 0; // We need to find the type that matches the most to remove it in order @@ -630,11 +630,11 @@ // Check for type name and type generics (if any). function checkType(obj, val, literalSearch) { var lev_distance = MAX_LEV_DISTANCE + 1; - if (obj.name === val.name) { + if (obj.n === val.name) { if (literalSearch === true) { if (val.generics && val.generics.length !== 0) { - if (obj.generics && obj.length >= val.generics.length) { - var elems = obj.generics.slice(0); + if (obj.g && obj.length >= val.generics.length) { + var elems = obj.g.slice(0); var allFound = true; var x; @@ -658,7 +658,7 @@ } // If the type has generics but don't match, then it won't return at this point. // Otherwise, `checkGenerics` will return 0 and it'll return. - if (obj.generics && obj.generics.length !== 0) { + if (obj.g && obj.g.length !== 0) { var tmp_lev = checkGenerics(obj, val); if (tmp_lev <= MAX_LEV_DISTANCE) { return tmp_lev; @@ -669,22 +669,22 @@ } // Names didn't match so let's check if one of the generic types could. if (literalSearch === true) { - if (obj.generics && obj.generics.length > 0) { - for (var x = 0; x < obj.generics.length; ++x) { - if (obj.generics[x] === val.name) { + if (obj.g && obj.g.length > 0) { + for (var x = 0; x < obj.g.length; ++x) { + if (obj.g[x] === val.name) { return true; } } } return false; } - var lev_distance = Math.min(levenshtein(obj.name, val.name), lev_distance); + var lev_distance = Math.min(levenshtein(obj.n, val.name), lev_distance); if (lev_distance <= MAX_LEV_DISTANCE) { lev_distance = Math.min(checkGenerics(obj, val), lev_distance); - } else if (obj.generics && obj.generics.length > 0) { + } else if (obj.g && obj.g.length > 0) { // We can check if the type we're looking for is inside the generics! - for (var x = 0; x < obj.generics.length; ++x) { - lev_distance = Math.min(levenshtein(obj.generics[x], val.name), + for (var x = 0; x < obj.g.length; ++x) { + lev_distance = Math.min(levenshtein(obj.g[x], val.name), lev_distance); } } @@ -696,9 +696,9 @@ function findArg(obj, val, literalSearch) { var lev_distance = MAX_LEV_DISTANCE + 1; - if (obj && obj.type && obj.type.inputs.length > 0) { - for (var i = 0; i < obj.type.inputs.length; i++) { - var tmp = checkType(obj.type.inputs[i], val, literalSearch); + if (obj && obj.type && obj.type.i && obj.type.i.length > 0) { + for (var i = 0; i < obj.type.i.length; i++) { + var tmp = checkType(obj.type.i[i], val, literalSearch); if (literalSearch === true && tmp === true) { return true; } @@ -714,8 +714,8 @@ function checkReturned(obj, val, literalSearch) { var lev_distance = MAX_LEV_DISTANCE + 1; - if (obj && obj.type && obj.type.output) { - var tmp = checkType(obj.type.output, val, literalSearch); + if (obj && obj.type && obj.type.o) { + var tmp = checkType(obj.type.o, val, literalSearch); if (literalSearch === true && tmp === true) { return true; } @@ -860,7 +860,7 @@ var fullId = generateId(ty); // allow searching for void (no output) functions as well - var typeOutput = type.output ? type.output.name : ""; + var typeOutput = type.o ? type.o.name : ""; var returned = checkReturned(ty, output, true); if (output.name === "*" || returned === true) { var in_args = false; @@ -1029,6 +1029,7 @@ for (var i = 0; i < aliases.length; ++i) { aliases[i].is_alias = true; aliases[i].alias = query.raw; + aliases[i].path = aliases[i].p; var res = buildHrefAndPath(aliases[i]); aliases[i].displayPath = pathSplitter(res[0]); aliases[i].fullPath = aliases[i].displayPath + aliases[i].name; From 8fab482a68310da88ae72c1aef6edb19067949f1 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 12 May 2018 13:52:25 +0200 Subject: [PATCH 7/9] Fix items counts in search results --- src/librustdoc/html/static/main.js | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 527c880b34ff0..e08f326187179 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -1256,6 +1256,7 @@ var output = ''; var duplicates = {}; + var length = 0; if (array.length > 0) { output = ''; var shown = []; @@ -1280,6 +1281,7 @@ } duplicates[fullPath] = true; } + length += 1; output += '
' + '' + @@ -1299,7 +1301,7 @@ encodeURIComponent('rust ' + query.query) + '">DuckDuckGo?'; } - return output; + return [output, length]; } function makeTabHeader(tabNb, text, nbElems) { @@ -1320,21 +1322,22 @@ document.body.appendChild(elem); elem.click(); } - var output, query = getQuery(search_input.value); + var query = getQuery(search_input.value); currentResults = query.id; - output = '

Results for ' + escape(query.query) + + + var ret_others = addTab(results['others'], query); + var ret_in_args = addTab(results['in_args'], query, false); + var ret_returned = addTab(results['returned'], query, false); + + var output = '

Results for ' + escape(query.query) + (query.type ? ' (type: ' + escape(query.type) + ')' : '') + '

' + '
' + - makeTabHeader(0, "In Names", results['others'].length) + - makeTabHeader(1, "In Parameters", results['in_args'].length) + - makeTabHeader(2, "In Return Types", results['returned'].length) + - '
'; - - output += addTab(results['others'], query); - output += addTab(results['in_args'], query, false); - output += addTab(results['returned'], query, false); - output += '
'; + makeTabHeader(0, "In Names", ret_others[1]) + + makeTabHeader(1, "In Parameters", ret_in_args[1]) + + makeTabHeader(2, "In Return Types", ret_returned[1]) + + '
' + + ret_others[0] + ret_in_args[0] + ret_returned[0] + '
'; addClass(document.getElementById('main'), 'hidden'); var search = document.getElementById('search'); From f2bc09e68bfc5d84a7abf49bedb5ced8f99b95a7 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 12 May 2018 14:57:52 +0200 Subject: [PATCH 8/9] Fix invalid deduplication --- src/librustdoc/html/static/main.js | 9 +-------- src/test/rustdoc-js/deduplication.js | 21 +++++++++++++++++++++ src/tools/rustdoc-js/tester.js | 5 +++-- 3 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 src/test/rustdoc-js/deduplication.js diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index e08f326187179..3ee06a964de9d 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -462,7 +462,7 @@ if (isType !== true || obj.type) { var res = buildHrefAndPath(obj); obj.displayPath = pathSplitter(res[0]); - obj.fullPath = obj.displayPath + obj.n; + obj.fullPath = obj.displayPath + obj.name; obj.href = res[1]; out.push(obj); if (out.length >= MAX_RESULTS) { @@ -1259,17 +1259,10 @@ var length = 0; if (array.length > 0) { output = ''; - var shown = []; array.forEach(function(item) { var name, type; - var id_ty = item.ty + item.path + item.name; - if (shown.indexOf(id_ty) !== -1) { - return; - } - - shown.push(id_ty); name = item.name; type = itemTypes[item.ty]; diff --git a/src/test/rustdoc-js/deduplication.js b/src/test/rustdoc-js/deduplication.js new file mode 100644 index 0000000000000..0f29607d5c993 --- /dev/null +++ b/src/test/rustdoc-js/deduplication.js @@ -0,0 +1,21 @@ +// 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. + +// ignore-order + +const QUERY = 'is_nan'; + +const EXPECTED = { + 'others': [ + { 'path': 'std::f32', 'name': 'is_nan' }, + { 'path': 'std::f64', 'name': 'is_nan' }, + { 'path': 'std::option::Option', 'name': 'is_none' }, + ], +}; diff --git a/src/tools/rustdoc-js/tester.js b/src/tools/rustdoc-js/tester.js index 25f7a2d1294c5..47667d93cb7f1 100644 --- a/src/tools/rustdoc-js/tester.js +++ b/src/tools/rustdoc-js/tester.js @@ -160,10 +160,11 @@ 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", - "execSearch"]; + var functionsToLoad = ["buildHrefAndPath", "pathSplitter", "levenshtein", "validateResult", + "getQuery", "buildIndex", "execQuery", "execSearch"]; finalJS += 'window = { "currentCrate": "std" };\n'; + finalJS += 'var rootPath = "../";\n'; finalJS += ALIASES; finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs); finalJS += loadThings(variablesToLoad, 'variable', extractVariable, mainJs); From f0db2cf14e8b58eb04d40e8aebea0a7a987097eb Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 12 May 2018 23:44:40 +0200 Subject: [PATCH 9/9] Use fullpath instead of recreating it --- src/librustdoc/html/static/main.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 3ee06a964de9d..9224bd1c50890 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -1267,12 +1267,10 @@ type = itemTypes[item.ty]; if (item.is_alias !== true) { - var fullPath = item.displayPath + name; - - if (duplicates[fullPath]) { + if (duplicates[item.fullPath]) { return; } - duplicates[fullPath] = true; + duplicates[item.fullPath] = true; } length += 1;