Skip to content

Commit

Permalink
Use delegate crate to slightly reduce boilerplate
Browse files Browse the repository at this point in the history
But since it's a macro, `cargo fmt` can't get inside of it?
  • Loading branch information
domenic committed Feb 15, 2024
1 parent 6b334fb commit edd0fd3
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 87 deletions.
12 changes: 12 additions & 0 deletions 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 Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ tokio = { version = "1", features = ["full"] }
html5ever = "0.26.0"
markup5ever_rcdom = "0.2.0"
regex = "1"
delegate = "0.12.0"

[dev-dependencies]
tempfile = "3"
136 changes: 49 additions & 87 deletions src/rcdom_with_line_numbers.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// This provides a wrapper around RcDom which tracks line numbers in the errors.

use delegate::delegate;
use html5ever::interface::TreeSink;
use html5ever::{
tendril::StrTendril,
Expand Down Expand Up @@ -69,111 +70,72 @@ impl TreeSink for RcDomWithLineNumbers {
self
}

// Forward all other methods to RcDom.
// Delegate all other methods to RcDom.
delegate! {
to self.dom {
fn get_document(&mut self) -> Self::Handle;

fn get_document(&mut self) -> Self::Handle {
self.dom.get_document()
}
fn elem_name<'a>(&'a self, target: &'a Self::Handle) -> ExpandedName<'a>;

fn elem_name<'a>(&'a self, target: &'a Self::Handle) -> ExpandedName<'a> {
self.dom.elem_name(target)
}
fn create_element(
&mut self,
name: QualName,
attrs: Vec<Attribute>,
flags: ElementFlags,
) -> Self::Handle;

fn create_element(
&mut self,
name: QualName,
attrs: Vec<Attribute>,
flags: ElementFlags,
) -> Self::Handle {
self.dom.create_element(name, attrs, flags)
}
fn create_comment(&mut self, text: StrTendril) -> Self::Handle;

fn create_comment(&mut self, text: StrTendril) -> Self::Handle {
self.dom.create_comment(text)
}
fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Self::Handle;

fn create_pi(&mut self, target: StrTendril, data: StrTendril) -> Self::Handle {
self.dom.create_pi(target, data)
}
fn append(&mut self, parent: &Self::Handle, child: NodeOrText<Self::Handle>);

fn append(&mut self, parent: &Self::Handle, child: NodeOrText<Self::Handle>) {
self.dom.append(parent, child)
}
fn append_based_on_parent_node(
&mut self,
element: &Self::Handle,
prev_element: &Self::Handle,
child: NodeOrText<Self::Handle>,
);

fn append_based_on_parent_node(
&mut self,
element: &Self::Handle,
prev_element: &Self::Handle,
child: NodeOrText<Self::Handle>,
) {
self.dom
.append_based_on_parent_node(element, prev_element, child)
}
fn append_doctype_to_document(
&mut self,
name: StrTendril,
public_id: StrTendril,
system_id: StrTendril,
);

fn append_doctype_to_document(
&mut self,
name: StrTendril,
public_id: StrTendril,
system_id: StrTendril,
) {
self.dom
.append_doctype_to_document(name, public_id, system_id)
}
fn mark_script_already_started(&mut self, node: &Self::Handle);

fn mark_script_already_started(&mut self, node: &Self::Handle) {
self.dom.mark_script_already_started(node)
}
fn pop(&mut self, node: &Self::Handle);

fn pop(&mut self, node: &Self::Handle) {
self.dom.pop(node)
}
fn get_template_contents(&mut self, target: &Self::Handle) -> Self::Handle;

fn get_template_contents(&mut self, target: &Self::Handle) -> Self::Handle {
self.dom.get_template_contents(target)
}
fn same_node(&self, x: &Self::Handle, y: &Self::Handle) -> bool;

fn same_node(&self, x: &Self::Handle, y: &Self::Handle) -> bool {
self.dom.same_node(x, y)
}
fn set_quirks_mode(&mut self, mode: QuirksMode);

fn set_quirks_mode(&mut self, mode: QuirksMode) {
self.dom.set_quirks_mode(mode)
}
fn append_before_sibling(
&mut self,
sibling: &Self::Handle,
new_node: NodeOrText<Self::Handle>,
);

fn append_before_sibling(
&mut self,
sibling: &Self::Handle,
new_node: NodeOrText<Self::Handle>,
) {
self.dom.append_before_sibling(sibling, new_node)
}

fn add_attrs_if_missing(&mut self, target: &Self::Handle, attrs: Vec<Attribute>) {
self.dom.add_attrs_if_missing(target, attrs)
}
fn add_attrs_if_missing(&mut self, target: &Self::Handle, attrs: Vec<Attribute>);

fn associate_with_form(
&mut self,
target: &Self::Handle,
form: &Self::Handle,
nodes: (&Self::Handle, Option<&Self::Handle>),
) {
self.dom.associate_with_form(target, form, nodes)
}
fn associate_with_form(
&mut self,
target: &Self::Handle,
form: &Self::Handle,
nodes: (&Self::Handle, Option<&Self::Handle>),
);

fn remove_from_parent(&mut self, target: &Self::Handle) {
self.dom.remove_from_parent(target)
}
fn remove_from_parent(&mut self, target: &Self::Handle);

fn reparent_children(&mut self, node: &Self::Handle, new_parent: &Self::Handle) {
self.dom.reparent_children(node, new_parent)
}
fn reparent_children(&mut self, node: &Self::Handle, new_parent: &Self::Handle);

fn is_mathml_annotation_xml_integration_point(&self, handle: &Self::Handle) -> bool {
self.dom.is_mathml_annotation_xml_integration_point(handle)
}
fn is_mathml_annotation_xml_integration_point(&self, handle: &Self::Handle) -> bool;

fn complete_script(&mut self, node: &Self::Handle) -> NextParserState {
self.dom.complete_script(node)
fn complete_script(&mut self, node: &Self::Handle) -> NextParserState;
}
}
}

0 comments on commit edd0fd3

Please sign in to comment.