From 039f2039a4ec06c8e52734190ceaf43a21de5e39 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 18 Feb 2020 14:39:24 +0100 Subject: [PATCH] Remove unicase dependency --- Cargo.lock | 16 ---------------- crates/ra_ide_db/Cargo.toml | 1 - crates/ra_ide_db/src/symbol_index.rs | 20 +++++++++++++------- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 872e66118a..e7b8730769 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1087,7 +1087,6 @@ dependencies = [ "rustc-hash", "superslice", "test_utils", - "unicase", ] [[package]] @@ -1598,15 +1597,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.4" @@ -1649,12 +1639,6 @@ dependencies = [ "serde", ] -[[package]] -name = "version_check" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" - [[package]] name = "walkdir" version = "2.3.1" diff --git a/crates/ra_ide_db/Cargo.toml b/crates/ra_ide_db/Cargo.toml index ad3acce595..dbe98f3a0d 100644 --- a/crates/ra_ide_db/Cargo.toml +++ b/crates/ra_ide_db/Cargo.toml @@ -20,7 +20,6 @@ log = "0.4.5" rayon = "1.0.2" fst = { version = "0.3.1", default-features = false } rustc-hash = "1.0" -unicase = "2.2.0" superslice = "1.0.0" once_cell = "1.2.0" diff --git a/crates/ra_ide_db/src/symbol_index.rs b/crates/ra_ide_db/src/symbol_index.rs index 64ddf2f95e..e6b3126b64 100644 --- a/crates/ra_ide_db/src/symbol_index.rs +++ b/crates/ra_ide_db/src/symbol_index.rs @@ -21,6 +21,7 @@ //! those FSTs. use std::{ + cmp::Ordering, fmt, hash::{Hash, Hasher}, mem, @@ -187,29 +188,34 @@ impl Hash for SymbolIndex { impl SymbolIndex { fn new(mut symbols: Vec) -> SymbolIndex { - fn cmp_key<'a>(s1: &'a FileSymbol) -> impl Ord + 'a { - unicase::Ascii::new(s1.name.as_str()) + fn cmp(lhs: &FileSymbol, rhs: &FileSymbol) -> Ordering { + let lhs_chars = lhs.name.chars().map(|c| c.to_ascii_lowercase()); + let rhs_chars = rhs.name.chars().map(|c| c.to_ascii_lowercase()); + lhs_chars.cmp(rhs_chars) } + #[cfg(not(feature = "wasm"))] - symbols.par_sort_by(|s1, s2| cmp_key(s1).cmp(&cmp_key(s2))); + symbols.par_sort_by(cmp); #[cfg(feature = "wasm")] - symbols.sort_by(|s1, s2| cmp_key(s1).cmp(&cmp_key(s2))); + symbols.sort_by(cmp); let mut builder = fst::MapBuilder::memory(); let mut last_batch_start = 0; for idx in 0..symbols.len() { - if symbols.get(last_batch_start).map(cmp_key) == symbols.get(idx + 1).map(cmp_key) { - continue; + if let Some(next_symbol) = symbols.get(idx + 1) { + if cmp(&symbols[last_batch_start], next_symbol) == Ordering::Equal { + continue; + } } let start = last_batch_start; let end = idx + 1; last_batch_start = end; - let key = symbols[start].name.as_str().to_lowercase(); + let key = symbols[start].name.as_str().to_ascii_lowercase(); let value = SymbolIndex::range_to_map_value(start, end); builder.insert(key, value).unwrap();