Skip to content

Commit

Permalink
refactor: update apis
Browse files Browse the repository at this point in the history
  • Loading branch information
ahabhgk committed May 21, 2024
1 parent 2f23f19 commit 8fd73c5
Show file tree
Hide file tree
Showing 10 changed files with 88 additions and 118 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

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

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "css-module-lexer"
version = "0.0.4"
version = "0.0.5"
edition = "2021"
description = "Lexes CSS modules returning their dependencies metadata"
license = "MIT"
Expand Down
5 changes: 3 additions & 2 deletions benches/main.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
use codspeed_criterion_compat::*;
use css_module_lexer::collect_css_modules_dependencies;
use css_module_lexer::collect_dependencies;
use css_module_lexer::Mode;

const BOOTSTRAP: &str = include_str!("../fixtures/bootstrap.min.css");

fn benchmark(c: &mut Criterion) {
c.bench_function("bootstrap", |b| {
b.iter(|| collect_css_modules_dependencies(black_box(BOOTSTRAP)))
b.iter(|| collect_dependencies(black_box(BOOTSTRAP), Mode::Local))
});
}

Expand Down
14 changes: 10 additions & 4 deletions src/dependencies.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,12 +277,12 @@ impl Range {
}
}

#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Mode {
#[default]
Local,
Global,
Pure,
Css,
}

#[derive(Debug)]
Expand Down Expand Up @@ -319,13 +319,15 @@ impl ModeData {
match self.current {
Mode::Local | Mode::Pure => true,
Mode::Global => false,
Mode::Css => unreachable!(),
}
}

pub fn is_property_local_mode(&self) -> bool {
match self.property {
Mode::Local | Mode::Pure => true,
Mode::Global => false,
Mode::Css => unreachable!(),
}
}

Expand Down Expand Up @@ -754,9 +756,13 @@ pub struct LexDependencies<'s, D, W> {
}

impl<'s, D: HandleDependency<'s>, W: HandleWarning<'s>> LexDependencies<'s, D, W> {
pub fn new(handle_dependency: D, handle_warning: W, mode_data: Option<ModeData>) -> Self {
pub fn new(handle_dependency: D, handle_warning: W, mode: Mode) -> Self {
Self {
mode_data,
mode_data: if mode == Mode::Css {
None
} else {
Some(ModeData::new(mode))
},
scope: Scope::TopLevel,
block_nesting_level: 0,
allow_import_at_rule: true,
Expand Down
53 changes: 5 additions & 48 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,63 +32,20 @@ impl<'s, F: FnMut(Warning<'s>)> HandleWarning<'s> for F {
}
}

pub fn lex_css_dependencies<'s>(
pub fn lex_dependencies<'s>(
input: &'s str,
mode: Mode,
handle_dependency: impl HandleDependency<'s>,
handle_warning: impl HandleWarning<'s>,
) {
let mut lexer = Lexer::new(input);
let mut visitor = LexDependencies::new(handle_dependency, handle_warning, None);
let mut visitor = LexDependencies::new(handle_dependency, handle_warning, mode);
lexer.lex(&mut visitor);
}

pub fn collect_css_dependencies(input: &str) -> (Vec<Dependency>, Vec<Warning>) {
pub fn collect_dependencies(input: &str, mode: Mode) -> (Vec<Dependency>, Vec<Warning>) {
let mut dependencies = Vec::new();
let mut warnings = Vec::new();
lex_css_dependencies(input, |v| dependencies.push(v), |v| warnings.push(v));
(dependencies, warnings)
}

pub fn lex_css_modules_dependencies<'s>(
input: &'s str,
handle_dependency: impl HandleDependency<'s>,
handle_warning: impl HandleWarning<'s>,
) {
let mut lexer = Lexer::new(input);
let mut visitor = LexDependencies::new(
handle_dependency,
handle_warning,
Some(ModeData::new(Mode::Local)),
);
lexer.lex(&mut visitor);
}

pub fn collect_css_modules_dependencies(input: &str) -> (Vec<Dependency<'_>>, Vec<Warning<'_>>) {
let mut dependencies = Vec::new();
let mut warnings = Vec::new();
lex_css_modules_dependencies(input, |v| dependencies.push(v), |v| warnings.push(v));
(dependencies, warnings)
}

pub fn lex_css_modules_global_dependencies<'s>(
input: &'s str,
handle_dependency: impl HandleDependency<'s>,
handle_warning: impl HandleWarning<'s>,
) {
let mut lexer = Lexer::new(input);
let mut visitor = LexDependencies::new(
handle_dependency,
handle_warning,
Some(ModeData::new(Mode::Global)),
);
lexer.lex(&mut visitor);
}

