Commit Graph
1937 Commits
Author SHA1 Message Date
José Valim 8b82564ebd Make sure error messages contain all relevant information
We have recently changed the compiler to emit a warning
for each undefined function with a generic error at the
end saying the module could not be defined.

Unfortunately, some tools like IDEs and Phoenix Reloader
give higher priority to errors over warnings, which means
an error would be shown but without any actionable
information.

This commit changes it so the first undefined function is
an error and all following ones are warnings.
2019-12-23 11:47:21 +01:00
Wojtek Mach 71cbb6a2c5 Improve error message on import/2 (#9663)
Before:

    iex(1)> a = [flatten: 1]; import List, only: a
    ** (CaseClauseError) no case clause matching: {:only, {:a, [version: 0, line: 1], nil}}
        (elixir 1.10.0-dev) src/elixir_import.erl:10: :elixir_import.import/4

After:

    iex(1)> a = [flatten: 1]; import List, only: a
    ** (CompileError) iex:1: invalid :only option for import, expected value to be an atom :functions, :macros, or a list literal, got: a
        (elixir 1.10.0-dev) src/elixir_import.erl:22: :elixir_import.import/4
2019-12-20 08:56:56 +01:00
José Valim 6122c6885d Do not add no_warn_undefined to CInf chunk 2019-12-09 10:33:35 +01:00
Eric Meadows-Jönsson a28df2eaec Remove signatures from checker chunk (#9634) 2019-12-07 18:09:50 +01:00
José Valim b2d58e5f35 Add Application.compile_env/3 (#9628)
Mix stores the compile_env in each applications' .app file.

Releases and Mix tasks were also changed to validate against
the runtime configuration against any stored `compile_env`.
In case of mismatches, an error is raised during boot.
2019-12-06 17:23:01 +01:00
José Valim 9f13fc5d4e Refactor elixir_config and mix compilers for upcoming changes 2019-12-04 11:59:51 +01:00
José Valim 7bef4e3095 Print all undefined functions as warnings and then raise (#9623)
Sometimes one undefined function warning can hide others.
For example, in a function call like this:

    foo(bar 1, 2)

The user may be expecting it to be called as:

    foo(bar(1), 2)

But Elixir compiles it to:

    foo(bar(1, 2))

In this case, the warning would be one of "undefined
function foo/1" or "undefined function bar/2", but they
are only "half truths". By showing all undefined function
warnings, we improve errors like above and it allows
users to see all undefined calls at once, when it would
otherwise require them to compile the code multiple times.
2019-12-03 10:33:59 +01:00
José Valim e66115644a Add examples to ambiguous op error message 2019-12-02 10:27:28 +01:00
Eksperimental 8eef0ae581 Replace usage of "etc." (#9569) 2019-11-29 08:22:18 +01:00
José Valim 37e9ddd6e5 Use infinity timeout in internal services 2019-11-27 11:17:09 +01:00
José Valim 47751cf4f1 No need to cache home 2019-11-22 19:08:35 +01:00
Eksperimental e8378b83da Replace usage of "e.g." (#9571) 2019-11-22 11:26:23 +01:00
Eksperimental 83ec6e3614 Use argument instead of arg in error messages (#9561) 2019-11-19 09:09:10 +01:00
José Valim dbf8a7a9fe Use version metadata in Erlang pass 2019-11-16 02:45:55 +01:00
Eric Meadows-Jönsson 623a91936b Track variable version globally (#9536)
Instead of incrementing the version for each variable individually we increment it globally for all variables. This means we can uniquely identify each variable assignment with only the version.
2019-11-15 17:18:39 +01:00
José Valim 19157377cc Add patterns information to guards page 2019-11-14 12:33:53 +01:00
Eric Meadows-Jönsson 9587134429 Change Bitwise macros to rewrites 2019-11-14 00:16:01 +01:00
Eric Meadows-Jönsson 8ece599b6d Add reverse rewrite and inline rules 2019-11-14 00:16:01 +01:00
Eric Meadows-Jönsson d2df63470f Move unification to Infer module 2019-11-13 16:42:25 +01:00
Eric Meadows-Jönsson 4ae121700a Split Infer into Expr and Pattern modules 2019-11-13 16:42:25 +01:00
Eric Meadows-Jönsson a3fc4b3f9e Add variable version to expanded meta (#9520) 2019-11-13 12:57:21 +01:00
José Valim 08d6fe8cb8 Add parens to static remote nullary calls
test/erlang/module_test.erl have also been removed
as they have been ported elsewhere.
2019-11-08 17:59:08 +01:00
José Valim b423b9e2b9 Ensure reassigned variables are properly carried forward 2019-11-06 19:00:36 +01:00
José Valim 37d0931fd1 Improve error messages on keywords, closes #9467 2019-11-04 14:51:39 +01:00
José Valim c33baba3a8 Add Kernel.is_map_key/2 2019-11-04 12:47:26 +01:00
José Valim fe2f36877a Simplify emission of rescue clauses to avoid duplicate generation 2019-11-03 16:44:49 +01:00
José Valim 345403c05d Refactor Erlang try code 2019-11-03 16:22:20 +01:00
José Valim 5944706239 No need to track stacktrace usage 2019-11-03 13:56:39 +01:00
José Valim 7648c0f3a8 elif to else 2019-11-03 13:06:30 +01:00
Łukasz Jan Niemier 9fca33e09f Cleanup TODOs for OTP 21+ (#9477) 2019-11-03 13:05:18 +01:00
José Valim 43daa41c11 Remove redundant rewrite as it has been optimized in the VM 2019-11-02 17:12:27 +01:00
José Valim cf881389cf Remove unecessary Erlang macro 2019-11-01 19:19:54 +01:00
Łukasz Jan Niemier f128ae3d7a Use Erlang's logger as main logging implementation (#9333) 2019-11-01 15:53:05 +01:00
Glauber Campinho c363d7e4d0 Avoid second calculation of arity in expand_local/4 (#9463) 2019-10-31 20:49:23 +01:00
Glauber Campinho a829084bb8 Raise error on functions/guards without implementation (#9461)
Fixes #9392.

When a local bodiless function is called the generated Erlang code is invalid, this commit checks for bodiless locals during the compilation and raises an error on that avoiding the invalid code.
2019-10-31 07:00:43 -05:00
José Valim a932e8abf2 Bootstrap typespec before code 2019-10-29 20:42:24 +01:00
José Valim 978024023c Use maps:merge on Erlang pass 2019-10-29 19:37:21 +01:00
José Valim cbbaa1e6e8 Apply mergev optmization on erlang pass 2019-10-29 19:37:12 +01:00
José Valim 30607b8a54 Remove unecessary mergev on elixir_erl 2019-10-29 18:20:34 +01:00
José Valim c74bfa4a52 Only transform environment in match if necessary 2019-10-29 17:17:53 +01:00
José Valim 1c9b55ae6d Further optimize variable merging 2019-10-29 17:17:53 +01:00
José Valim acc9b49208 Move unused_vars to its own variable 2019-10-29 17:17:53 +01:00
José Valim 4992622be1 Remove a need to merge unused vars 2019-10-29 17:17:53 +01:00
José Valim 0a5ce41cb5 Simplify scoped merge of unused vars 2019-10-29 17:17:53 +01:00
José Valim dc3387bf84 Remove need for mergev on match/head 2019-10-29 17:17:53 +01:00
Glauber Campinho 688b1c6cc8 Execute callbacks on :elixir_compiler after all warnings are emitted (#9447)
Currently the callbacks on :elixir_compiler are called before the warnings of unused aliases and imports are emitted, causing the messages to not consumed during the compilation. This commit changes `:elixir_lexical.run/2` to `:elixir_lexical.run/3` splitting the callback in two, one during the execution to evaluate the forms and another to be called after all the warnings are emitted.

Fixes #9440
2019-10-26 10:58:28 +02:00
José Valim 2493ff907d Remove unused funtionality and erase pdict properly 2019-10-25 15:29:46 +02:00
José Valim 7e398d5c64 Validate bind_quoted, closes #9406 2019-10-21 21:08:02 +02:00
José Valim 8667a268a4 Improve errors for calls on aliases 2019-10-21 21:02:00 +02:00
Fernando Tapia Rico bb07e717e4 Remove redundant guard
Kudos to @michalmuskala
2019-10-14 11:57:51 +02:00