Skip to content

Commit

Permalink
Feat: Add Kebab case
Browse files Browse the repository at this point in the history
  • Loading branch information
nnnnoel committed Jul 14, 2022
1 parent 0ac8ad0 commit ff80e8a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
7 changes: 7 additions & 0 deletions packages/next-swc/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/next-swc/crates/modularize_imports/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ version = "0.11.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
convert_case = "0.5.0"
handlebars = "4.2.1"
once_cell = "1.13.0"
regex = "1.5"
Expand Down
28 changes: 20 additions & 8 deletions packages/next-swc/crates/modularize_imports/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::borrow::Cow;
use std::collections::HashMap;

use convert_case::{Case, Casing};
use handlebars::{Context, Handlebars, Helper, HelperResult, Output, RenderContext};
use once_cell::sync::Lazy;
use regex::{Captures, Regex};
Expand Down Expand Up @@ -175,6 +176,9 @@ pub fn modularize_imports(config: Config) -> impl Fold {
folder
.renderer
.register_helper("camelCase", Box::new(helper_camel_case));
folder
.renderer
.register_helper("kebabCase", Box::new(helper_kebab_case));
for (mut k, v) in config.packages {
// XXX: Should we keep this hack?
if !k.starts_with('^') && !k.ends_with('$') {
Expand Down Expand Up @@ -223,13 +227,21 @@ fn helper_camel_case(
) -> HelperResult {
// get parameter from helper or throw an error
let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or("");
let value = if param.is_empty() || param.chars().next().unwrap().is_lowercase() {
Cow::Borrowed(param)
} else {
let mut it = param.chars();
let fst = it.next().unwrap();
Cow::Owned(fst.to_lowercase().chain(it).collect::<String>())
};
out.write(value.as_ref())?;

out.write(param.to_case(Case::Camel).as_ref())?;
Ok(())
}

fn helper_kebab_case(
h: &Helper<'_, '_>,
_: &Handlebars<'_>,
_: &Context,
_: &mut RenderContext<'_, '_>,
out: &mut dyn Output,
) -> HelperResult {
// get parameter from helper or throw an error
let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or("");

out.write(param.to_case(Case::Kebab).as_ref())?;
Ok(())
}

0 comments on commit ff80e8a

Please sign in to comment.