pub fn collect_css_modules_global_dependencies(
input: &str,
) -> (Vec<Dependency<'_>>, Vec<Warning<'_>>) {
let mut dependencies = Vec::new();
let mut warnings = Vec::new();
lex_css_modules_global_dependencies(input, |v| dependencies.push(v), |v| warnings.push(v));
lex_dependencies(input, mode, |v| dependencies.push(v), |v| warnings.push(v));
(dependencies, warnings)
}
7 changes: 4 additions & 3 deletions tests/integration_test.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
use css_module_lexer::collect_css_modules_dependencies;
use css_module_lexer::collect_dependencies;
use css_module_lexer::Mode;

#[test]
fn bootstrap() {
let input = include_str!("../fixtures/bootstrap.css");
let (dependencies, warnings) = collect_css_modules_dependencies(input);
let (dependencies, warnings) = collect_dependencies(input, Mode::Local);
assert!(warnings.is_empty());
assert!(!dependencies.is_empty());
}

#[test]
fn bootstrap_min() {
let input = include_str!("../fixtures/bootstrap.min.css");
let (dependencies, warnings) = collect_css_modules_dependencies(input);
let (dependencies, warnings) = collect_dependencies(input, Mode::Local);
assert!(warnings.is_empty());
assert!(!dependencies.is_empty());
}
3 changes: 1 addition & 2 deletions tests/postcss_modules/extract_imports_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ use css_module_lexer::Dependency;
use css_module_lexer::LexDependencies;
use css_module_lexer::Lexer;
use css_module_lexer::Mode;
use css_module_lexer::ModeData;
use css_module_lexer::Range;
use css_module_lexer::Warning;
use css_module_lexer::WarningKind;
Expand Down Expand Up @@ -188,7 +187,7 @@ impl ExtractImports {
_ => {}
},
|warning| warnings.push(warning),
Some(ModeData::new(Mode::Local)),
Mode::Local,
);
lexer.lex(&mut visitor);
let len = input.len() as u32;
Expand Down
9 changes: 4 additions & 5 deletions tests/postcss_modules/local_by_default_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ use css_module_lexer::Dependency;
use css_module_lexer::LexDependencies;
use css_module_lexer::Lexer;
use css_module_lexer::Mode;
use css_module_lexer::ModeData;
use css_module_lexer::Range;
use css_module_lexer::Warning;
use indoc::indoc;

#[derive(Debug, Default, Clone, Hash, PartialEq, Eq)]
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
struct LocalByDefault {
pub mode: Mode,
}
Expand Down Expand Up @@ -73,7 +72,7 @@ impl LocalByDefault {
_ => {}
},
|warning| warnings.push(warning),
Some(ModeData::new(self.mode)),
self.mode,
);
lexer.lex(&mut visitor);
let len = input.len() as u32;
Expand All @@ -85,7 +84,7 @@ impl LocalByDefault {
}

fn test(input: &str, expected: &str) {
let (actual, warnings) = LocalByDefault::default().transform(input);
let (actual, warnings) = LocalByDefault { mode: Mode::Local }.transform(input);
assert!(warnings.is_empty(), "{}", &warnings[0]);
similar_asserts::assert_eq!(expected, actual);
}
Expand All @@ -97,7 +96,7 @@ fn test_with_options(input: &str, expected: &str, options: LocalByDefault) {
}

fn test_with_warning(input: &str, expected: &str, warning: &str) {
let (actual, warnings) = LocalByDefault::default().transform(input);
let (actual, warnings) = LocalByDefault { mode: Mode::Local }.transform(input);
assert!(
warnings[0].to_string().contains(warning),
"{}",
Expand Down
3 changes: 1 addition & 2 deletions tests/postcss_modules/scope_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use css_module_lexer::Dependency;
use css_module_lexer::LexDependencies;
use css_module_lexer::Lexer;
use css_module_lexer::Mode;
use css_module_lexer::ModeData;
use css_module_lexer::Range;
use css_module_lexer::Warning;
use indoc::indoc;
Expand Down Expand Up @@ -90,7 +89,7 @@ impl Scope {
_ => {}
},
|warning| warnings.push(warning),
Some(ModeData::new(Mode::Global)),
Mode::Global,
);
lexer.lex(&mut visitor);
let len = input.len() as u32;
Expand Down
Loading

0 comments on commit 8fd73c5

Please sign in to comment.