on master help sign in
show paths relative to project root in error messages
8224011Evan Czaplicki
builder/src/Build.hs+7−7
@@ -159,7 +159,7 @@ fromExposed style root details docsGoal exposed@(NE.List e es) =
159 putMVar rmvar resultMVars
159 putMVar rmvar resultMVars
160 results <- traverse readMVar resultMVars
160 results <- traverse readMVar resultMVars
161 writeDetails root details results
161 writeDetails root details results
162− finalizeExposed docsGoal exposed results
162+ finalizeExposed root docsGoal exposed results
163
163
164
164
165
165
@@ -765,8 +765,8 @@ addNewLocal name result locals =
765-- FINALIZE EXPOSED
765-- FINALIZE EXPOSED
766
766
767
767
768−finalizeExposed :: DocsGoal docs -> NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> IO (Either Exit.BuildProblem docs)
768+finalizeExposed :: FilePath -> DocsGoal docs -> NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> IO (Either Exit.BuildProblem docs)
769−finalizeExposed docsGoal exposed results =
769+finalizeExposed root docsGoal exposed results =
770 case foldr (addImportProblems results) [] (NE.toList exposed) of
770 case foldr (addImportProblems results) [] (NE.toList exposed) of
771 p:ps ->
771 p:ps ->
772 return $ Left $ Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps))
772 return $ Left $ Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps))
@@ -774,7 +774,7 @@ finalizeExposed docsGoal exposed results =
774 [] ->
774 [] ->
775 case Map.foldr addErrors [] results of
775 case Map.foldr addErrors [] results of
776 [] -> Right <$> finalizeDocs docsGoal results
776 [] -> Right <$> finalizeDocs docsGoal results
777− e:es -> return $ Left $ Exit.BuildBadModules e es
777+ e:es -> return $ Left $ Exit.BuildBadModules root e es
778
778
779
779
780addErrors :: Result -> [Error.Module] -> [Error.Module]
780addErrors :: Result -> [Error.Module] -> [Error.Module]
@@ -942,7 +942,7 @@ finalizeReplArtifacts env@(Env _ root projectType _ _ _ _) source modul@(Src.Mod
942 DepsBlock ->
942 DepsBlock ->
943 case Map.foldr addErrors [] results of
943 case Map.foldr addErrors [] results of
944 [] -> return $ Left $ Exit.ReplBlocked
944 [] -> return $ Left $ Exit.ReplBlocked
945− e:es -> return $ Left $ Exit.ReplBadLocalDeps e es
945+ e:es -> return $ Left $ Exit.ReplBadLocalDeps root e es
946
946
947 DepsNotFound problems ->
947 DepsNotFound problems ->
948 return $ Left $ Exit.ReplBadInput source $ Error.BadImports $
948 return $ Left $ Exit.ReplBadInput source $ Error.BadImports $
@@ -1186,10 +1186,10 @@ data Main
1186
1186
1187
1187
1188toArtifacts :: Env -> Dependencies -> Map.Map ModuleName.Raw Result -> NE.List MainResult -> Either Exit.BuildProblem Artifacts
1188toArtifacts :: Env -> Dependencies -> Map.Map ModuleName.Raw Result -> NE.List MainResult -> Either Exit.BuildProblem Artifacts
1189−toArtifacts (Env _ _ projectType _ _ _ _) foreigns results mainResults =
1189+toArtifacts (Env _ root projectType _ _ _ _) foreigns results mainResults =
1190 case gatherProblemsOrMains results mainResults of
1190 case gatherProblemsOrMains results mainResults of
1191 Left (NE.List e es) ->
1191 Left (NE.List e es) ->
1192− Left (Exit.BuildBadModules e es)
1192+ Left (Exit.BuildBadModules root e es)
1193
1193
1194 Right mains ->
1194 Right mains ->
1195 Right $ Artifacts (projectTypeToPkg projectType) foreigns mains $
1195 Right $ Artifacts (projectTypeToPkg projectType) foreigns mains $
builder/src/Reporting.hs+2−2
@@ -364,10 +364,10 @@ toFinalMessage done result =
364
364
365 Left problem ->
365 Left problem ->
366 case problem of
366 case problem of
367− Exit.BuildBadModules _ [] ->
367+ Exit.BuildBadModules _ _ [] ->
368 "Detected problems in 1 module."
368 "Detected problems in 1 module."
369
369
370− Exit.BuildBadModules _ (_:ps) ->
370+ Exit.BuildBadModules _ _ (_:ps) ->
371 "Detected problems in " ++ show (2 + length ps) ++ " modules."
371 "Detected problems in " ++ show (2 + length ps) ++ " modules."
372
372
373 Exit.BuildProjectProblem _ ->
373 Exit.BuildProjectProblem _ ->
builder/src/Reporting/Exit.hs+8−8
@@ -1759,7 +1759,7 @@ makeToReport make =
1759
1759
1760
1760
1761data BuildProblem
1761data BuildProblem
1762− = BuildBadModules Error.Module [Error.Module]
1762+ = BuildBadModules FilePath Error.Module [Error.Module]
1763 | BuildProjectProblem BuildProjectProblem
1763 | BuildProjectProblem BuildProjectProblem
1764
1764
1765
1765
@@ -1778,8 +1778,8 @@ data BuildProjectProblem
1778toBuildProblemReport :: BuildProblem -> Help.Report
1778toBuildProblemReport :: BuildProblem -> Help.Report
1779toBuildProblemReport problem =
1779toBuildProblemReport problem =
1780 case problem of
1780 case problem of
1781− BuildBadModules e es ->
1781+ BuildBadModules root e es ->
1782− Help.compilerReport e es
1782+ Help.compilerReport root e es
1783
1783
1784 BuildProjectProblem projectProblem ->
1784 BuildProjectProblem projectProblem ->
1785 toProjectProblemReport projectProblem
1785 toProjectProblemReport projectProblem
@@ -2040,7 +2040,7 @@ reactorToReport problem =
2040data Repl
2040data Repl
2041 = ReplBadDetails Details
2041 = ReplBadDetails Details
2042 | ReplBadInput BS.ByteString Error.Error
2042 | ReplBadInput BS.ByteString Error.Error
2043− | ReplBadLocalDeps Error.Module [Error.Module]
2043+ | ReplBadLocalDeps FilePath Error.Module [Error.Module]
2044 | ReplProjectProblem BuildProjectProblem
2044 | ReplProjectProblem BuildProjectProblem
2045 | ReplBadGenerate Generate
2045 | ReplBadGenerate Generate
2046 | ReplBadCache
2046 | ReplBadCache
@@ -2054,10 +2054,10 @@ replToReport problem =
2054 toDetailsReport details
2054 toDetailsReport details
2055
2055
2056 ReplBadInput source err ->
2056 ReplBadInput source err ->
2057− Help.compilerReport (Error.Module N.replModule "REPL" File.zeroTime source err) []
2057+ Help.compilerReport "/" (Error.Module N.replModule "REPL" File.zeroTime source err) []
2058
2058
2059− ReplBadLocalDeps e es ->
2059+ ReplBadLocalDeps root e es ->
2060− Help.compilerReport e es
2060+ Help.compilerReport root e es
2061
2061
2062 ReplProjectProblem projectProblem ->
2062 ReplProjectProblem projectProblem ->
2063 toProjectProblemReport projectProblem
2063 toProjectProblemReport projectProblem
@@ -2085,7 +2085,7 @@ workerToReport :: Worker -> Help.Report
2085workerToReport problem =
2085workerToReport problem =
2086 case problem of
2086 case problem of
2087 WorkerInputError err ->
2087 WorkerInputError err ->
2088− Help.compilerReport err []
2088+ Help.compilerReport "/" err []
2089
2089
2090 WorkerNoMain ->
2090 WorkerNoMain ->
2091 Help.report "NO MAIN" Nothing
2091 Help.report "NO MAIN" Nothing
builder/src/Reporting/Exit/Help.hs+5−5
@@ -29,7 +29,7 @@ import qualified Reporting.Error as Error
29
29
30
30
31data Report
31data Report
32− = CompilerReport Error.Module [Error.Module]
32+ = CompilerReport FilePath Error.Module [Error.Module]
33 | Report
33 | Report
34 { _title :: String
34 { _title :: String
35 , _path :: Maybe FilePath
35 , _path :: Maybe FilePath
@@ -52,7 +52,7 @@ jsonReport =
52 Report
52 Report
53
53
54
54
55−compilerReport :: Error.Module -> [Error.Module] -> Report
55+compilerReport :: FilePath -> Error.Module -> [Error.Module] -> Report
56compilerReport =
56compilerReport =
57 CompilerReport
57 CompilerReport
58
58
@@ -64,8 +64,8 @@ compilerReport =
64reportToDoc :: Report -> D.Doc
64reportToDoc :: Report -> D.Doc
65reportToDoc report_ =
65reportToDoc report_ =
66 case report_ of
66 case report_ of
67− CompilerReport e es ->
67+ CompilerReport root e es ->
68− Error.toDoc e es
68+ Error.toDoc root e es
69
69
70 Report title maybePath message ->
70 Report title maybePath message ->
71 let
71 let
@@ -94,7 +94,7 @@ reportToDoc report_ =
94reportToJson :: Report -> E.Value
94reportToJson :: Report -> E.Value
95reportToJson report_ =
95reportToJson report_ =
96 case report_ of
96 case report_ of
97− CompilerReport e es ->
97+ CompilerReport _ e es ->
98 E.object
98 E.object
99 [ "type" ==> E.chars "compile-errors"
99 [ "type" ==> E.chars "compile-errors"
100 , "errors" ==> E.list Error.toJson (e:es)
100 , "errors" ==> E.list Error.toJson (e:es)
compiler/src/Reporting/Error.hs+20−16
@@ -12,6 +12,7 @@ module Reporting.Error
12import qualified Data.ByteString as B
12import qualified Data.ByteString as B
13import qualified Data.NonEmptyList as NE
13import qualified Data.NonEmptyList as NE
14import qualified Data.OneOrMore as OneOrMore
14import qualified Data.OneOrMore as OneOrMore
15+import qualified System.FilePath as FP
15
16
16import qualified Elm.ModuleName as ModuleName
17import qualified Elm.ModuleName as ModuleName
17import qualified File
18import qualified File
@@ -38,8 +39,8 @@ import qualified Reporting.Report as Report
38data Module =
39data Module =
39 Module
40 Module
40 { _name :: ModuleName.Raw
41 { _name :: ModuleName.Raw
41− , _path :: FilePath
42+ , _absolutePath :: FilePath
42− , _time :: File.Time
43+ , _modificationTime :: File.Time
43 , _source :: B.ByteString
44 , _source :: B.ByteString
44 , _error :: Error
45 , _error :: Error
45 }
46 }
@@ -92,26 +93,26 @@ toReports source err =
92-- TO DOC
93-- TO DOC
93
94
94
95
95−toDoc :: Module -> [Module] -> D.Doc
96+toDoc :: FilePath -> Module -> [Module] -> D.Doc
96−toDoc err errs =
97+toDoc root err errs =
97 let
98 let
98− (NE.List m ms) = NE.sortBy _time (NE.List err errs)
99+ (NE.List m ms) = NE.sortBy _modificationTime (NE.List err errs)
99 in
100 in
100− D.vcat (toDocHelp m ms)
101+ D.vcat (toDocHelp root m ms)
101
102
102
103
103−toDocHelp :: Module -> [Module] -> [D.Doc]
104+toDocHelp :: FilePath -> Module -> [Module] -> [D.Doc]
104−toDocHelp module1 modules =
105+toDocHelp root module1 modules =
105 case modules of
106 case modules of
106 [] ->
107 [] ->
107− [moduleToDoc module1
108+ [moduleToDoc root module1
108 ,""
109 ,""
109 ]
110 ]
110
111
111 module2 : otherModules ->
112 module2 : otherModules ->
112− moduleToDoc module1
113+ moduleToDoc root module1
113 : toSeparator module1 module2
114 : toSeparator module1 module2
114− : toDocHelp module2 otherModules
115+ : toDocHelp root module2 otherModules
115
116
116
117
117toSeparator :: Module -> Module -> D.Doc
118toSeparator :: Module -> Module -> D.Doc
@@ -133,19 +134,22 @@ toSeparator beforeModule afterModule =
133-- MODULE TO DOC
134-- MODULE TO DOC
134
135
135
136
136−moduleToDoc :: Module -> D.Doc
137+moduleToDoc :: FilePath -> Module -> D.Doc
137−moduleToDoc (Module _ path _ source err) =
138+moduleToDoc root (Module _ absolutePath _ source err) =
138 let
139 let
139 reports =
140 reports =
140 toReports (Code.toSource source) err
141 toReports (Code.toSource source) err
142+
143+ relativePath =
144+ FP.makeRelative root absolutePath
141 in
145 in
142− D.vcat $ map (reportToDoc path) (NE.toList reports)
146+ D.vcat $ map (reportToDoc relativePath) (NE.toList reports)
143
147
144
148
145reportToDoc :: FilePath -> Report.Report -> D.Doc
149reportToDoc :: FilePath -> Report.Report -> D.Doc
146−reportToDoc path (Report.Report title _ _ message) =
150+reportToDoc relativePath (Report.Report title _ _ message) =
147 D.vcat
151 D.vcat
148− [ toMessageBar title path
152+ [ toMessageBar title relativePath
149 , ""
153 , ""
150 , message
154 , message
151 , ""
155 , ""