summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2019-08-12 14:01:59 +0100
committerKornel <kornel@geekhood.net>2019-08-12 14:04:23 +0100
commitb6c8ee1755cb94b1c086296d98ef802d871875d5 (patch)
treeae05f0965dd2bbaba5c733ea2ca7f2593935dd62
parentd8f1bbc07eacea1bb5ade98b4e6eb5c45e21cdd2 (diff)
kebab-keywords
-rw-r--r--crate_db/Cargo.toml1
-rw-r--r--crate_db/src/lib_crate_db.rs5
-rw-r--r--front_end/Cargo.toml1
-rw-r--r--front_end/src/urler.rs3
-rw-r--r--kitchen_sink/src/lib_kitchen_sink.rs10
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();
}