1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
11import qualified AST.Exposing as Exposing
12import qualified AST.Module as Module
14import qualified Reporting.Annotation as A
15import qualified Reporting.Error.Syntax as E
16import qualified Reporting.Region as R
23header :: Parser (Module.Header [Module.UserImport])
26 Module.Header <$> maybeHeaderDecl <*> chompImports []
29kernelHeader :: Parser [Module.UserImport]
33 imports <- chompImports []
42maybeHeaderDecl :: Parser (Maybe Module.HeaderDecl)
50headerDecl :: Parser Module.HeaderDecl
52 do start <- getPosition
53 pushContext start E.Module
56 name <- qualifiedCapVar
58 settings <- effectSettings
59 hint E.Exposing $ keyword "exposing"
61 exports <- exposing exposingEntry
63 docs <- maybeDocComment
64 return (Module.HeaderDecl tag name exports settings docs)
68-- MODULE TAGS - module, effect module, port module
71sourceTag :: Parser Module.SourceTag
78 do start <- getPosition
83 return (Module.Port (R.Region start end))
85 do start <- getPosition
90 return (Module.Effect (R.Region start end))
95-- EFFECTS - where { command = MyCmd }
98effectSettings :: Parser Module.SourceSettings
108 effectSettingsHelp start [entry]
109 , return Module.emptySettings
113effectSettingsHelp :: R.Position -> [(A.Located Text, A.Located Text)] -> Parser Module.SourceSettings
114effectSettingsHelp start entries =
120 effectSettingsHelp start (entry:entries)
124 return (A.at start end entries)
128setting :: Parser (A.Located Text, A.Located Text)
130 do name <- addLocation lowVar
134 tipe <- addLocation capVar
142maybeDocComment :: Parser (A.Located (Maybe Text))
144 do oldEnd <- getPosition
146 newStart <- getPosition
148 [ do doc <- docComment
151 return (A.at newStart end (Just doc))
152 , return (A.at oldEnd newStart Nothing)
160chompImports :: [Module.UserImport] -> Parser [Module.UserImport]
161chompImports imports =
163 [ do start <- getPosition
165 pushContext start E.Import
167 name <- addLocation qualifiedCapVar
171 [ do checkFreshLine pos
172 let userImport = method start end name Nothing Exposing.closed
174 chompImports (userImport:imports)
177 [ chompAs start name imports
178 , chompExposing start name Nothing imports
181 , return (reverse imports)
185chompAs :: R.Position -> A.Located Text -> [Module.UserImport] -> Parser [Module.UserImport]
186chompAs start name imports =
193 [ do checkFreshLine pos
194 let userImport = method start end name (Just alias) (Exposing.Explicit [])
196 chompImports (userImport:imports)
198 chompExposing start name (Just alias) imports
202chompExposing :: R.Position -> A.Located Text -> Maybe Text -> [Module.UserImport] -> Parser [Module.UserImport]
203chompExposing start name maybeAlias imports =
204 do keyword "exposing"
206 exposed <- exposing exposingEntry
209 let userImport = method start end name maybeAlias exposed
211 chompImports (userImport:imports)
214method :: R.Position -> R.Position -> A.Located Text -> Maybe Text -> Exposing.Raw -> Module.UserImport
215method start end name maybeAlias exposed =
216 A.at start end ( name, Module.ImportMethod maybeAlias exposed )
223exposing :: Parser a -> Parser (Exposing.Exposing a)
234 , do value <- addLocation parser
236 exposingHelp parser [value]
240exposingHelp :: Parser a -> [A.Located a] -> Parser (Exposing.Exposing a)
241exposingHelp parser values =
245 value <- addLocation parser
247 exposingHelp parser (value:values)
249 return (Exposing.Explicit (reverse values))
253exposingEntry :: Parser Exposing.Entry
256 [ Exposing.Lower <$> lowVar
260 return (Exposing.Lower op)
263 Exposing.Upper name <$>
265 [ Just <$> exposing capVar
275freshLine :: Parser ()
277 checkFreshLine =<< whitespace
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list