Skip to content

Commit 37e8492

Browse files
VLanvinmeta-codesync[bot]
authored andcommitted
Useless error messages -- repro
Summary: Some error messages with unions of maps are useless. Add repros. Reviewed By: TD5 Differential Revision: D85868726 fbshipit-source-id: c726054b934690f30bc3e5c190d55e9dd25e361f
1 parent 88bb35f commit 37e8492

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

crates/elp/src/resources/test/eqwalizer_tests/check/error_messages.pretty

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,64 @@ Because in the expression's type:
125125
because
126126
atom() is not compatible with binary()
127127

128-
6 ERRORS
128+
error: incompatible_types (See https://fb.me/eqwalizer_errors#incompatible_types)
129+
┌─ check/src/error_messages.erl:37:31
130+
131+
37 │ no_good_map_candidate_1(M) -> M.
132+
│ ^
133+
│ │
134+
│ M.
135+
Expression has type: #{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}}
136+
Context expected type: #{foo => #{large_map_key_c => 'large_map_val_c'} | #{large_map_key_d => 'large_map_val_d'}}
137+
138+
139+
Because in the expression's type:
140+
#{ foo =>
141+
Here the type is: #{...}
142+
Context expects type: #{...} | #{...}
143+
No candidate matches in the expected union.
144+
, ... }
145+
146+
------------------------------ Detailed message ------------------------------
147+
148+
#{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}} is not compatible with #{foo => #{large_map_key_c => 'large_map_val_c'} | #{large_map_key_d => 'large_map_val_d'}}
149+
because
150+
at key `foo`:
151+
#{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}} is not compatible with #{foo => #{large_map_key_c => 'large_map_val_c'} | #{large_map_key_d => 'large_map_val_d'}}
152+
because
153+
#{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'} is not compatible with #{large_map_key_c => 'large_map_val_c'} | #{large_map_key_d => 'large_map_val_d'}
154+
because
155+
#{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'} is not compatible with #{large_map_key_c => 'large_map_val_c'}
156+
key `large_map_key_a` is declared in the former but not in the latter and the latter map has no default association
157+
158+
error: incompatible_types (See https://fb.me/eqwalizer_errors#incompatible_types)
159+
┌─ check/src/error_messages.erl:41:31
160+
161+
41 │ no_good_map_candidate_2(M) -> M.
162+
│ ^
163+
│ │
164+
│ M.
165+
Expression has type: #{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}}
166+
Context expected type: #{foo => #{large_map_key_c => 'large_map_val_c', large_map_key_d => 'large_map_val_d'} | 'any'}
167+
168+
169+
Because in the expression's type:
170+
#{ foo =>
171+
Here the type is: #{...}
172+
Context expects type: #{...} | 'any'
173+
No candidate matches in the expected union.
174+
, ... }
175+
176+
------------------------------ Detailed message ------------------------------
177+
178+
#{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}} is not compatible with #{foo => #{large_map_key_c => 'large_map_val_c', large_map_key_d => 'large_map_val_d'} | 'any'}
179+
because
180+
at key `foo`:
181+
#{foo => #{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'}} is not compatible with #{foo => #{large_map_key_c => 'large_map_val_c', large_map_key_d => 'large_map_val_d'} | 'any'}
182+
because
183+
#{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'} is not compatible with #{large_map_key_c => 'large_map_val_c', large_map_key_d => 'large_map_val_d'} | 'any'
184+
because
185+
#{large_map_key_a => 'large_map_val_a', large_map_key_b => 'large_map_val_b'} is not compatible with #{large_map_key_c => 'large_map_val_c', large_map_key_d => 'large_map_val_d'}
186+
key `large_map_key_a` is declared in the former but not in the latter and the latter map has no default association
187+
188+
8 ERRORS

test_projects/eqwalizer_tests/check/src/error_messages.erl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,11 @@ no_record_conversion_2(Foo) -> Foo.
3131

3232
-spec record_conversion(#foo{}) -> {foo, binary(), atom()}.
3333
record_conversion(Foo) -> Foo.
34+
35+
-spec no_good_map_candidate_1(#{foo => #{large_map_key_a => large_map_val_a, large_map_key_b => large_map_val_b}})
36+
-> #{foo => #{large_map_key_c => large_map_val_c} | #{large_map_key_d => large_map_val_d}}.
37+
no_good_map_candidate_1(M) -> M.
38+
39+
-spec no_good_map_candidate_2(#{foo => #{large_map_key_a => large_map_val_a, large_map_key_b => large_map_val_b}})
40+
-> #{foo => #{large_map_key_c => large_map_val_c, large_map_key_d => large_map_val_d} | any}.
41+
no_good_map_candidate_2(M) -> M.

0 commit comments

Comments
 (0)