mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 07:14:46 +00:00
bug fixes, updated tests
This commit is contained in:
parent
3c858cff96
commit
6d6ae5d5c0
19 changed files with 1074 additions and 974 deletions
|
@ -589,9 +589,10 @@ impl IdentIds {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
None => Err(format!(
|
||||||
Err(format!("Tried to update key in IdentIds ({:?}) but I could not find the key ({}).", self.by_ident, old_ident_name))
|
"Tried to update key in IdentIds ({:?}) but I could not find the key ({}).",
|
||||||
}
|
self.by_ident, old_ident_name
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ use snafu::{Backtrace, ErrorCompat, NoneError, ResultExt, Snafu};
|
||||||
#[derive(Debug, Snafu)]
|
#[derive(Debug, Snafu)]
|
||||||
#[snafu(visibility(pub))]
|
#[snafu(visibility(pub))]
|
||||||
pub enum EdError {
|
pub enum EdError {
|
||||||
|
|
||||||
#[snafu(display(
|
#[snafu(display(
|
||||||
"ASTNodeIdWithoutDefId: The expr_id_opt in ASTNode({:?}) was `None` but I was expexting `Some(DefId)` .",
|
"ASTNodeIdWithoutDefId: The expr_id_opt in ASTNode({:?}) was `None` but I was expexting `Some(DefId)` .",
|
||||||
ast_node_id
|
ast_node_id
|
||||||
|
|
|
@ -166,10 +166,7 @@ impl GridNodeMap {
|
||||||
let (first_node_index, last_node_index) = first_last_index_of(*node_id, line)?;
|
let (first_node_index, last_node_index) = first_last_index_of(*node_id, line)?;
|
||||||
|
|
||||||
let curr_node_id = slice_get(first_node_index, line)?;
|
let curr_node_id = slice_get(first_node_index, line)?;
|
||||||
let curr_ast_node_id = ed_model
|
let curr_ast_node_id = ed_model.mark_node_pool.get(*curr_node_id).get_ast_node_id();
|
||||||
.mark_node_pool
|
|
||||||
.get(*curr_node_id)
|
|
||||||
.get_ast_node_id();
|
|
||||||
|
|
||||||
let mut expr_start_index = first_node_index;
|
let mut expr_start_index = first_node_index;
|
||||||
let mut expr_end_index = last_node_index;
|
let mut expr_end_index = last_node_index;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
use crate::{editor::{slow_pool::MarkNodeId, syntax_highlight::HighlightStyle}, lang::{ast::ExprId, parse::ASTNodeId}};
|
use crate::{
|
||||||
|
editor::{slow_pool::MarkNodeId, syntax_highlight::HighlightStyle},
|
||||||
|
lang::{ast::ExprId, parse::ASTNodeId},
|
||||||
|
};
|
||||||
|
|
||||||
use super::{attribute::Attributes, nodes, nodes::MarkupNode};
|
use super::{attribute::Attributes, nodes, nodes::MarkupNode};
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ use crate::editor::markup::common_nodes::new_left_accolade_mn;
|
||||||
use crate::editor::markup::common_nodes::new_left_square_mn;
|
use crate::editor::markup::common_nodes::new_left_square_mn;
|
||||||
use crate::editor::markup::common_nodes::new_right_accolade_mn;
|
use crate::editor::markup::common_nodes::new_right_accolade_mn;
|
||||||
use crate::editor::markup::common_nodes::new_right_square_mn;
|
use crate::editor::markup::common_nodes::new_right_square_mn;
|
||||||
|
use crate::editor::mvc::tld_value_update::tld_mark_node;
|
||||||
use crate::editor::slow_pool::MarkNodeId;
|
use crate::editor::slow_pool::MarkNodeId;
|
||||||
use crate::editor::slow_pool::SlowPool;
|
use crate::editor::slow_pool::SlowPool;
|
||||||
use crate::editor::syntax_highlight::HighlightStyle;
|
use crate::editor::syntax_highlight::HighlightStyle;
|
||||||
|
@ -20,7 +21,6 @@ use crate::lang::ast::DefId;
|
||||||
use crate::lang::ast::ExprId;
|
use crate::lang::ast::ExprId;
|
||||||
use crate::lang::ast::RecordField;
|
use crate::lang::ast::RecordField;
|
||||||
use crate::lang::ast::ValueDef;
|
use crate::lang::ast::ValueDef;
|
||||||
use crate::editor::mvc::tld_value_update::tld_mark_node;
|
|
||||||
use crate::lang::parse::ASTNodeId;
|
use crate::lang::parse::ASTNodeId;
|
||||||
use crate::lang::parse::{AppHeader, AST};
|
use crate::lang::parse::{AppHeader, AST};
|
||||||
use crate::lang::pattern::get_identifier_string;
|
use crate::lang::pattern::get_identifier_string;
|
||||||
|
@ -285,12 +285,13 @@ pub fn def2_to_markup<'a, 'b>(
|
||||||
mark_node_pool: &mut SlowPool,
|
mark_node_pool: &mut SlowPool,
|
||||||
interns: &Interns,
|
interns: &Interns,
|
||||||
) -> EdResult<MarkNodeId> {
|
) -> EdResult<MarkNodeId> {
|
||||||
|
|
||||||
let ast_node_id = ASTNodeId::ADefId(def2_node_id);
|
let ast_node_id = ASTNodeId::ADefId(def2_node_id);
|
||||||
|
|
||||||
let mark_node_id = match def2 {
|
let mark_node_id = match def2 {
|
||||||
Def2::ValueDef { identifier_id, expr_id } => {
|
Def2::ValueDef {
|
||||||
|
identifier_id,
|
||||||
|
expr_id,
|
||||||
|
} => {
|
||||||
let expr_mn_id = expr2_to_markup(
|
let expr_mn_id = expr2_to_markup(
|
||||||
arena,
|
arena,
|
||||||
env,
|
env,
|
||||||
|
@ -303,18 +304,18 @@ pub fn def2_to_markup<'a, 'b>(
|
||||||
let expr_mn = mark_node_pool.get_mut(expr_mn_id);
|
let expr_mn = mark_node_pool.get_mut(expr_mn_id);
|
||||||
expr_mn.add_newline_at_end();
|
expr_mn.add_newline_at_end();
|
||||||
|
|
||||||
|
let tld_mn = tld_mark_node(
|
||||||
|
*identifier_id,
|
||||||
|
expr_mn_id,
|
||||||
|
ast_node_id,
|
||||||
|
mark_node_pool,
|
||||||
|
env,
|
||||||
|
interns,
|
||||||
|
)?;
|
||||||
|
|
||||||
let tld_mn = tld_mark_node(*identifier_id, expr_mn_id, ast_node_id, mark_node_pool, env, interns)?;
|
mark_node_pool.add(tld_mn)
|
||||||
|
}
|
||||||
mark_node_pool.add(
|
Def2::Blank => mark_node_pool.add(new_blank_mn_w_nl(ast_node_id, None)),
|
||||||
tld_mn
|
|
||||||
)
|
|
||||||
},
|
|
||||||
Def2::Blank => {
|
|
||||||
mark_node_pool.add(
|
|
||||||
new_blank_mn_w_nl(ast_node_id, None)
|
|
||||||
)
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(mark_node_id)
|
Ok(mark_node_id)
|
||||||
|
@ -329,7 +330,6 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
mark_node_pool: &mut SlowPool,
|
mark_node_pool: &mut SlowPool,
|
||||||
interns: &Interns,
|
interns: &Interns,
|
||||||
) -> EdResult<MarkNodeId> {
|
) -> EdResult<MarkNodeId> {
|
||||||
|
|
||||||
let ast_node_id = ASTNodeId::AExprId(expr2_node_id);
|
let ast_node_id = ASTNodeId::AExprId(expr2_node_id);
|
||||||
|
|
||||||
let mark_node_id = match expr2 {
|
let mark_node_id = match expr2 {
|
||||||
|
@ -339,12 +339,7 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
| Expr2::Float { text, .. } => {
|
| Expr2::Float { text, .. } => {
|
||||||
let num_str = get_string(env, text);
|
let num_str = get_string(env, text);
|
||||||
|
|
||||||
new_markup_node(
|
new_markup_node(num_str, ast_node_id, HighlightStyle::Number, mark_node_pool)
|
||||||
num_str,
|
|
||||||
ast_node_id,
|
|
||||||
HighlightStyle::Number,
|
|
||||||
mark_node_pool,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
Expr2::Str(text) => new_markup_node(
|
Expr2::Str(text) => new_markup_node(
|
||||||
"\"".to_owned() + text.as_str(env.pool) + "\"",
|
"\"".to_owned() + text.as_str(env.pool) + "\"",
|
||||||
|
@ -365,12 +360,7 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
Expr2::Var(symbol) => {
|
Expr2::Var(symbol) => {
|
||||||
//TODO make bump_format with arena
|
//TODO make bump_format with arena
|
||||||
let text = format!("{:?}", symbol);
|
let text = format!("{:?}", symbol);
|
||||||
new_markup_node(
|
new_markup_node(text, ast_node_id, HighlightStyle::Variable, mark_node_pool)
|
||||||
text,
|
|
||||||
ast_node_id,
|
|
||||||
HighlightStyle::Variable,
|
|
||||||
mark_node_pool,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
Expr2::List { elems, .. } => {
|
Expr2::List { elems, .. } => {
|
||||||
let mut children_ids =
|
let mut children_ids =
|
||||||
|
@ -398,7 +388,7 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
children_ids.push(mark_node_pool.add(new_right_square_mn(expr2_node_id, None)));
|
children_ids.push(mark_node_pool.add(new_right_square_mn(expr2_node_id, None)));
|
||||||
|
|
||||||
let list_node = MarkupNode::Nested {
|
let list_node = MarkupNode::Nested {
|
||||||
ast_node_id: ast_node_id,
|
ast_node_id,
|
||||||
children_ids,
|
children_ids,
|
||||||
parent_id_opt: None,
|
parent_id_opt: None,
|
||||||
newline_at_end: false,
|
newline_at_end: false,
|
||||||
|
@ -463,7 +453,7 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
children_ids.push(mark_node_pool.add(new_right_accolade_mn(expr2_node_id, None)));
|
children_ids.push(mark_node_pool.add(new_right_accolade_mn(expr2_node_id, None)));
|
||||||
|
|
||||||
let record_node = MarkupNode::Nested {
|
let record_node = MarkupNode::Nested {
|
||||||
ast_node_id: ast_node_id,
|
ast_node_id,
|
||||||
children_ids,
|
children_ids,
|
||||||
parent_id_opt: None,
|
parent_id_opt: None,
|
||||||
newline_at_end: false,
|
newline_at_end: false,
|
||||||
|
@ -474,10 +464,9 @@ pub fn expr2_to_markup<'a, 'b>(
|
||||||
Expr2::Blank => mark_node_pool.add(new_blank_mn(ast_node_id, None)),
|
Expr2::Blank => mark_node_pool.add(new_blank_mn(ast_node_id, None)),
|
||||||
Expr2::LetValue {
|
Expr2::LetValue {
|
||||||
def_id,
|
def_id,
|
||||||
body_id:_,
|
body_id: _,
|
||||||
body_var:_,
|
body_var: _,
|
||||||
} => {
|
} => {
|
||||||
|
|
||||||
let pattern_id = env.pool.get(*def_id).get_pattern_id();
|
let pattern_id = env.pool.get(*def_id).get_pattern_id();
|
||||||
|
|
||||||
let pattern2 = env.pool.get(pattern_id);
|
let pattern2 = env.pool.get(pattern_id);
|
||||||
|
@ -726,7 +715,11 @@ pub fn header_to_markup(app_header: &AppHeader, mark_node_pool: &mut SlowPool) -
|
||||||
|
|
||||||
let provides_val_node_id = header_val_mn(
|
let provides_val_node_id = header_val_mn(
|
||||||
// TODO iter over provides like with imports
|
// TODO iter over provides like with imports
|
||||||
app_header.provides.first().unwrap_or(&String::new()).to_owned(),
|
app_header
|
||||||
|
.provides
|
||||||
|
.first()
|
||||||
|
.unwrap_or(&String::new())
|
||||||
|
.to_owned(),
|
||||||
expr_id,
|
expr_id,
|
||||||
HighlightStyle::Provides,
|
HighlightStyle::Provides,
|
||||||
mark_node_pool,
|
mark_node_pool,
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::editor::{
|
||||||
};
|
};
|
||||||
use crate::graphics::primitives::rect::Rect;
|
use crate::graphics::primitives::rect::Rect;
|
||||||
use crate::lang::expr::Env;
|
use crate::lang::expr::Env;
|
||||||
use crate::lang::parse::{AST, ASTNodeId};
|
use crate::lang::parse::{ASTNodeId, AST};
|
||||||
use crate::lang::pool::PoolStr;
|
use crate::lang::pool::PoolStr;
|
||||||
use crate::ui::text::caret_w_select::{CaretPos, CaretWSelect};
|
use crate::ui::text::caret_w_select::{CaretPos, CaretWSelect};
|
||||||
use crate::ui::text::lines::SelectableLines;
|
use crate::ui::text::lines::SelectableLines;
|
||||||
|
@ -256,18 +256,14 @@ pub mod test_ed_model {
|
||||||
|
|
||||||
pub fn ed_model_from_dsl<'a>(
|
pub fn ed_model_from_dsl<'a>(
|
||||||
clean_code_str: &'a mut String,
|
clean_code_str: &'a mut String,
|
||||||
code_lines: &[&str],
|
code_lines: Vec<String>,
|
||||||
ed_model_refs: &'a mut EdModelRefs,
|
ed_model_refs: &'a mut EdModelRefs,
|
||||||
module_ids: &'a ModuleIds,
|
module_ids: &'a ModuleIds,
|
||||||
code_arena: &'a Bump,
|
code_arena: &'a Bump,
|
||||||
) -> Result<EdModel<'a>, String> {
|
) -> Result<EdModel<'a>, String> {
|
||||||
let code_lines_vec: Vec<String> = (*code_lines).iter().map(|s| s.to_string()).collect();
|
|
||||||
|
|
||||||
let full_code = vec![HELLO_WORLD, clean_code_str.as_str()];
|
let full_code = vec![HELLO_WORLD, clean_code_str.as_str()];
|
||||||
*clean_code_str = full_code.join("\n");
|
*clean_code_str = full_code.join("\n");
|
||||||
|
|
||||||
dbg!(&clean_code_str);
|
|
||||||
|
|
||||||
let temp_dir = tempdir().expect("Failed to create temporary directory for test.");
|
let temp_dir = tempdir().expect("Failed to create temporary directory for test.");
|
||||||
let temp_file_path_buf =
|
let temp_file_path_buf =
|
||||||
PathBuf::from([Uuid::new_v4().to_string(), ".roc".to_string()].join(""));
|
PathBuf::from([Uuid::new_v4().to_string(), ".roc".to_string()].join(""));
|
||||||
|
@ -294,7 +290,7 @@ pub mod test_ed_model {
|
||||||
|
|
||||||
// adjust for header and main function
|
// adjust for header and main function
|
||||||
let nr_hello_world_lines = HELLO_WORLD.matches('\n').count() - 1;
|
let nr_hello_world_lines = HELLO_WORLD.matches('\n').count() - 1;
|
||||||
let caret_w_select = convert_dsl_to_selection(&code_lines_vec)?;
|
let caret_w_select = convert_dsl_to_selection(&code_lines)?;
|
||||||
let adjusted_caret_pos = TextPos {
|
let adjusted_caret_pos = TextPos {
|
||||||
line: caret_w_select.caret_pos.line + nr_hello_world_lines,
|
line: caret_w_select.caret_pos.line + nr_hello_world_lines,
|
||||||
column: caret_w_select.caret_pos.column,
|
column: caret_w_select.caret_pos.column,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -38,7 +38,11 @@ pub fn start_new_int(ed_model: &mut EdModel, digit_char: &char) -> EdResult<Inpu
|
||||||
text: PoolStr::new(&digit_string, &mut ed_model.module.env.pool),
|
text: PoolStr::new(&digit_string, &mut ed_model.module.env.pool),
|
||||||
};
|
};
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, expr2_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, expr2_node);
|
||||||
|
|
||||||
let int_node = MarkupNode::Text {
|
let int_node = MarkupNode::Text {
|
||||||
content: digit_string,
|
content: digit_string,
|
||||||
|
@ -112,7 +116,11 @@ pub fn update_int(
|
||||||
|
|
||||||
// update ast
|
// update ast
|
||||||
let new_pool_str = PoolStr::new(&content_str, ed_model.module.env.pool);
|
let new_pool_str = PoolStr::new(&content_str, ed_model.module.env.pool);
|
||||||
let int_ast_node = ed_model.module.env.pool.get_mut(int_ast_node_id.to_expr_id()?);
|
let int_ast_node = ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.get_mut(int_ast_node_id.to_expr_id()?);
|
||||||
match int_ast_node {
|
match int_ast_node {
|
||||||
SmallInt { number, text, .. } => {
|
SmallInt { number, text, .. } => {
|
||||||
update_small_int_num(number, &content_str)?;
|
update_small_int_num(number, &content_str)?;
|
||||||
|
|
|
@ -59,7 +59,11 @@ pub fn start_new_let_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<
|
||||||
body_var: ed_model.module.env.var_store.fresh(),
|
body_var: ed_model.module.env.var_store.fresh(),
|
||||||
};
|
};
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, expr2_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, expr2_node);
|
||||||
|
|
||||||
let val_name_mark_node = MarkupNode::Text {
|
let val_name_mark_node = MarkupNode::Text {
|
||||||
content: val_name_string,
|
content: val_name_string,
|
||||||
|
@ -74,8 +78,10 @@ pub fn start_new_let_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<
|
||||||
|
|
||||||
let equals_mn_id = ed_model.add_mark_node(new_equals_mn(ast_node_id, Some(curr_mark_node_id)));
|
let equals_mn_id = ed_model.add_mark_node(new_equals_mn(ast_node_id, Some(curr_mark_node_id)));
|
||||||
|
|
||||||
let body_mn_id =
|
let body_mn_id = ed_model.add_mark_node(new_blank_mn_w_nl(
|
||||||
ed_model.add_mark_node(new_blank_mn_w_nl(ASTNodeId::AExprId(val_expr_id), Some(curr_mark_node_id)));
|
ASTNodeId::AExprId(val_expr_id),
|
||||||
|
Some(curr_mark_node_id),
|
||||||
|
));
|
||||||
|
|
||||||
let val_mark_node = MarkupNode::Nested {
|
let val_mark_node = MarkupNode::Nested {
|
||||||
ast_node_id,
|
ast_node_id,
|
||||||
|
|
|
@ -10,8 +10,8 @@ use crate::editor::mvc::ed_model::EdModel;
|
||||||
use crate::editor::mvc::ed_update::get_node_context;
|
use crate::editor::mvc::ed_update::get_node_context;
|
||||||
use crate::editor::mvc::ed_update::NodeContext;
|
use crate::editor::mvc::ed_update::NodeContext;
|
||||||
use crate::editor::slow_pool::MarkNodeId;
|
use crate::editor::slow_pool::MarkNodeId;
|
||||||
use crate::lang::ast::{Expr2, ast_node_to_string};
|
use crate::lang::ast::ExprId;
|
||||||
use crate::lang::ast::{ExprId};
|
use crate::lang::ast::{ast_node_to_string, Expr2};
|
||||||
use crate::lang::parse::ASTNodeId;
|
use crate::lang::parse::ASTNodeId;
|
||||||
use crate::lang::pool::PoolVec;
|
use crate::lang::pool::PoolVec;
|
||||||
use crate::ui::text::text_pos::TextPos;
|
use crate::ui::text::text_pos::TextPos;
|
||||||
|
@ -33,13 +33,21 @@ pub fn start_new_list(ed_model: &mut EdModel) -> EdResult<InputOutcome> {
|
||||||
elems: PoolVec::empty(ed_model.module.env.pool),
|
elems: PoolVec::empty(ed_model.module.env.pool),
|
||||||
};
|
};
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, expr2_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, expr2_node);
|
||||||
|
|
||||||
let left_bracket_node_id =
|
let left_bracket_node_id = ed_model.add_mark_node(new_left_square_mn(
|
||||||
ed_model.add_mark_node(new_left_square_mn(ast_node_id.to_expr_id()?, Some(curr_mark_node_id)));
|
ast_node_id.to_expr_id()?,
|
||||||
|
Some(curr_mark_node_id),
|
||||||
|
));
|
||||||
|
|
||||||
let right_bracket_node_id =
|
let right_bracket_node_id = ed_model.add_mark_node(new_right_square_mn(
|
||||||
ed_model.add_mark_node(new_right_square_mn(ast_node_id.to_expr_id()?, Some(curr_mark_node_id)));
|
ast_node_id.to_expr_id()?,
|
||||||
|
Some(curr_mark_node_id),
|
||||||
|
));
|
||||||
|
|
||||||
let nested_node = MarkupNode::Nested {
|
let nested_node = MarkupNode::Nested {
|
||||||
ast_node_id,
|
ast_node_id,
|
||||||
|
@ -181,7 +189,10 @@ pub fn update_mark_children(
|
||||||
parent_id_opt: Option<MarkNodeId>,
|
parent_id_opt: Option<MarkNodeId>,
|
||||||
ed_model: &mut EdModel,
|
ed_model: &mut EdModel,
|
||||||
) -> EdResult<Vec<MarkNodeId>> {
|
) -> EdResult<Vec<MarkNodeId>> {
|
||||||
let blank_mark_node_id = ed_model.add_mark_node(new_blank_mn(ASTNodeId::AExprId(blank_elt_id), parent_id_opt));
|
let blank_mark_node_id = ed_model.add_mark_node(new_blank_mn(
|
||||||
|
ASTNodeId::AExprId(blank_elt_id),
|
||||||
|
parent_id_opt,
|
||||||
|
));
|
||||||
|
|
||||||
let mut children: Vec<MarkNodeId> = vec![];
|
let mut children: Vec<MarkNodeId> = vec![];
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@ pub mod ed_update;
|
||||||
pub mod ed_view;
|
pub mod ed_view;
|
||||||
mod int_update;
|
mod int_update;
|
||||||
mod let_update;
|
mod let_update;
|
||||||
pub mod tld_value_update;
|
|
||||||
mod list_update;
|
mod list_update;
|
||||||
mod lookup_update;
|
mod lookup_update;
|
||||||
mod record_update;
|
mod record_update;
|
||||||
mod string_update;
|
mod string_update;
|
||||||
|
pub mod tld_value_update;
|
||||||
|
|
|
@ -37,21 +37,15 @@ pub fn start_new_record(ed_model: &mut EdModel) -> EdResult<InputOutcome> {
|
||||||
|
|
||||||
ast_pool.set(ast_node_id.to_expr_id()?, expr2_node);
|
ast_pool.set(ast_node_id.to_expr_id()?, expr2_node);
|
||||||
|
|
||||||
let left_bracket_node_id =
|
let left_bracket_node_id = ed_model.add_mark_node(new_left_accolade_mn(
|
||||||
ed_model.add_mark_node(
|
|
||||||
new_left_accolade_mn(
|
|
||||||
ast_node_id.to_expr_id()?,
|
ast_node_id.to_expr_id()?,
|
||||||
Some(curr_mark_node_id)
|
Some(curr_mark_node_id),
|
||||||
)
|
));
|
||||||
);
|
|
||||||
|
|
||||||
let right_bracket_node_id =
|
let right_bracket_node_id = ed_model.add_mark_node(new_right_accolade_mn(
|
||||||
ed_model.add_mark_node(
|
|
||||||
new_right_accolade_mn(
|
|
||||||
ast_node_id.to_expr_id()?,
|
ast_node_id.to_expr_id()?,
|
||||||
Some(curr_mark_node_id)
|
Some(curr_mark_node_id),
|
||||||
)
|
));
|
||||||
);
|
|
||||||
|
|
||||||
let nested_node = MarkupNode::Nested {
|
let nested_node = MarkupNode::Nested {
|
||||||
ast_node_id,
|
ast_node_id,
|
||||||
|
@ -118,7 +112,11 @@ pub fn update_empty_record(
|
||||||
|
|
||||||
let new_ast_node = Expr2::Record { record_var, fields };
|
let new_ast_node = Expr2::Record { record_var, fields };
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, new_ast_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, new_ast_node);
|
||||||
|
|
||||||
// update Markup
|
// update Markup
|
||||||
|
|
||||||
|
@ -244,13 +242,10 @@ pub fn update_record_colon(
|
||||||
.get_mut(parent_id)
|
.get_mut(parent_id)
|
||||||
.add_child_at_index(new_child_index, record_colon_node_id)?;
|
.add_child_at_index(new_child_index, record_colon_node_id)?;
|
||||||
|
|
||||||
let record_blank_node_id = ed_model
|
let record_blank_node_id = ed_model.add_mark_node(new_blank_mn(
|
||||||
.add_mark_node(
|
|
||||||
new_blank_mn(
|
|
||||||
ASTNodeId::AExprId(new_field_val_id),
|
ASTNodeId::AExprId(new_field_val_id),
|
||||||
Some(parent_id)
|
Some(parent_id),
|
||||||
)
|
));
|
||||||
);
|
|
||||||
|
|
||||||
ed_model
|
ed_model
|
||||||
.mark_node_pool
|
.mark_node_pool
|
||||||
|
|
|
@ -52,7 +52,11 @@ pub fn update_small_string(
|
||||||
|
|
||||||
let new_ast_node = Expr2::Str(PoolStr::new(&new_str, ed_model.module.env.pool));
|
let new_ast_node = Expr2::Str(PoolStr::new(&new_str, ed_model.module.env.pool));
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, new_ast_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, new_ast_node);
|
||||||
}
|
}
|
||||||
|
|
||||||
content_str_mut.insert_str(node_caret_offset, new_input);
|
content_str_mut.insert_str(node_caret_offset, new_input);
|
||||||
|
@ -105,7 +109,7 @@ pub fn update_string(new_char: char, ed_model: &mut EdModel) -> EdResult<InputOu
|
||||||
update_str_expr(
|
update_str_expr(
|
||||||
ast_node_id.to_expr_id()?,
|
ast_node_id.to_expr_id()?,
|
||||||
new_char,
|
new_char,
|
||||||
node_caret_offset,
|
node_caret_offset - 1, // -1 because offset was calculated with quotes
|
||||||
&mut ed_model.module.env.pool,
|
&mut ed_model.module.env.pool,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -131,7 +135,11 @@ pub fn start_new_string(ed_model: &mut EdModel) -> EdResult<InputOutcome> {
|
||||||
let new_expr2_node = Expr2::SmallStr(arraystring::ArrayString::new());
|
let new_expr2_node = Expr2::SmallStr(arraystring::ArrayString::new());
|
||||||
let curr_mark_node_has_nl = curr_mark_node.has_newline_at_end();
|
let curr_mark_node_has_nl = curr_mark_node.has_newline_at_end();
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_expr_id()?, new_expr2_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_expr_id()?, new_expr2_node);
|
||||||
|
|
||||||
let new_string_node = MarkupNode::Text {
|
let new_string_node = MarkupNode::Text {
|
||||||
content: nodes::STRING_QUOTES.to_owned(),
|
content: nodes::STRING_QUOTES.to_owned(),
|
||||||
|
|
|
@ -1,10 +1,31 @@
|
||||||
use roc_module::symbol::{Interns, Symbol};
|
use roc_module::symbol::{Interns, Symbol};
|
||||||
|
|
||||||
use crate::{editor::{ed_error::{EdResult, KeyNotFound}, markup::{attribute::Attributes, common_nodes::{new_blank_mn_w_nl, new_equals_mn}, nodes::MarkupNode}, slow_pool::{MarkNodeId, SlowPool}, syntax_highlight::HighlightStyle}, lang::{ast::{Def2, Expr2}, expr::Env, parse::ASTNodeId, pattern::{Pattern2, get_identifier_string}, pool::NodeId}, ui::text::text_pos::TextPos};
|
use crate::{
|
||||||
|
editor::{
|
||||||
use super::{app_update::InputOutcome, ed_model::EdModel, ed_update::{NodeContext, get_node_context}};
|
ed_error::{EdResult, KeyNotFound},
|
||||||
|
markup::{
|
||||||
|
attribute::Attributes,
|
||||||
|
common_nodes::{new_blank_mn_w_nl, new_equals_mn},
|
||||||
|
nodes::MarkupNode,
|
||||||
|
},
|
||||||
|
slow_pool::{MarkNodeId, SlowPool},
|
||||||
|
syntax_highlight::HighlightStyle,
|
||||||
|
},
|
||||||
|
lang::{
|
||||||
|
ast::{Def2, Expr2},
|
||||||
|
expr::Env,
|
||||||
|
parse::ASTNodeId,
|
||||||
|
pattern::{get_identifier_string, Pattern2},
|
||||||
|
pool::NodeId,
|
||||||
|
},
|
||||||
|
ui::text::text_pos::TextPos,
|
||||||
|
};
|
||||||
|
|
||||||
|
use super::{
|
||||||
|
app_update::InputOutcome,
|
||||||
|
ed_model::EdModel,
|
||||||
|
ed_update::{get_node_context, NodeContext},
|
||||||
|
};
|
||||||
|
|
||||||
// Top Level Defined Value. example: `main = "Hello, World!"`
|
// Top Level Defined Value. example: `main = "Hello, World!"`
|
||||||
|
|
||||||
|
@ -42,17 +63,15 @@ pub fn tld_mark_node<'a>(
|
||||||
newline_at_end: true,
|
newline_at_end: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(
|
Ok(full_let_node)
|
||||||
full_let_node
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start_new_tld_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<InputOutcome> {
|
pub fn start_new_tld_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<InputOutcome> {
|
||||||
let NodeContext {
|
let NodeContext {
|
||||||
old_caret_pos,
|
old_caret_pos,
|
||||||
curr_mark_node_id,
|
curr_mark_node_id,
|
||||||
curr_mark_node:_,
|
curr_mark_node: _,
|
||||||
parent_id_opt:_,
|
parent_id_opt: _,
|
||||||
ast_node_id,
|
ast_node_id,
|
||||||
} = get_node_context(ed_model)?;
|
} = get_node_context(ed_model)?;
|
||||||
|
|
||||||
|
@ -70,15 +89,20 @@ pub fn start_new_tld_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<
|
||||||
.ident_ids
|
.ident_ids
|
||||||
.add(val_name_string.clone().into());
|
.add(val_name_string.clone().into());
|
||||||
|
|
||||||
let module_ident_ids_opt = ed_model.loaded_module.interns.all_ident_ids.get_mut(&ed_model.module.env.home);
|
let module_ident_ids_opt = ed_model
|
||||||
|
.loaded_module
|
||||||
|
.interns
|
||||||
|
.all_ident_ids
|
||||||
|
.get_mut(&ed_model.module.env.home);
|
||||||
|
|
||||||
if let Some(module_ident_ids_ref) = module_ident_ids_opt {
|
if let Some(module_ident_ids_ref) = module_ident_ids_opt {
|
||||||
// this might create different IdentId for interns and env.ident_ids which may be a problem
|
// this might create different IdentId for interns and env.ident_ids which may be a problem
|
||||||
module_ident_ids_ref.add(val_name_string.clone().into());
|
module_ident_ids_ref.add(val_name_string.into());
|
||||||
} else {
|
} else {
|
||||||
KeyNotFound {
|
KeyNotFound {
|
||||||
key_str: format!("{:?}", ed_model.module.env.home)
|
key_str: format!("{:?}", ed_model.module.env.home),
|
||||||
}.fail()?
|
}
|
||||||
|
.fail()?
|
||||||
}
|
}
|
||||||
|
|
||||||
let val_symbol = Symbol::new(ed_model.module.env.home, ident_id);
|
let val_symbol = Symbol::new(ed_model.module.env.home, ident_id);
|
||||||
|
@ -92,16 +116,19 @@ pub fn start_new_tld_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<
|
||||||
ast_node_id,
|
ast_node_id,
|
||||||
&mut ed_model.mark_node_pool,
|
&mut ed_model.mark_node_pool,
|
||||||
&ed_model.module.env,
|
&ed_model.module.env,
|
||||||
&ed_model.loaded_module.interns
|
&ed_model.loaded_module.interns,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let new_ast_node =
|
let new_ast_node = Def2::ValueDef {
|
||||||
Def2::ValueDef {
|
|
||||||
identifier_id: patt2_id,
|
identifier_id: patt2_id,
|
||||||
expr_id: val_expr_id,
|
expr_id: val_expr_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
ed_model.module.env.pool.set(ast_node_id.to_def_id()?, new_ast_node);
|
ed_model
|
||||||
|
.module
|
||||||
|
.env
|
||||||
|
.pool
|
||||||
|
.set(ast_node_id.to_def_id()?, new_ast_node);
|
||||||
|
|
||||||
ed_model
|
ed_model
|
||||||
.mark_node_pool
|
.mark_node_pool
|
||||||
|
@ -116,13 +143,21 @@ pub fn start_new_tld_value(ed_model: &mut EdModel, new_char: &char) -> EdResult<
|
||||||
ed_model.insert_all_between_line(
|
ed_model.insert_all_between_line(
|
||||||
old_caret_pos.line,
|
old_caret_pos.line,
|
||||||
old_caret_pos.column,
|
old_caret_pos.column,
|
||||||
&ed_model.mark_node_pool.get(curr_mark_node_id).get_children_ids(),
|
&ed_model
|
||||||
|
.mark_node_pool
|
||||||
|
.get(curr_mark_node_id)
|
||||||
|
.get_children_ids(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(InputOutcome::Accepted)
|
Ok(InputOutcome::Accepted)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_tld_val_name(val_name_mn_id: MarkNodeId, old_caret_pos: TextPos, ed_model: &mut EdModel, new_char: &char) -> EdResult<InputOutcome> {
|
pub fn update_tld_val_name(
|
||||||
|
val_name_mn_id: MarkNodeId,
|
||||||
|
old_caret_pos: TextPos,
|
||||||
|
ed_model: &mut EdModel,
|
||||||
|
new_char: &char,
|
||||||
|
) -> EdResult<InputOutcome> {
|
||||||
if new_char.is_ascii_alphanumeric() {
|
if new_char.is_ascii_alphanumeric() {
|
||||||
// update markup
|
// update markup
|
||||||
let val_name_mn_mut = ed_model.mark_node_pool.get_mut(val_name_mn_id);
|
let val_name_mn_mut = ed_model.mark_node_pool.get_mut(val_name_mn_id);
|
||||||
|
@ -155,7 +190,6 @@ pub fn update_tld_val_name(val_name_mn_id: MarkNodeId, old_caret_pos: TextPos, e
|
||||||
ed_model.simple_move_caret_right(old_caret_pos, 1);
|
ed_model.simple_move_caret_right(old_caret_pos, 1);
|
||||||
|
|
||||||
Ok(InputOutcome::Accepted)
|
Ok(InputOutcome::Accepted)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Ok(InputOutcome::Ignored)
|
Ok(InputOutcome::Ignored)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ use crate::editor::mvc::ed_model::EdModel;
|
||||||
use crate::graphics::colors;
|
use crate::graphics::colors;
|
||||||
use crate::graphics::colors::from_hsb;
|
use crate::graphics::colors::from_hsb;
|
||||||
use crate::graphics::primitives::text as gr_text;
|
use crate::graphics::primitives::text as gr_text;
|
||||||
use crate::lang::ast::{def2_to_string};
|
use crate::lang::ast::def2_to_string;
|
||||||
use cgmath::Vector2;
|
use cgmath::Vector2;
|
||||||
use winit::dpi::PhysicalSize;
|
use winit::dpi::PhysicalSize;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,4 @@ app "test-app"
|
||||||
|
|
||||||
main = "Hello Main"
|
main = "Hello Main"
|
||||||
|
|
||||||
mars = "Yo Mars!"
|
|
||||||
|
|
||||||
|
|
||||||
"#;
|
"#;
|
||||||
|
|
|
@ -231,7 +231,7 @@ pub enum Def2 {
|
||||||
identifier_id: NodeId<Pattern2>,
|
identifier_id: NodeId<Pattern2>,
|
||||||
expr_id: NodeId<Expr2>,
|
expr_id: NodeId<Expr2>,
|
||||||
},
|
},
|
||||||
Blank
|
Blank,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -297,12 +297,27 @@ impl ValueDef {
|
||||||
|
|
||||||
pub fn value_def_to_string(val_def: &ValueDef, pool: &Pool) -> String {
|
pub fn value_def_to_string(val_def: &ValueDef, pool: &Pool) -> String {
|
||||||
match val_def {
|
match val_def {
|
||||||
ValueDef::WithAnnotation { pattern_id, expr_id, type_id, rigids, expr_var } => {
|
ValueDef::WithAnnotation {
|
||||||
|
pattern_id,
|
||||||
|
expr_id,
|
||||||
|
type_id,
|
||||||
|
rigids,
|
||||||
|
expr_var,
|
||||||
|
} => {
|
||||||
format!("WithAnnotation {{ pattern_id: {:?}, expr_id: {:?}, type_id: {:?}, rigids: {:?}, expr_var: {:?}}}", pool.get(*pattern_id), expr2_to_string(*expr_id, pool), pool.get(*type_id), rigids, expr_var)
|
format!("WithAnnotation {{ pattern_id: {:?}, expr_id: {:?}, type_id: {:?}, rigids: {:?}, expr_var: {:?}}}", pool.get(*pattern_id), expr2_to_string(*expr_id, pool), pool.get(*type_id), rigids, expr_var)
|
||||||
},
|
}
|
||||||
ValueDef::NoAnnotation { pattern_id, expr_id, expr_var } => {
|
ValueDef::NoAnnotation {
|
||||||
format!("NoAnnotation {{ pattern_id: {:?}, expr_id: {:?}, expr_var: {:?}}}", pool.get(*pattern_id), expr2_to_string(*expr_id, pool), expr_var)
|
pattern_id,
|
||||||
},
|
expr_id,
|
||||||
|
expr_var,
|
||||||
|
} => {
|
||||||
|
format!(
|
||||||
|
"NoAnnotation {{ pattern_id: {:?}, expr_id: {:?}, expr_var: {:?}}}",
|
||||||
|
pool.get(*pattern_id),
|
||||||
|
expr2_to_string(*expr_id, pool),
|
||||||
|
expr_var
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,16 +497,11 @@ impl RecordField {
|
||||||
|
|
||||||
pub fn ast_node_to_string(node_id: ASTNodeId, pool: &Pool) -> String {
|
pub fn ast_node_to_string(node_id: ASTNodeId, pool: &Pool) -> String {
|
||||||
match node_id {
|
match node_id {
|
||||||
ASTNodeId::ADefId(def_id) => {
|
ASTNodeId::ADefId(def_id) => def2_to_string(def_id, pool),
|
||||||
def2_to_string(def_id, pool)
|
ASTNodeId::AExprId(expr_id) => expr2_to_string(expr_id, pool),
|
||||||
},
|
|
||||||
ASTNodeId::AExprId(expr_id) => {
|
|
||||||
expr2_to_string(expr_id, pool)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn expr2_to_string(node_id: ExprId, pool: &Pool) -> String {
|
pub fn expr2_to_string(node_id: ExprId, pool: &Pool) -> String {
|
||||||
let mut full_string = String::new();
|
let mut full_string = String::new();
|
||||||
let expr2 = pool.get(node_id);
|
let expr2 = pool.get(node_id);
|
||||||
|
@ -610,7 +620,8 @@ fn expr2_to_string_helper(
|
||||||
} => {
|
} => {
|
||||||
out_string.push_str(&format!(
|
out_string.push_str(&format!(
|
||||||
"LetValue(def_id: >>{:?}), body_id: >>{:?})",
|
"LetValue(def_id: >>{:?}), body_id: >>{:?})",
|
||||||
value_def_to_string(pool.get(*def_id), pool) , pool.get(*body_id)
|
value_def_to_string(pool.get(*def_id), pool),
|
||||||
|
pool.get(*body_id)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
other => todo!("Implement for {:?}", other),
|
other => todo!("Implement for {:?}", other),
|
||||||
|
@ -624,14 +635,18 @@ pub fn def2_to_string(node_id: DefId, pool: &Pool) -> String {
|
||||||
let def2 = pool.get(node_id);
|
let def2 = pool.get(node_id);
|
||||||
|
|
||||||
match def2 {
|
match def2 {
|
||||||
Def2::ValueDef { identifier_id, expr_id } => {
|
Def2::ValueDef {
|
||||||
|
identifier_id,
|
||||||
|
expr_id,
|
||||||
|
} => {
|
||||||
full_string.push_str(&format!(
|
full_string.push_str(&format!(
|
||||||
"Def2::ValueDef(identifier_id: >>{:?}), expr_id: >>{:?})",
|
"Def2::ValueDef(identifier_id: >>{:?}), expr_id: >>{:?})",
|
||||||
pool.get(*identifier_id), expr2_to_string(*expr_id, pool)
|
pool.get(*identifier_id),
|
||||||
|
expr2_to_string(*expr_id, pool)
|
||||||
));
|
));
|
||||||
},
|
}
|
||||||
Def2::Blank => {
|
Def2::Blank => {
|
||||||
full_string.push_str(&format!("Def2::Blank"));
|
full_string.push_str("Def2::Blank");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,6 +714,7 @@ pub fn update_str_expr(
|
||||||
}
|
}
|
||||||
Either::MyPoolStr(old_pool_str) => {
|
Either::MyPoolStr(old_pool_str) => {
|
||||||
let mut new_string = old_pool_str.as_str(pool).to_owned();
|
let mut new_string = old_pool_str.as_str(pool).to_owned();
|
||||||
|
|
||||||
new_string.insert(insert_index, new_char);
|
new_string.insert(insert_index, new_char);
|
||||||
|
|
||||||
let new_pool_str = PoolStr::new(&new_string, pool);
|
let new_pool_str = PoolStr::new(&new_string, pool);
|
||||||
|
|
|
@ -5,7 +5,10 @@ use bumpalo::{collections::Vec as BumpVec, Bump};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::iter::FromIterator;
|
use std::iter::FromIterator;
|
||||||
|
|
||||||
use crate::lang::ast::{ClosureExtra, Def2, Expr2, ExprId, FloatVal, IntStyle, IntVal, RecordField, ValueDef, WhenBranch, expr2_to_string, value_def_to_string};
|
use crate::lang::ast::{
|
||||||
|
expr2_to_string, value_def_to_string, ClosureExtra, Def2, Expr2, ExprId, FloatVal, IntStyle,
|
||||||
|
IntVal, RecordField, ValueDef, WhenBranch,
|
||||||
|
};
|
||||||
use crate::lang::def::{
|
use crate::lang::def::{
|
||||||
canonicalize_defs, sort_can_defs, CanDefs, Declaration, Def, PendingDef, References,
|
canonicalize_defs, sort_can_defs, CanDefs, Declaration, Def, PendingDef, References,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use crate::{editor::ed_error::EdResult, editor::ed_error::ASTNodeIdWithoutExprId,lang::scope::Scope};
|
use crate::{
|
||||||
|
editor::ed_error::ASTNodeIdWithoutExprId, editor::ed_error::EdResult, lang::scope::Scope,
|
||||||
|
};
|
||||||
use bumpalo::Bump;
|
use bumpalo::Bump;
|
||||||
use roc_parse::parser::SyntaxError;
|
use roc_parse::parser::SyntaxError;
|
||||||
use roc_region::all::Region;
|
use roc_region::all::Region;
|
||||||
|
|
||||||
use super::{ast::{DefId, Expr2, ExprId}, expr::{str_to_def2, Env}};
|
use super::{
|
||||||
|
ast::{DefId, Expr2, ExprId},
|
||||||
|
expr::{str_to_def2, Env},
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AST {
|
pub struct AST {
|
||||||
|
@ -20,29 +25,17 @@ pub enum ASTNodeId {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ASTNodeId {
|
impl ASTNodeId {
|
||||||
pub fn to_expr_id(&self) -> EdResult<ExprId>{
|
pub fn to_expr_id(&self) -> EdResult<ExprId> {
|
||||||
match self {
|
match self {
|
||||||
ASTNodeId::AExprId(expr_id) => {
|
ASTNodeId::AExprId(expr_id) => Ok(*expr_id),
|
||||||
Ok(*expr_id)
|
_ => ASTNodeIdWithoutExprId { ast_node_id: *self }.fail()?,
|
||||||
},
|
|
||||||
_ => {
|
|
||||||
ASTNodeIdWithoutExprId {
|
|
||||||
ast_node_id: *self
|
|
||||||
}.fail()?
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_def_id(&self) -> EdResult<DefId>{
|
pub fn to_def_id(&self) -> EdResult<DefId> {
|
||||||
match self {
|
match self {
|
||||||
ASTNodeId::ADefId(def_id) => {
|
ASTNodeId::ADefId(def_id) => Ok(*def_id),
|
||||||
Ok(*def_id)
|
_ => ASTNodeIdWithoutExprId { ast_node_id: *self }.fail()?,
|
||||||
},
|
|
||||||
_ => {
|
|
||||||
ASTNodeIdWithoutExprId {
|
|
||||||
ast_node_id: *self
|
|
||||||
}.fail()?
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue