Skip to content

Commit

Permalink
Remove minification on search-index.js file
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Dec 2, 2019
1 parent 5748b4c commit 35ba58f
Showing 1 changed file with 9 additions and 85 deletions.
94 changes: 9 additions & 85 deletions src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -715,19 +715,13 @@ themePicker.onblur = handleThemeButtonsBlur;
path: &Path,
krate: &str,
key: &str,
for_search_index: bool,
) -> io::Result<(Vec<String>, Vec<String>, Vec<String>)> {
) -> io::Result<(Vec<String>, Vec<String>)> {
let mut ret = Vec::new();
let mut krates = Vec::new();
let mut variables = Vec::new();

if path.exists() {
for line in BufReader::new(File::open(path)?).lines() {
let line = line?;
if for_search_index && line.starts_with("var R") {
variables.push(line.clone());
continue;
}
if !line.starts_with(key) {
continue;
}
Expand All @@ -741,7 +735,7 @@ themePicker.onblur = handleThemeButtonsBlur;
.unwrap_or_else(|| String::new()));
}
}
Ok((ret, krates, variables))
Ok((ret, krates))
}

fn show_item(item: &IndexItem, krate: &str) -> String {
Expand All @@ -756,7 +750,7 @@ themePicker.onblur = handleThemeButtonsBlur;

let dst = cx.dst.join(&format!("aliases{}.js", cx.shared.resource_suffix));
{
let (mut all_aliases, _, _) = try_err!(collect(&dst, &krate.name, "ALIASES", false), &dst);
let (mut all_aliases, _) = try_err!(collect(&dst, &krate.name, "ALIASES"), &dst);
let mut output = String::with_capacity(100);
for (alias, items) in &cx.cache.aliases {
if items.is_empty() {
Expand Down Expand Up @@ -853,9 +847,7 @@ themePicker.onblur = handleThemeButtonsBlur;
}

let dst = cx.dst.join(&format!("source-files{}.js", cx.shared.resource_suffix));
let (mut all_sources, _krates, _) = try_err!(collect(&dst, &krate.name, "sourcesIndex",
false),
&dst);
let (mut all_sources, _krates) = try_err!(collect(&dst, &krate.name, "sourcesIndex"), &dst);
all_sources.push(format!("sourcesIndex[\"{}\"] = {};",
&krate.name,
hierarchy.to_json_string()));
Expand All @@ -867,20 +859,15 @@ themePicker.onblur = handleThemeButtonsBlur;

// Update the search index
let dst = cx.dst.join(&format!("search-index{}.js", cx.shared.resource_suffix));
let (mut all_indexes, mut krates, variables) = try_err!(collect(&dst,
&krate.name,
"searchIndex",
true), &dst);
let (mut all_indexes, mut krates) = try_err!(collect(&dst, &krate.name, "searchIndex"), &dst);
all_indexes.push(search_index);

// Sort the indexes by crate so the file will be generated identically even
// with rustdoc running in parallel.
all_indexes.sort();
{
let mut v = String::from("var N=null,E=\"\",T=\"t\",U=\"u\",searchIndex={};\n");
v.push_str(&minify_replacer(
&format!("{}\n{}", variables.join(""), all_indexes.join("\n")),
options.enable_minification));
let mut v = String::from("var searchIndex={};\n");
v.push_str(&all_indexes.join("\n"));
// "addSearchOptions" has to be called first so the crate filtering can be set before the
// search might start (if it's set into the URL for example).
v.push_str("addSearchOptions(searchIndex);initSearch(searchIndex);");
Expand Down Expand Up @@ -981,9 +968,8 @@ themePicker.onblur = handleThemeButtonsBlur;
remote_item_type,
remote_path[remote_path.len() - 1]));

let (mut all_implementors, _, _) = try_err!(collect(&mydst, &krate.name, "implementors",
false),
&mydst);
let (mut all_implementors, _) = try_err!(collect(&mydst, &krate.name, "implementors"),
&mydst);
all_implementors.push(implementors);
// Sort the implementors by crate so the file will be generated
// identically even with rustdoc running in parallel.
Expand Down Expand Up @@ -1020,68 +1006,6 @@ fn write_minify(fs:&DocFS, dst: PathBuf, contents: &str, enable_minification: bo
}
}

fn minify_replacer(
contents: &str,
enable_minification: bool,
) -> String {
use minifier::js::{simple_minify, Keyword, ReservedChar, Token, Tokens};

if enable_minification {
let tokens: Tokens<'_> = simple_minify(contents)
.into_iter()
.filter(|(f, next)| {
// We keep backlines.
minifier::js::clean_token_except(f, next, &|c: &Token<'_>| {
c.get_char() != Some(ReservedChar::Backline)
})
})
.map(|(f, _)| {
minifier::js::replace_token_with(f, &|t: &Token<'_>| {
match *t {
Token::Keyword(Keyword::Null) => Some(Token::Other("N")),
Token::String(s) => {
let s = &s[1..s.len() -1]; // The quotes are included
if s.is_empty() {
Some(Token::Other("E"))
} else if s == "t" {
Some(Token::Other("T"))
} else if s == "u" {
Some(Token::Other("U"))
} else {
None
}
}
_ => None,
}
})
})
.collect::<Vec<_>>()
.into();
let o = tokens.apply(|f| {
// We add a backline after the newly created variables.
minifier::js::aggregate_strings_into_array_with_separation_filter(
f,
"R",
Token::Char(ReservedChar::Backline),
// This closure prevents crates' names from being aggregated.
//
// The point here is to check if the string is preceded by '[' and
// "searchIndex". If so, it means this is a crate name and that it
// shouldn't be aggregated.
|tokens, pos| {
pos < 2 ||
!tokens[pos - 1].eq_char(ReservedChar::OpenBracket) ||
tokens[pos - 2].get_other() != Some("searchIndex")
}
)
})
.to_string();
format!("{}\n", o)
} else {
format!("{}\n", contents)
}
}

#[derive(Debug, Eq, PartialEq, Hash)]
struct ItemEntry {
url: String,
Expand Down

2 comments on commit 35ba58f

@Folyd
Copy link
Contributor

@Folyd Folyd commented on 35ba58f Mar 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GuillaumeGomez I appreciate your contribution to the rust docs all the time. Just wonder why we need to remove the minification of the search index? My extension (Rust Search Extension) relies on the std and external crate's search index to provide instant search. However, the minified search index could make the extension a smaller size.

@GuillaumeGomez
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It made the compilation way too long for some crates (servo for example). So if we want to put it back, we need to fix this run issue first.

Please sign in to comment.