Parse module
This commit is contained in:
parent
458805e283
commit
b81d106c91
@ -13,6 +13,7 @@ pub(crate) enum Item<'src> {
|
|||||||
relative: StringLiteral<'src>,
|
relative: StringLiteral<'src>,
|
||||||
},
|
},
|
||||||
Module {
|
Module {
|
||||||
|
attributes: BTreeSet<Attribute<'src>>,
|
||||||
absolute: Option<PathBuf>,
|
absolute: Option<PathBuf>,
|
||||||
doc: Option<&'src str>,
|
doc: Option<&'src str>,
|
||||||
name: Name<'src>,
|
name: Name<'src>,
|
||||||
|
@ -373,27 +373,7 @@ impl<'run, 'src> Parser<'run, 'src> {
|
|||||||
|| self.next_are(&[Identifier, QuestionMark]) =>
|
|| self.next_are(&[Identifier, QuestionMark]) =>
|
||||||
{
|
{
|
||||||
let doc = pop_doc_comment(&mut items, eol_since_last_comment);
|
let doc = pop_doc_comment(&mut items, eol_since_last_comment);
|
||||||
|
items.push(self.parse_module(BTreeSet::new(), doc)?);
|
||||||
self.presume_keyword(Keyword::Mod)?;
|
|
||||||
|
|
||||||
let optional = self.accepted(QuestionMark)?;
|
|
||||||
|
|
||||||
let name = self.parse_name()?;
|
|
||||||
|
|
||||||
let relative = if self.next_is(StringToken) || self.next_are(&[Identifier, StringToken])
|
|
||||||
{
|
|
||||||
Some(self.parse_string_literal()?)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
items.push(Item::Module {
|
|
||||||
absolute: None,
|
|
||||||
doc,
|
|
||||||
name,
|
|
||||||
optional,
|
|
||||||
relative,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
Some(Keyword::Set)
|
Some(Keyword::Set)
|
||||||
if self.next_are(&[Identifier, Identifier, ColonEquals])
|
if self.next_are(&[Identifier, Identifier, ColonEquals])
|
||||||
@ -430,6 +410,17 @@ impl<'run, 'src> Parser<'run, 'src> {
|
|||||||
Some(Keyword::Alias) if self.next_are(&[Identifier, Identifier, ColonEquals]) => {
|
Some(Keyword::Alias) if self.next_are(&[Identifier, Identifier, ColonEquals]) => {
|
||||||
items.push(Item::Alias(self.parse_alias(attributes)?));
|
items.push(Item::Alias(self.parse_alias(attributes)?));
|
||||||
}
|
}
|
||||||
|
Some(Keyword::Mod)
|
||||||
|
if self.next_are(&[Identifier, Identifier, Comment])
|
||||||
|
|| self.next_are(&[Identifier, Identifier, Eof])
|
||||||
|
|| self.next_are(&[Identifier, Identifier, Eol])
|
||||||
|
|| self.next_are(&[Identifier, Identifier, Identifier, StringToken])
|
||||||
|
|| self.next_are(&[Identifier, Identifier, StringToken])
|
||||||
|
|| self.next_are(&[Identifier, QuestionMark]) =>
|
||||||
|
{
|
||||||
|
let doc = pop_doc_comment(&mut items, eol_since_last_comment);
|
||||||
|
items.push(self.parse_module(attributes, doc)?);
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
let quiet = self.accepted(At)?;
|
let quiet = self.accepted(At)?;
|
||||||
let doc = pop_doc_comment(&mut items, eol_since_last_comment);
|
let doc = pop_doc_comment(&mut items, eol_since_last_comment);
|
||||||
@ -454,6 +445,33 @@ impl<'run, 'src> Parser<'run, 'src> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_module(
|
||||||
|
&mut self,
|
||||||
|
attributes: BTreeSet<Attribute<'src>>,
|
||||||
|
doc: Option<&'src str>,
|
||||||
|
) -> CompileResult<'src, Item<'src>> {
|
||||||
|
self.presume_keyword(Keyword::Mod)?;
|
||||||
|
|
||||||
|
let optional = self.accepted(QuestionMark)?;
|
||||||
|
|
||||||
|
let name = self.parse_name()?;
|
||||||
|
|
||||||
|
let relative = if self.next_is(StringToken) || self.next_are(&[Identifier, StringToken]) {
|
||||||
|
Some(self.parse_string_literal()?)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Item::Module {
|
||||||
|
attributes,
|
||||||
|
absolute: None,
|
||||||
|
doc,
|
||||||
|
name,
|
||||||
|
optional,
|
||||||
|
relative,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// Parse an alias, e.g `alias name := target`
|
/// Parse an alias, e.g `alias name := target`
|
||||||
fn parse_alias(
|
fn parse_alias(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
Loading…
Reference in New Issue
Block a user