summaryrefslogtreecommitdiff
path: root/src/source.rs
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-11-01 13:03:18 +0100
committerMartin Haug <mhaug@live.de>2021-11-05 13:44:50 +0100
commit49fb3cd4e2a5d6997ad4046d3514f154d8c866dd (patch)
tree4fb2a245a4cb84a6ef238ac1bc71786a0996913d /src/source.rs
parent7d34a548ccd14debe0668e23454e1ced70e485ec (diff)
Code Review: Life is Like a Box of Iterators
Diffstat (limited to 'src/source.rs')
-rw-r--r--src/source.rs20
1 files changed, 7 insertions, 13 deletions
diff --git a/src/source.rs b/src/source.rs
index e3803f57..3b721251 100644
--- a/src/source.rs
+++ b/src/source.rs
@@ -8,10 +8,10 @@ use std::rc::Rc;
use serde::{Deserialize, Serialize};
-use crate::diag::{Error, TypResult};
+use crate::diag::TypResult;
use crate::loading::{FileHash, Loader};
use crate::parse::{is_newline, parse, Scanner};
-use crate::syntax::{GreenNode, Markup, NodeKind, RedNode};
+use crate::syntax::{GreenNode, Markup, RedNode};
use crate::util::PathExt;
#[cfg(feature = "codespan-reporting")]
@@ -134,28 +134,22 @@ impl SourceFile {
pub fn new(id: SourceId, path: &Path, src: String) -> Self {
let mut line_starts = vec![0];
line_starts.extend(newlines(&src));
- let mut init = Self {
+ Self {
id,
path: path.normalize(),
+ root: parse(&src),
src,
line_starts,
- root: Rc::new(GreenNode::new(NodeKind::Markup, 0)),
- };
-
- let root = parse(&init);
- init.root = root;
- init
+ }
}
pub fn ast(&self) -> TypResult<Markup> {
let red = RedNode::new_root(self.root.clone(), self.id);
let errors = red.errors();
if errors.is_empty() {
- Ok(red.as_ref().cast().unwrap())
+ Ok(red.cast().unwrap())
} else {
- Err(Box::new(
- errors.into_iter().map(|(span, msg)| Error::new(span, msg)).collect(),
- ))
+ Err(Box::new(errors))
}
}