diff options
author | Kornel <kornel@geekhood.net> | 2019-08-12 14:01:59 +0100 |
---|---|---|
committer | Kornel <kornel@geekhood.net> | 2019-08-12 14:04:23 +0100 |
commit | b6c8ee1755cb94b1c086296d98ef802d871875d5 (patch) | |
tree | ae05f0965dd2bbaba5c733ea2ca7f2593935dd62 | |
parent | d8f1bbc07eacea1bb5ade98b4e6eb5c45e21cdd2 (diff) |
kebab-keywords
-rw-r--r-- | crate_db/Cargo.toml | 1 | ||||
-rw-r--r-- | crate_db/src/lib_crate_db.rs | 5 | ||||
-rw-r--r-- | front_end/Cargo.toml | 1 | ||||
-rw-r--r-- | front_end/src/urler.rs | 3 | ||||
-rw-r--r-- | kitchen_sink/src/lib_kitchen_sink.rs | 10 |
5 files changed, 13 insertions, 7 deletions
diff --git a/crate_db/Cargo.toml b/crate_db/Cargo.toml index 747f263..13574fc 100644 --- a/crate_db/Cargo.toml +++ b/crate_db/Cargo.toml @@ -21,6 +21,7 @@ thread_local = "0.3.6" parking_lot = "0.9" rake = { git = "https://github.com/kornelski/rake-rs" } rmp-serde = "0.14" +heck = "0.3.1" [dev-dependencies] tempfile = "3.1.0" diff --git a/crate_db/src/lib_crate_db.rs b/crate_db/src/lib_crate_db.rs index 34b2830..08e19a5 100644 --- a/crate_db/src/lib_crate_db.rs +++ b/crate_db/src/lib_crate_db.rs @@ -1,6 +1,7 @@ use categories; use chrono::prelude::*; use failure::*; +use heck::KebabCase; use parking_lot::Mutex; use rich_crate::Derived; use rich_crate::Manifest; @@ -166,7 +167,7 @@ impl CrateDb { None => None, }; - let keywords: HashSet<_> = package.keywords.iter().map(|s| s.to_lowercase()).collect(); + let keywords: HashSet<_> = package.keywords.iter().filter(|k| !k.is_empty()).map(|s| s.to_kebab_case()).collect(); let keywords_derived = if keywords.is_empty() { Some(self.keywords_tx(conn, &origin).context("keywordsdb2")?) } else { @@ -1035,7 +1036,7 @@ impl KeywordInsert { if word.is_empty() || weight <= 0.000001 { return; } - let word = word.to_lowercase().replace(' ', "-"); + let word = word.to_kebab_case(); if word == "rust" || word == "rs" { return; } diff --git a/front_end/Cargo.toml b/front_end/Cargo.toml index eaed912..012a7eb 100644 --- a/front_end/Cargo.toml +++ b/front_end/Cargo.toml @@ -32,3 +32,4 @@ url = "1.7.1" parking_lot = "0.9" unicase = "2.4.0" either = "1.5.2" +heck = "0.3.1" diff --git a/front_end/src/urler.rs b/front_end/src/urler.rs index 2f25f13..9170bb9 100644 --- a/front_end/src/urler.rs +++ b/front_end/src/urler.rs @@ -1,4 +1,5 @@ use categories::Category; +use heck::KebabCase; use kitchen_sink::CrateAuthor; use kitchen_sink::UserType; use rich_crate::Origin; @@ -87,7 +88,7 @@ impl Urler { pub fn keyword(&self, name: &str) -> String { - format!("/keywords/{}", encode(&name.to_lowercase())) + format!("/keywords/{}", encode(&name.to_kebab_case())) } /// First page of category listing diff --git a/kitchen_sink/src/lib_kitchen_sink.rs b/kitchen_sink/src/lib_kitchen_sink.rs index 0f476d1..decf27d 100644 --- a/kitchen_sink/src/lib_kitchen_sink.rs +++ b/kitchen_sink/src/lib_kitchen_sink.rs @@ -772,6 +772,8 @@ impl KitchenSink { let direct_dependencies = &manifest.dependencies; let has_cargo_bin = manifest.has_cargo_bin(); let package = manifest.package.as_mut().expect("pkg"); + let eq = |a:&str,b:&str| -> bool {a.eq_ignore_ascii_case(b)}; + for cat in &mut package.categories { if cat.as_bytes().iter().any(|c| !c.is_ascii_lowercase()) { *cat = cat.to_lowercase(); @@ -797,22 +799,22 @@ impl KitchenSink { } } if cat == "cryptography" || cat == "database" || cat == "rust-patterns" || cat == "development-tools" { - if package.keywords.iter().any(|k| k == "bitcoin" || k == "ethereum" || k == "ledger" || k == "exonum" || k == "blockchain") { + if package.keywords.iter().any(|k| eq(k,"bitcoin") || eq(k,"ethereum") || eq(k,"ledger") || eq(k,"exonum") || eq(k,"blockchain")) { *cat = "cryptography::cryptocurrencies".into(); } } if cat == "games" { if package.keywords.iter().any(|k| { - k == "game-dev" || k == "game-development" || k == "gamedev" || k == "framework" || k == "utilities" || k == "parser" || k == "api" + k == "game-dev" || k == "game-development" || eq(k,"gamedev") || eq(k,"framework") || eq(k,"utilities") || eq(k,"parser") || eq(k,"api") }) { *cat = "game-engines".into(); } } if cat == "science" || cat == "algorithms" { - if package.keywords.iter().any(|k| k == "neural-network" || k == "machine-learning" || k == "deep-learning") { + if package.keywords.iter().any(|k| k == "neural-network" || eq(k,"machine-learning") || eq(k,"neuralnetworks") || eq(k,"neuralnetwork") || eq(k,"tensorflow") || eq(k,"deep-learning")) { *cat = "science::ml".into(); } else if package.keywords.iter().any(|k| { - k == "math" || k == "calculus" || k == "algebra" || k == "linear-algebra" || k == "mathematics" || k == "maths" || k == "number-theory" + k == "math" || eq(k,"calculus") || eq(k,"algebra") || eq(k,"linear-algebra") || eq(k,"mathematics") || eq(k,"maths") || eq(k,"number-theory") }) { *cat = "science::math".into(); } |