Skip to content

Commit 0bb0966

Browse files
Fix reporting multiple errors (#99)
Fixes #96.
1 parent 34178f3 commit 0bb0966

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

src/Compiler/Canonicalize/Module.elm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ canonicalizeBinop (A.At _ (Src.Infix op associativity precedence func)) =
8585
--
8686
-- 1. Detect cycles using ALL dependencies => needed for type inference
8787
-- 2. Detect cycles using DIRECT dependencies => nonterminating recursion
88+
--
8889

8990

9091
canonicalizeValues : SyntaxVersion -> Env.Env -> List (A.Located Src.Value) -> MResult i (List W.Warning) Can.Decls

src/Compiler/Reporting/Result.elm

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,34 @@ bind callback (RResult ka) =
160160

161161

162162
traverse : (a -> RResult i w x b) -> List a -> RResult i w x (List b)
163-
traverse func list =
164-
loop (traverseHelp func) ( list, [] )
165-
166-
167-
traverseHelp : (a -> RResult i w e b) -> ( List a, List b ) -> RResult i w e (Step ( List a, List b ) (List b))
168-
traverseHelp callback ( list, result ) =
169-
case list of
170-
[] ->
171-
pure (Done (List.reverse result))
172-
173-
a :: rest ->
174-
fmap (\b -> Loop ( rest, b :: result )) (callback a)
163+
traverse func =
164+
List.foldl
165+
(\a (RResult acc) ->
166+
RResult <|
167+
\i w ->
168+
let
169+
(RResult kv) =
170+
func a
171+
in
172+
case acc i w of
173+
ROk i1 w1 accList ->
174+
case kv i1 w1 of
175+
ROk i2 w2 value ->
176+
ROk i2 w2 (value :: accList)
177+
178+
RErr i2 w2 e2 ->
179+
RErr i2 w2 e2
180+
181+
RErr i1 w1 e1 ->
182+
case kv i1 w1 of
183+
ROk i2 w2 _ ->
184+
RErr i2 w2 e1
185+
186+
RErr i2 w2 e2 ->
187+
RErr i2 w2 (OneOrMore.more e1 e2)
188+
)
189+
(pure [])
190+
>> fmap List.reverse
175191

176192

177193
mapTraverseWithKey : (k -> comparable) -> (k -> k -> Order) -> (k -> a -> RResult i w x b) -> Dict comparable k a -> RResult i w x (Dict comparable k b)

tests/backwards-compatibility.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ describe("backwards compatibility", () => {
160160
});
161161

162162
describe("tuples", () => {
163-
test.skip("fails on 3+ tuples on elm files", () => {
163+
test("fails on 3+ tuples on elm files", () => {
164164
const elmOutput = `${tmpDir}/guida-test-elm-tuple-n-${process.pid}.json`;
165165
const guidaOutput = `${tmpDir}/guida-test-guida-tuple-n-${process.pid}.json`;
166166

0 commit comments

Comments
 (0)