summaryrefslogtreecommitdiff
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-06-08 11:51:21 +0200
committerLaurenz <laurmaedje@gmail.com>2021-06-08 11:51:21 +0200
commitd69dfa84ec957ac4037f60a3335416a9f73b97c8 (patch)
treea88cdc56965ecfcb004ce2faabf6cb0cc5c78e92 /src/parse/mod.rs
parentf26526ba75582f24d2bae18a43de3f6622c588ec (diff)
Move import parser to appropriate position in the file
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs102
1 files changed, 51 insertions, 51 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 4c935579..1b32b31e 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -82,7 +82,7 @@ fn node(p: &mut Parser, at_start: &mut bool) -> Option<Node> {
| Token::Import
| Token::Include => {
*at_start = false;
- let stmt = token == Token::Let || token == Token::Import;
+ let stmt = matches!(token, Token::Let | Token::Import);
let group = if stmt { Group::Stmt } else { Group::Expr };
p.start_group(group, TokenMode::Code);
@@ -556,56 +556,6 @@ fn expr_let(p: &mut Parser) -> Option<Expr> {
expr_let
}
-/// Parse an import expression.
-fn expr_import(p: &mut Parser) -> Option<Expr> {
- let start = p.start();
- p.assert(Token::Import);
-
- let mut expr_import = None;
- if let Some(path) = expr(p) {
- let imports = if p.expect(Token::Using) {
- if p.eat_if(Token::Star) {
- // This is the wildcard scenario.
- Imports::Wildcard
- } else {
- // This is the list of identifier scenario.
- p.start_group(Group::Expr, TokenMode::Code);
- let items = collection(p).0;
- if items.is_empty() {
- p.expected_at("import items", p.end());
- }
-
- let idents = idents(p, items);
- p.end_group();
- Imports::Idents(idents)
- }
- } else {
- Imports::Idents(vec![])
- };
-
- expr_import = Some(Expr::Import(ImportExpr {
- span: p.span(start),
- imports,
- path: Box::new(path),
- }));
- }
-
- expr_import
-}
-
-/// Parse an include expression.
-fn expr_include(p: &mut Parser) -> Option<Expr> {
- let start = p.start();
- p.assert(Token::Include);
-
- expr(p).map(|path| {
- Expr::Include(IncludeExpr {
- span: p.span(start),
- path: Box::new(path),
- })
- })
-}
-
/// Parse an if expresion.
fn expr_if(p: &mut Parser) -> Option<Expr> {
let start = p.start();
@@ -691,6 +641,56 @@ fn for_pattern(p: &mut Parser) -> Option<ForPattern> {
Some(ForPattern::Value(first))
}
+/// Parse an import expression.
+fn expr_import(p: &mut Parser) -> Option<Expr> {
+ let start = p.start();
+ p.assert(Token::Import);
+
+ let mut expr_import = None;
+ if let Some(path) = expr(p) {
+ let imports = if p.expect(Token::Using) {
+ if p.eat_if(Token::Star) {
+ // This is the wildcard scenario.
+ Imports::Wildcard
+ } else {
+ // This is the list of identifier scenario.
+ p.start_group(Group::Expr, TokenMode::Code);
+ let items = collection(p).0;
+ if items.is_empty() {
+ p.expected_at("import items", p.end());
+ }
+
+ let idents = idents(p, items);
+ p.end_group();
+ Imports::Idents(idents)
+ }
+ } else {
+ Imports::Idents(vec![])
+ };
+
+ expr_import = Some(Expr::Import(ImportExpr {
+ span: p.span(start),
+ imports,
+ path: Box::new(path),
+ }));
+ }
+
+ expr_import
+}
+
+/// Parse an include expression.
+fn expr_include(p: &mut Parser) -> Option<Expr> {
+ let start = p.start();
+ p.assert(Token::Include);
+
+ expr(p).map(|path| {
+ Expr::Include(IncludeExpr {
+ span: p.span(start),
+ path: Box::new(path),
+ })
+ })
+}
+
/// Parse an identifier.
fn ident(p: &mut Parser) -> Option<Ident> {
if let Some(Token::Ident(string)) = p.peek() {