Skip to content

Commit

Permalink
Move subvert logic from the Query struct to the replace() function …
Browse files Browse the repository at this point in the history
…implementation
  • Loading branch information
dmerejkowsky committed Mar 8, 2024
1 parent 4ac6d4d commit 6cb02f6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 27 deletions.
27 changes: 2 additions & 25 deletions src/query.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
use inflector::cases::camelcase::*;
use inflector::cases::kebabcase::*;
use inflector::cases::pascalcase::*;
use inflector::cases::screamingsnakecase::*;
use inflector::cases::snakecase::*;
use inflector::cases::traincase::*;

/// A replacement Query
pub enum Query {
/// Substitute `old` with `new`
Expand All @@ -15,7 +8,7 @@ pub enum Query {
/// using case conversion methods.
/// This allows replacing FooBar with SpamEggs and foo_bar with spam_eggs
/// using only one query
Subvert(Vec<(String, String)>),
Subvert(String, String),
}

impl Query {
Expand All @@ -31,22 +24,6 @@ impl Query {

/// Constructor for the Subvert variant
pub fn subvert(pattern: &str, replacement: &str) -> Self {
fn to_ada_case(input: &str) -> String {
to_train_case(input).replace('-', "_")
}

let mut items = vec![];
for function in &[
to_ada_case,
to_camel_case,
to_kebab_case,
to_pascal_case,
to_screaming_snake_case,
to_snake_case,
to_train_case,
] {
items.push((function(pattern), function(replacement)));
}
Self::Subvert(items)
Self::Subvert(pattern.to_string(), replacement.to_string())
}
}
27 changes: 25 additions & 2 deletions src/replacer.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
use crate::query::Query;
use inflector::cases::camelcase::to_camel_case;
use inflector::cases::kebabcase::to_kebab_case;
use inflector::cases::pascalcase::to_pascal_case;
use inflector::cases::screamingsnakecase::to_screaming_snake_case;
use inflector::cases::snakecase::to_snake_case;
use inflector::cases::traincase::to_train_case;

use regex::Regex;

Expand Down Expand Up @@ -227,8 +233,25 @@ fn get_fragments(input: &str, query: &Query) -> Fragments {
let finder = RegexReplacer::new(regex, replacement);
get_fragments_with_finder(input, finder)
}
Query::Subvert(items) => {
let finder = SubvertReplacer::new(items);
Query::Subvert(pattern, replacement) => {
fn to_ada_case(input: &str) -> String {
to_train_case(input).replace('-', "_")
}

let mut items = vec![];
for function in &[
to_ada_case,
to_camel_case,
to_kebab_case,
to_pascal_case,
to_screaming_snake_case,
to_snake_case,
to_train_case,
] {
items.push((function(pattern), function(replacement)));
}

let finder = SubvertReplacer::new(&items);
get_fragments_with_finder(input, finder)
}
}
Expand Down

0 comments on commit 6cb02f6

Please sign in to comment.