mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
74 lines
2 KiB
Rust
74 lines
2 KiB
Rust
use crate::html::mark_node_to_html;
|
|
use bumpalo::{collections::String as BumpString, Bump};
|
|
use roc_ast::{
|
|
ast_error::ASTResult,
|
|
lang::{self, core::expr::expr_to_expr2::expr_to_expr2},
|
|
mem_pool::pool::Pool,
|
|
};
|
|
use roc_code_markup::{markup::convert::from_expr2::expr2_to_markup, slow_pool::SlowPool};
|
|
use roc_module::symbol::{IdentIds, Interns, ModuleId, ModuleIds};
|
|
use roc_parse::ast::Expr;
|
|
use roc_region::all::Region;
|
|
use roc_types::subs::VarStore;
|
|
|
|
// html is written to buf
|
|
pub fn expr_to_html<'a>(
|
|
buf: &mut BumpString<'a>,
|
|
expr: Expr<'a>,
|
|
env_module_id: ModuleId,
|
|
env_module_ids: &'a ModuleIds,
|
|
interns: &Interns,
|
|
) {
|
|
let mut env_pool = Pool::with_capacity(1024);
|
|
let env_arena = Bump::new();
|
|
|
|
let mut var_store = VarStore::default();
|
|
let dep_idents = IdentIds::exposed_builtins(8);
|
|
let exposed_ident_ids = IdentIds::default();
|
|
|
|
let mut env = lang::env::Env::new(
|
|
env_module_id,
|
|
&env_arena,
|
|
&mut env_pool,
|
|
&mut var_store,
|
|
dep_idents,
|
|
env_module_ids,
|
|
exposed_ident_ids,
|
|
);
|
|
|
|
let mut scope = lang::scope::Scope::new(env.home, env.pool, env.var_store);
|
|
let region = Region::zero();
|
|
|
|
// TODO remove unwrap
|
|
write_expr_to_bump_str_html(&mut env, &mut scope, region, &expr, interns, buf).unwrap();
|
|
}
|
|
|
|
fn write_expr_to_bump_str_html<'a, 'b>(
|
|
env: &mut lang::env::Env<'a>,
|
|
scope: &mut lang::scope::Scope,
|
|
region: Region,
|
|
expr: &'a Expr,
|
|
interns: &Interns,
|
|
buf: &mut BumpString<'b>,
|
|
) -> ASTResult<()> {
|
|
let (expr2, _) = expr_to_expr2(env, scope, expr, region);
|
|
|
|
let expr2_id = env.pool.add(expr2);
|
|
|
|
let mut mark_node_pool = SlowPool::default();
|
|
|
|
let expr2_markup_id = expr2_to_markup(
|
|
env,
|
|
env.pool.get(expr2_id),
|
|
expr2_id,
|
|
&mut mark_node_pool,
|
|
interns,
|
|
0,
|
|
)?;
|
|
|
|
let expr2_markup_node = mark_node_pool.get(expr2_markup_id);
|
|
|
|
mark_node_to_html(expr2_markup_node, &mark_node_pool, buf);
|
|
|
|
Ok(())
|
|
}
|