Skip to content

Commit

Permalink
Upgrade/remove dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
kornelski committed Dec 4, 2024
1 parent 2191176 commit a6b93a1
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 39 deletions.
15 changes: 6 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,31 +34,28 @@ name = "bench"
[dependencies]
bitflags = "2.0.0"
cfg-if = "1.0.0"
cssparser = "0.28.1"
cssparser = "0.29"
encoding_rs = "0.8.13"
lazycell = "1.3.0"
lazy_static = "1.3.0"
memchr = "2.1.2"
selectors = "0.23.0"
thiserror = "1.0.2"
hashbrown = "0.15.0"
mime = "0.3.16"
selectors = "0.24"
thiserror = "2.0"

[dev-dependencies]
criterion = "0.5.1"
# Needed for criterion <= v0.5.1. See https://github.com/bheisler/criterion.rs/pull/703.
clap = { version = "4.5.21", features = ["help"] }
glob = "0.3.0"
html5ever = "0.26.0"
markup5ever_rcdom = "0.2.0"
html5ever = "0.29"
markup5ever_rcdom = "0.5.0-unofficial"
hashbrown = { version = "0.15.0", features = ["serde"] }
serde = "1.0.126"
serde_derive = "1.0.19"
serde_json = "1.0.65"
static_assertions = "1.1.0"
rand = "0.8.5"
rustc-test = "0.3.1"
itertools = "0.10.1"
itertools = "0.13"

[lints.rust]
keyword_idents = { level = "deny", priority = 1 }
Expand Down
6 changes: 6 additions & 0 deletions src/base/bytes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ pub struct HasReplacementsError;
#[allow(unnameable_types)] // accidentally exposed via `tag.set_name()`
pub struct Bytes<'b>(Cow<'b, [u8]>);

impl Bytes<'static> {
pub const fn from_static(string: &'static str) -> Self {
Self(Cow::Borrowed(string.as_bytes()))
}
}

impl<'b> Bytes<'b> {
#[inline]
pub fn from_str(string: &'b str, encoding: &'static Encoding) -> Self {
Expand Down
22 changes: 6 additions & 16 deletions src/rewritable_units/tokens/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::html::escape_double_quotes_only;
use crate::parser::AttributeBuffer;
use crate::rewritable_units::Serialize;
use encoding_rs::Encoding;
use lazycell::LazyCell;
use std::cell::OnceCell;
use std::fmt::{self, Debug};
use std::ops::Deref;
use thiserror::Error;
Expand Down Expand Up @@ -154,7 +154,7 @@ impl Debug for Attribute<'_> {
pub(crate) struct Attributes<'i> {
input: &'i Bytes<'i>,
attribute_buffer: &'i AttributeBuffer,
items: LazyCell<Vec<Attribute<'i>>>,
items: OnceCell<Vec<Attribute<'i>>>,
encoding: &'static Encoding,
}

Expand All @@ -169,7 +169,7 @@ impl<'i> Attributes<'i> {
Attributes {
input,
attribute_buffer,
items: LazyCell::default(),
items: OnceCell::default(),
encoding,
}
}
Expand Down Expand Up @@ -226,19 +226,9 @@ impl<'i> Attributes<'i> {

#[inline]
fn as_mut_vec(&mut self) -> &mut Vec<Attribute<'i>> {
// NOTE: we can't use borrow_mut_with here as we'll need
// because `self` is a mutable reference and we'll have
// two mutable references by passing it to the initializer
// closure.
if !self.items.filled() {
self.items
.fill(self.init_items())
.expect("Cell should be empty at this point");
}
let _ = self.items.get_or_init(|| self.init_items());

self.items
.borrow_mut()
.expect("Items should be initialized")
self.items.get_mut().expect("Items should be initialized")
}

#[cfg(test)]
Expand All @@ -252,7 +242,7 @@ impl<'i> Deref for Attributes<'i> {

#[inline]
fn deref(&self) -> &[Attribute<'i>] {
self.items.borrow_with(|| self.init_items())
self.items.get_or_init(|| self.init_items())
}
}

Expand Down
6 changes: 4 additions & 2 deletions src/rewriter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,13 +354,15 @@ mod tests {
use crate::test_utils::{Output, ASCII_COMPATIBLE_ENCODINGS, NON_ASCII_COMPATIBLE_ENCODINGS};
use encoding_rs::Encoding;
use itertools::Itertools;
use static_assertions::assert_impl_all;
use std::convert::TryInto;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::{Arc, Mutex};

// Assert that HtmlRewriter with `SendHandlerTypes` is `Send`.
assert_impl_all!(crate::send::HtmlRewriter<'_, Box<dyn FnMut(&[u8]) + Send>>: Send);
const _: () = {
const fn is_send<T: Send>() {}
is_send::<crate::send::HtmlRewriter<'_, Box<dyn FnMut(&[u8]) + Send>>>()
};

fn write_chunks<O: OutputSink>(
mut rewriter: HtmlRewriter<'_, O>,
Expand Down
20 changes: 8 additions & 12 deletions src/selectors_vm/attribute_matcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,19 @@ use super::compiler::AttrExprOperands;
use crate::base::Bytes;
use crate::html::Namespace;
use crate::parser::{AttributeBuffer, AttributeOutline};
use encoding_rs::UTF_8;
use lazy_static::lazy_static;
use lazycell::LazyCell;
use memchr::{memchr, memchr2};
use selectors::attr::CaseSensitivity;
use std::cell::OnceCell;

lazy_static! {
static ref ID_ATTR: Bytes<'static> = Bytes::from_str("id", UTF_8);
static ref CLASS_ATTR: Bytes<'static> = Bytes::from_str("class", UTF_8);
}
static ID_ATTR: Bytes<'static> = Bytes::from_static("id");
static CLASS_ATTR: Bytes<'static> = Bytes::from_static("class");

#[inline]
const fn is_attr_whitespace(b: u8) -> bool {
b == b' ' || b == b'\n' || b == b'\r' || b == b'\t' || b == b'\x0c'
}

type MemoizedAttrValue<'i> = LazyCell<Option<Bytes<'i>>>;
type MemoizedAttrValue<'i> = OnceCell<Option<Bytes<'i>>>;

pub(crate) struct AttributeMatcher<'i> {
input: &'i Bytes<'i>,
Expand All @@ -35,8 +31,8 @@ impl<'i> AttributeMatcher<'i> {
AttributeMatcher {
input,
attributes,
id: LazyCell::default(),
class: LazyCell::default(),
id: OnceCell::new(),
class: OnceCell::new(),
is_html_element: ns == Namespace::Html,
}
}
Expand Down Expand Up @@ -78,7 +74,7 @@ impl<'i> AttributeMatcher<'i> {
#[inline]
#[must_use]
pub fn has_id(&self, id: &Bytes<'_>) -> bool {
match self.id.borrow_with(|| self.get_value(&ID_ATTR)) {
match self.id.get_or_init(|| self.get_value(&ID_ATTR)) {
Some(actual_id) => actual_id == id,
None => false,
}
Expand All @@ -87,7 +83,7 @@ impl<'i> AttributeMatcher<'i> {
#[inline]
#[must_use]
pub fn has_class(&self, class_name: &Bytes<'_>) -> bool {
match self.class.borrow_with(|| self.get_value(&CLASS_ATTR)) {
match self.class.get_or_init(|| self.get_value(&CLASS_ATTR)) {
Some(class) => class
.split(|&b| is_attr_whitespace(b))
.any(|actual_class_name| actual_class_name == &**class_name),
Expand Down

0 comments on commit a6b93a1

Please sign in to comment.