MCPcopy Create free account
hub / github.com/PRQL/prql / write_decl

Function write_decl

prqlc/prqlc/src/debug/render_html.rs:469–519  ·  view source on GitHub ↗
(
    w: &mut W,
    decl: &decl::Decl,
    name: &String,
    span_map: &HashMap<usize, pr::Span>,
)

Source from the content-addressed store, hash-verified

467}
468
469fn write_decl<W: Write>(
470 w: &mut W,
471 decl: &decl::Decl,
472 name: &String,
473 span_map: &HashMap<usize, pr::Span>,
474) -> Result {
475 let open = if name != "std" { " open" } else { "" };
476 write!(w, r#"<details class="ast-node" {open} tabindex=2>"#)?;
477
478 // header
479 {
480 write!(w, "<summary class=header>")?;
481 write!(w, r#"<h2 class="clickable blue">{name}</h2>"#)?;
482
483 let span = decl.declared_at.as_ref().and_then(|id| span_map.get(id));
484 if let Some(span) = span {
485 write!(w, r#"<span class="span">{span:?}</span>"#)?;
486 }
487 write!(w, "</summary>")?; // header
488 }
489
490 {
491 write!(w, r#"<content class="contents indent">"#)?;
492 match &decl.kind {
493 decl::DeclKind::Module(m) => {
494 for (name, decl) in m.names.iter().sorted_by_key(|x| x.0.as_str()) {
495 write_decl(w, decl, name, span_map)?;
496 }
497 }
498 decl::DeclKind::Expr(expr) => {
499 let json = serde_json::to_string(expr).unwrap();
500 let json_node: serde_json::Value = serde_json::from_str(&json).unwrap();
501 write_json_ast_node(w, json_node, false)?;
502 }
503 decl::DeclKind::Ty(ty) => {
504 writeln!(w, r#"<span>{}</span>"#, escape_html(&codegen::write_ty(ty)))?;
505 }
506 decl::DeclKind::TableDecl(table_decl) => {
507 let json = serde_json::to_string(table_decl).unwrap();
508 let json_node: serde_json::Value = serde_json::from_str(&json).unwrap();
509 write_json_ast_node(w, json_node, false)?;
510 }
511 _ => {
512 write!(w, r#"<div>{}</div>"#, decl.kind)?;
513 }
514 }
515 write!(w, "</content>")?;
516 }
517
518 write!(w, "</details>")
519}
520
521fn escape_html(text: &str) -> String {
522 text.replace('&', "&amp;")

Callers 1

write_repr_declFunction · 0.85

Calls 4

write_json_ast_nodeFunction · 0.85
iterMethod · 0.80
as_strMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected