MCPcopy Create free account
hub / github.com/csskit/csskit / main

Function main

crates/css_ast/build.rs:20–227  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

18}
19
20fn main() {
21 println!("cargo::rerun-if-changed=build.rs");
22
23 // Find all visitable nodes (for Visit trait)
24 let mut all_visitable = HashSet::<_>::new();
25 find_visitable_nodes("src/**/*.rs", &mut all_visitable, |path: &PathBuf| {
26 println!("cargo::rerun-if-changed={}", path.display());
27 });
28
29 // Find only queryable nodes (for NodeId enum and QueryableNode trait)
30 let mut queryable = HashSet::<_>::new();
31 find_queryable_nodes("src/**/*.rs", &mut queryable, |_| {});
32
33 // NodeId enum - only queryable types
34 {
35 let variants = queryable.iter().enumerate().map(|(idx, node)| {
36 let ident = node.ident();
37 let discriminant = idx as isize;
38 quote! { #ident = #discriminant }
39 });
40
41 let tag_name_cases = queryable.iter().map(|node| {
42 let ident = node.ident();
43 let tag_name = ident.to_string().to_kebab_case();
44 quote! { Self::#ident => #tag_name }
45 });
46
47 let from_tag_name_cases = queryable.iter().map(|node| {
48 let ident = node.ident();
49 let tag_name = ident.to_string().to_kebab_case();
50 quote! { #tag_name => Some(Self::#ident) }
51 });
52
53 let all_tags = queryable.iter().map(|node| {
54 let ident = node.ident();
55 quote! { Self::#ident }
56 });
57
58 let display_arms = queryable.iter().map(|node| {
59 let ident = node.ident();
60 let ident_str = ident.to_string();
61 quote! { Self::#ident => write!(f, #ident_str) }
62 });
63
64 #[rustfmt::skip]
65 let source = quote! {
66 /// Unique identifier for each AST node type that can be queried.
67 ///
68 /// This enum is automatically generated from types that derive `Visitable`
69 /// and have `#[visit]`, `#[visit(self)]`, or `#[visit(all)]` attributes.
70 /// Each variant has a unique discriminant value assigned at build time.
71 #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
72 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
73 pub enum NodeId {
74 #(#variants),*
75 }
76
77 impl std::fmt::Display for NodeId {

Callers

nothing calls this directly

Calls 8

find_visitable_nodesFunction · 0.85
find_queryable_nodesFunction · 0.85
write_tokensFunction · 0.85
iterMethod · 0.80
genericsMethod · 0.80
collectMethod · 0.80
identMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected