mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-08 22:28:02 +00:00
Move Full from fmt to parse and reorganize confusingly-named Module ast type
This commit is contained in:
parent
698bbc3cf1
commit
d25c048d48
47 changed files with 1759 additions and 1776 deletions
|
@ -1,8 +1,8 @@
|
|||
use bumpalo::Bump;
|
||||
use roc_fmt::Buf;
|
||||
use roc_parse::{
|
||||
ast::{Defs, Module},
|
||||
module::parse_module_defs,
|
||||
ast::{Defs, Header, SpacesBefore},
|
||||
header::parse_module_defs,
|
||||
parser::SyntaxError,
|
||||
};
|
||||
use roc_region::all::Loc;
|
||||
|
@ -15,23 +15,26 @@ mod format;
|
|||
|
||||
pub struct Ast<'a> {
|
||||
arena: &'a Bump,
|
||||
module: Module<'a>,
|
||||
module: SpacesBefore<'a, Header<'a>>,
|
||||
defs: Defs<'a>,
|
||||
}
|
||||
|
||||
impl<'a> Ast<'a> {
|
||||
pub fn parse(arena: &'a Bump, src: &'a str) -> Result<Ast<'a>, SyntaxError<'a>> {
|
||||
use roc_parse::{module::parse_header, state::State};
|
||||
use roc_parse::{header::parse_header, state::State};
|
||||
|
||||
let (module, state) = parse_header(arena, State::new(src.as_bytes()))
|
||||
.map_err(|e| SyntaxError::Header(e.problem))?;
|
||||
|
||||
let (module, defs) = module.upgrade_header_imports(arena);
|
||||
let (header, defs) = module.item.upgrade_header_imports(arena);
|
||||
|
||||
let defs = parse_module_defs(arena, state, defs)?;
|
||||
|
||||
Ok(Ast {
|
||||
module,
|
||||
module: SpacesBefore {
|
||||
before: module.before,
|
||||
item: header,
|
||||
},
|
||||
defs,
|
||||
arena,
|
||||
})
|
||||
|
@ -40,7 +43,7 @@ impl<'a> Ast<'a> {
|
|||
pub fn fmt(&self) -> FormattedAst<'a> {
|
||||
let mut buf = Buf::new_in(self.arena);
|
||||
|
||||
roc_fmt::module::fmt_module(&mut buf, &self.module);
|
||||
roc_fmt::header::fmt_header(&mut buf, &self.module);
|
||||
|
||||
roc_fmt::def::fmt_defs(&mut buf, &self.defs, 0);
|
||||
|
||||
|
@ -50,7 +53,7 @@ impl<'a> Ast<'a> {
|
|||
}
|
||||
|
||||
pub fn semantic_tokens(&self) -> impl IntoIterator<Item = Loc<Token>> + '_ {
|
||||
let header_tokens = self.module.iter_tokens(self.arena);
|
||||
let header_tokens = self.module.item.iter_tokens(self.arena);
|
||||
let body_tokens = self.defs.iter_tokens(self.arena);
|
||||
|
||||
header_tokens.into_iter().chain(body_tokens)
|
||||
|
|
|
@ -6,8 +6,8 @@ use roc_module::called_via::{BinOp, UnaryOp};
|
|||
use roc_parse::{
|
||||
ast::{
|
||||
AbilityImpls, AbilityMember, AssignedField, Collection, Defs, Expr, Header, Implements,
|
||||
ImplementsAbilities, ImplementsAbility, ImplementsClause, Module, OldRecordBuilderField,
|
||||
Pattern, PatternAs, Spaced, StrLiteral, Tag, TypeAnnotation, TypeDef, TypeHeader, ValueDef,
|
||||
ImplementsAbilities, ImplementsAbility, ImplementsClause, OldRecordBuilderField, Pattern,
|
||||
PatternAs, Spaced, StrLiteral, Tag, TypeAnnotation, TypeDef, TypeHeader, ValueDef,
|
||||
WhenBranch,
|
||||
},
|
||||
header::{
|
||||
|
@ -189,16 +189,6 @@ impl<T: IterTokens, U: IterTokens> IterTokens for (T, U) {
|
|||
}
|
||||
}
|
||||
|
||||
impl IterTokens for Module<'_> {
|
||||
fn iter_tokens<'a>(&self, arena: &'a Bump) -> BumpVec<'a, Loc<Token>> {
|
||||
let Self {
|
||||
comments: _,
|
||||
header,
|
||||
} = self;
|
||||
header.iter_tokens(arena)
|
||||
}
|
||||
}
|
||||
|
||||
impl IterTokens for Header<'_> {
|
||||
fn iter_tokens<'a>(&self, arena: &'a Bump) -> BumpVec<'a, Loc<Token>> {
|
||||
match self {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue