mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-02 00:01:16 +00:00
51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
use roc_ast::{
|
|
ast_error::ASTResult,
|
|
lang::{
|
|
core::{
|
|
ast::ASTNodeId,
|
|
pattern::{get_identifier_string, PatternId},
|
|
},
|
|
env::Env,
|
|
},
|
|
};
|
|
use roc_module::symbol::Interns;
|
|
|
|
use crate::{
|
|
markup::{attribute::Attributes, common_nodes::new_equals_mn, nodes::MarkupNode},
|
|
slow_pool::{MarkNodeId, SlowPool},
|
|
syntax_highlight::HighlightStyle,
|
|
};
|
|
|
|
pub fn tld_mark_node<'a>(
|
|
identifier_id: PatternId,
|
|
expr_mark_node_id: MarkNodeId,
|
|
ast_node_id: ASTNodeId,
|
|
mark_node_pool: &mut SlowPool,
|
|
env: &Env<'a>,
|
|
interns: &Interns,
|
|
) -> ASTResult<MarkupNode> {
|
|
let pattern2 = env.pool.get(identifier_id);
|
|
let val_name = get_identifier_string(pattern2, interns)?;
|
|
|
|
let val_name_mn = MarkupNode::Text {
|
|
content: val_name,
|
|
ast_node_id,
|
|
syn_high_style: HighlightStyle::Variable,
|
|
attributes: Attributes::default(),
|
|
parent_id_opt: None,
|
|
newlines_at_end: 0,
|
|
};
|
|
|
|
let val_name_mn_id = mark_node_pool.add(val_name_mn);
|
|
|
|
let equals_mn_id = mark_node_pool.add(new_equals_mn(ast_node_id, None));
|
|
|
|
let full_let_node = MarkupNode::Nested {
|
|
ast_node_id,
|
|
children_ids: vec![val_name_mn_id, equals_mn_id, expr_mark_node_id],
|
|
parent_id_opt: None,
|
|
newlines_at_end: 2,
|
|
};
|
|
|
|
Ok(full_let_node)
|
|
}
|