1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
10import qualified Data.ByteString as BS
11import qualified Data.Map as Map
13import qualified AST.Canonical as Can
14import qualified AST.Optimized as Opt
15import qualified AST.Module.Name as ModuleName
16import qualified Canonicalize.Module as Canonicalize
17import qualified Elm.Docs as Docs
18import qualified Elm.Interface as I
19import qualified Elm.Name as N
20import qualified Elm.Package as Pkg
21import qualified Nitpick.PatternMatches as PatternMatches
22import qualified Optimize.Module as Optimize
23import qualified Parse.Parse as Parse
24import qualified Reporting.Error as Error
25import qualified Reporting.Render.Type.Localizer as L
26import qualified Reporting.Result as Result
27import qualified Reporting.Warning as Warning
28import qualified Type.Constrain.Module as Type
29import qualified Type.Solve as Type
31import System.IO.Unsafe (unsafePerformIO)
39 Result.Result i [Warning.Warning] Error.Error a
43 Map.Map N.Name ModuleName.Canonical
48 { _elmi :: I.Interface
50 , _docs :: Maybe Docs.Module
54compile :: DocsFlag -> Pkg.Name -> ImportDict -> I.Interfaces -> BS.ByteString -> Result i Artifacts
55compile flag pkg importDict interfaces source =
57 valid <- Result.mapError Error.Syntax $
58 Parse.program pkg source
60 canonical <- Result.mapError Error.Canonicalize $
61 Canonicalize.canonicalize pkg importDict interfaces valid
63 let localizer = L.fromModule valid -- TODO should this be strict for GC?
66 runTypeInference localizer canonical
69 exhaustivenessCheck canonical
71 graph <- Result.mapError (Error.Main localizer) $
72 Optimize.optimize annotations canonical
75 genarateDocs flag canonical
79 { _elmi = I.fromModule annotations canonical
81 , _docs = documentation
89runTypeInference :: L.Localizer -> Can.Module -> Result i (Map.Map N.Name Can.Annotation)
90runTypeInference localizer canonical =
91 case unsafePerformIO (Type.run =<< Type.constrain canonical) of
96 Result.throw (Error.Type localizer errors)
100-- EXHAUSTIVENESS CHECK
103exhaustivenessCheck :: Can.Module -> Result i ()
104exhaustivenessCheck canonical =
105 case PatternMatches.check canonical of
107 Result.throw (Error.Pattern errors)
117data DocsFlag = YesDocs | NoDocs
120genarateDocs :: DocsFlag -> Can.Module -> Result.Result i w Error.Error (Maybe Docs.Module)
121genarateDocs flag modul =
127 Just <$> Docs.fromModule modul
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