8000 Replace manual code generation with procedural macro (#567) · servo/html5ever@feced06 · GitHub
[go: up one dir, main page]

Skip to content

Commit feced06

Browse files
authored
Replace manual code generation with procedural macro (#567)
* Replace manual code generation with procedural macros This makes LSPs like rust-analyzer pick up the rules.rs file, making it much easier to edit. Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Format rules.rs Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
1 parent 8415d50 commit feced06

File tree

7 files changed

+105
-226
lines changed

7 files changed

+105
-226
lines changed

Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ members = [
33
"markup5ever",
44
"html5ever",
55
"rcdom",
6-
"xml5ever"
6+
"xml5ever",
7+
"match_token"
78
]
9+
10+
[workspace.dependencies]
11+
match_token = { path = "match_token" }
12+
813
resolver = "2"

html5ever/Cargo.toml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ license = "MIT OR Apache-2.0"
66
repository = "https://github.com/servo/html5ever"
77
description = "High-performance browser-grade HTML5 parser"
88
documentation = "https://docs.rs/html5ever"
9-
build = "build.rs"
109
categories = [ "parser-implementations", "web-programming" ]
1110
keywords = ["html", "html5", "parser", "parsing"]
1211
edition = "2021"
@@ -19,16 +18,12 @@ trace_tokenizer = []
1918
log = "0.4"
2019
mac = "0.1"
2120
markup5ever = { version = "0.14", path = "../markup5ever" }
21+
match_token = { workspace = true }
2222

2323
[dev-dependencies]
2424
criterion = "0.5"
2525
typed-arena = "2.0.2"
2626

27-
[build-dependencies]
28-
quote = "1"
29-
syn = { version = "2", features = ["extra-traits", "full", "fold"] }
30-
proc-macro2 = "1"
31-
3227
[[bench]]
3328
name = "html5ever"
3429
harness = false

html5ever/build.rs

Lines changed: 0 additions & 39 deletions
This file was deleted.

html5ever/src/tree_builder/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,9 @@ pub use self::PushFlag::*;
4343
mod tag_sets;
4444

4545
mod data;
46+
mod rules;
4647
mod types;
4748

48-
#[allow(warnings)]
49-
mod autogenerated {
50-
include!(concat!(env!("OUT_DIR"), "/rules.rs"));
51-
}
52-
5349
/// Tree builder options, with an impl for Default.
5450
#[derive(Copy, Clone)]
5551
pub struct TreeBuilderOpts {

html5ever/src/tree_builder/rules.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
// The tree builder rules, as a single, enormous nested match expression.
1111

1212
use crate::interface::Quirks;
13-
use crate::tokenizer::states::{Plaintext, Rawtext, Rcdata, ScriptData};
13+
use crate::tokenizer::states::{Rawtext, Rcdata, ScriptData};
1414
use crate::tokenizer::TagKind::{EndTag, StartTag};
1515
use crate::tree_builder::tag_sets::*;
1616
use crate::tree_builder::types::*;
@@ -19,12 +19,11 @@ use crate::tree_builder::{
1919
TreeSink,
2020
};
2121
use crate::QualName;
22-
use markup5ever::{expanded_name, local_name, namespace_prefix, namespace_url, ns};
22+
use markup5ever::{expanded_name, local_name, namespace_url, ns};
2323
use std::borrow::Cow::Borrowed;
2424

25-
use std::borrow::ToOwned;
26-
2725
use crate::tendril::SliceExt;
26+
use match_token::match_token;
2827

2928
fn any_not_whitespace(x: &StrTendril) -> bool {
3029
// FIXME: this might be much faster as a byte scan
@@ -421,12 +420,9 @@ where
421420
}
422421
}
423422

424-
match to_close {
425-
Some(name) => {
426-
self.generate_implied_end_except(name.clone());
427-
self.expect_to_close(name);
428-
}
429-
None => (),
423+
if let Some(name) = to_close {
424+
self.generate_implied_end_except(name.clone());
425+
self.expect_to_close(name);
430426
}
431427

432428
self.close_p_element_in_button_scope();

match_token/Cargo.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "match_token"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
syn = "2"
8+
quote = "1"
9+
proc-macro2 = "1"
10+
11+
[lib]
12+
proc-macro = true

0 commit comments

Comments
 (0)
0