on master help sign in
separate out logic to parse individual imports
commit3f4c4285480a085ad063d8caf99f41796cdb6302 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 24 Jun 2019, 16:52 (7 years ago) parentf56639a
1 file changed+29−25
compiler/src/Parse/Module.hs+29−25
compiler/src/Parse/Module.hs+29−25
@@ -3,6 +3,7 @@
33module Parse.Module
44 ( fromByteString
55 , chompImports
6+ , chompImport
67 )
78 where
89
@@ -332,28 +333,33 @@ spaces_em =
332333
333334
334335chompImports :: [Src.Import] -> Parser E.Module [Src.Import]
335−chompImports imports =
336+chompImports is =
336337 oneOfWithFallback
337− [ do Keyword.import_ E.ImportStart
338− Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentName
339− name@(A.At (A.Region _ end) _) <- addLocation (Var.moduleName E.ImportName)
340− Space.chomp E.ModuleSpace
341− oneOf E.ImportEnd
342− [ do Space.checkFreshLine E.ImportEnd
343− chompImports $
344− Src.Import name Nothing (Src.Explicit []) : imports
345− , do Space.checkIndent end E.ImportEnd
346− oneOf E.ImportAs
347− [ chompAs name imports
348− , chompExposing name Nothing imports
349− ]
350− ]
338+ [ do i <- chompImport
339+ chompImports (i:is)
351340 ]
352− (reverse imports)
341+ (reverse is)
353342
354343
355−chompAs :: A.Located Name.Name -> [Src.Import] -> Parser E.Module [Src.Import]
356−chompAs name imports =
344+chompImport :: Parser E.Module Src.Import
345+chompImport =
346+ do Keyword.import_ E.ImportStart
347+ Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentName
348+ name@(A.At (A.Region _ end) _) <- addLocation (Var.moduleName E.ImportName)
349+ Space.chomp E.ModuleSpace
350+ oneOf E.ImportEnd
351+ [ do Space.checkFreshLine E.ImportEnd
352+ return $ Src.Import name Nothing (Src.Explicit [])
353+ , do Space.checkIndent end E.ImportEnd
354+ oneOf E.ImportAs
355+ [ chompAs name
356+ , chompExposing name Nothing
357+ ]
358+ ]
359+
360+
361+chompAs :: A.Located Name.Name -> Parser E.Module Src.Import
362+chompAs name =
357363 do Keyword.as_ E.ImportAs
358364 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentAlias
359365 alias <- Var.upper E.ImportAlias
@@ -361,21 +367,19 @@ chompAs name imports =
361367 Space.chomp E.ModuleSpace
362368 oneOf E.ImportEnd
363369 [ do Space.checkFreshLine E.ImportEnd
364− chompImports $
365− Src.Import name (Just alias) (Src.Explicit []) : imports
370+ return $ Src.Import name (Just alias) (Src.Explicit [])
366371 , do Space.checkIndent end E.ImportEnd
367− chompExposing name (Just alias) imports
372+ chompExposing name (Just alias)
368373 ]
369374
370375
371−chompExposing :: A.Located Name.Name -> Maybe Name.Name -> [Src.Import] -> Parser E.Module [Src.Import]
372−chompExposing name maybeAlias imports =
376+chompExposing :: A.Located Name.Name -> Maybe Name.Name -> Parser E.Module Src.Import
377+chompExposing name maybeAlias =
373378 do Keyword.exposing_ E.ImportExposing
374379 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentExposingList
375380 exposed <- specialize E.ImportExposingList exposing
376381 freshLine E.ImportEnd
377− chompImports $
378− Src.Import name maybeAlias exposed : imports
382+ return $ Src.Import name maybeAlias exposed
379383
380384
381385