Commit Graph
117 Commits
Author SHA1 Message Date
Eric Meadows-Jönsson 9b6ec7bae7 Move unreachable function check from xref to group pass (#9168) 2019-06-28 10:25:49 +02:00
José Valim 59fcce0b92 Unify error handling and compiler deadlock checking (#9009) 2019-05-02 16:27:13 +02:00
José Valim 0ce62a2add Rely on IO.warn whenever possible 2019-01-18 14:59:20 +01:00
Michał Muskała ffb931a5ac Fix all compiler warnings (#7992) 2018-07-27 16:42:24 +02:00
José Valim 5edb1d2739 Add hints on mismatched do/end and others pairs
When you are working on large files and you add new code,
you may forget to add a `do` or an `end`. In those cases,
the error message usually points to the first `do` or the
last `end` in the file, which are usually far away from
the source of the error.

This pull request adds a simple heuristic based on the
indentation of the tokens, to try to provide hints of
where the source may be. Those hints are not deterministic
but they may be able to point users to the source of the
problem.

For example, in this case:

    defmodule MyApp do
      def one do
      # end

      def two do
      end
    end

we know that we now that `def two do` is happening on the
same indentation as `def one do`, which may mean that
`def one do` was not closed properly. We store this as a
hint in case the terminators do not match later.

Similarly, in the case below:

    defmodule MyApp do
      def one
      end

      def two do
      end
    end

The `end` on line 3 will end-up closing the defmodule `do`,
on line 1. Because their indentation do not match, it may
be that there is a missing `do`, where the `end` was supposed
to align.

Some basic testing show those heuristics work on the majority
of the cases, but we will only be sure when we have enough
feedback from the community.
2018-06-10 13:55:49 +02:00
José Valim 9e1485f29a Start v1.7 2017-12-23 19:40:30 +01:00
José Valim 3e72f808ed Properly guard bare_warn to catch errors early 2017-11-03 19:53:30 +01:00
José Valim b4c8e86c5f Pass line and file to IO.warn whenever possible 2017-11-03 18:49:07 +01:00
José Valim 4b930b0a0b Avoid conflicts with erl_anno in meta
We avoid using :file publicly as well as :location privately.
We do still use :file privately but that's supposed to mirror
the `-file` annotation in Erlang before function definitions.
2017-10-25 00:33:05 +02:00
José Valim 34651f1034 Format errors_test.exs 2017-10-12 09:35:58 +02:00
Jake Becker 727ac0525d Add option :return_errors to ParallelCompiler (#6446) 2017-09-21 08:14:52 +02:00
José Valim 6030be5ae5 Add literal annotation for aliases 2017-08-28 23:59:45 +02:00
José Valim a378154652 Make terminator binaries 2017-08-27 12:39:40 +02:00
Andrea Leopardi 2f9b651011 Merge integer tokens into the "int" token (#6499) 2017-08-23 11:55:12 +02:00
Alex Jiao d74bd047df Add terminator info to sigil AST node metadata (#6305) 2017-07-08 01:05:37 +02:00
Jake Becker 90296aa680 Add --all-warnings option to Elixir compiler (#6224)
* Track Elixir build warnings in the manifest

* Add --all-warnings option to Elixir compiler

* Document "each_warning" option in ParallelCompiler

* Handle old manifest version :v6 when parsing manifest

* Track warnings during compile using a map in the Agent's state
2017-06-18 21:40:29 +01:00
Michał Muskała 640125449b Clean-up use of get_stracktrace in elixir_errors.erl (#6092)
It's possible get_stacktrace won't work outside of catch clauses in the future.

Reference: https://github.com/erlang/otp/pull/1449
2017-05-11 09:44:43 +02:00
José Valim 102a8a3fa8 Add elixir_erl_compiler 2017-02-23 13:15:26 +01:00
José Valim 412d5f5661 Start refactoring on elixir_compiler 2017-02-23 13:15:26 +01:00
José Valim d27b4c6479 Remove duplication in format_errors 2017-02-10 20:55:53 +01:00
José Valim c1e4274162 Improve compiler message on unexpected end of line, closes #5137 2016-11-20 11:01:30 +01:00
José Valim f0b84922d9 Ensure we consistently wrap variables in quotes 2016-10-22 22:25:18 +02:00
Aleksei Magusev d22e456047 Improve warning output (#4631) 2016-05-16 00:10:51 +02:00
José Valim 7cac73a095 Unify warning calls 2016-05-15 20:34:29 +02:00
eksperimental 4ceb41e71b Formmating: Add white space around vertical bar (#4507) 2016-04-25 00:55:49 +02:00
eksperimental bed9816549 Formatting: add white space after comma (#4491)
Standardizes the use of comma leaving a white space after it whenever applicable.

Note: It does not enforce this in quantifiers in regular expressions such as in: `x{1,3}`
2016-04-19 01:23:50 +02:00
Andrea Leopardi 8619d26c4d Handle chars literals in the parser for better syntax errors
Before this commit, we handled char literals (like `?a`) in the
tokenizer, turning a literal like `?a` into the token `{:number, _,
97}` (thus indistinguishable from the literal `97` at the parsing
stage). This led to error messages with the integer for the character
instead of the character literal, e.g.:

    iex> :ok ?a
    ** (SyntaxError) iex:11: syntax error before: 97

With this commit, we now turn `?a` into the token `{:char, _,
97}` (which is the same token used by Erlang for Erlang char literals
like `$a`); since it's the same token as in Erlang, the parser will now
output the char literal as an Erlang char (`?a` would be printed as
`$a`). We hijack the error message in elixir_errors.erl to end up with
the correct message:

    iex> :ok ?a
    ** (SyntaxError) iex:11: syntax error before: ?a
2016-04-04 21:29:15 +02:00
José Valim e0aeb953c6 Format beam validator errors properly, closes #4263 2016-02-06 17:23:18 +01:00
Aleksei Magusev ecd86761da Cover bittype_mismatch error missing in :erl_lint.format_error/1
For example, `<<0::little-big>>` expression.
2015-12-05 12:53:18 +01:00
José Valim 8703e9655e Unify undefined function messages 2015-11-24 22:07:16 +01:00
José Valim 3ccd5137ef Add generated annotations 2015-10-11 12:02:47 -05:00
José Valim 9a0911a6a7 Handle warns coming from erlang with line set to :none 2015-08-21 16:31:49 +02:00
José Valim bb36b5f3ea Refactor extraction of meta location 2015-05-16 10:41:39 +02:00
Or Neeman 5b0bbb2d72 Bugfix to syntax error before sigil
Closes #3324
2015-05-12 14:35:05 -06:00
José Valim ec0702ff18 Embed consolidation information as a function in the protocol 2015-04-30 23:02:45 +02:00
eksperimental 61675c3ea8 Add space after comma: Format consistently 2015-03-17 22:55:27 +07:00
Or Neeman 2319400358 Refactor compiler errors (elixir_errors:parse_error/4) 2015-03-05 19:45:15 -06:00
Or Neeman 3ce822ecd2 Produce clearer messages for syntax errors before a sigil
Closes #3130
2015-03-05 06:25:59 -06:00
José Valim 20bf4b0995 Ignore exported vars warning
Closes #2798
2015-01-28 21:49:55 +01:00
Xavier Defrang 7381cbee02 Invert the order of non matching token messages (closes #2993) 2015-01-10 09:40:44 +01:00
Alexander Ivanov c76a186687 Change location info format in tokenizer
Start column counting in tokenizer from 1, store location info in a tuple `{Line, BeginColumn, EndColumn}` instead of a list
2015-01-05 13:35:23 +02:00
Alexander Ivanov a288ddd326 Add column info in tokenizer, #2987
Add column info for each token in elixir_tokenizer.
Change the format of location info from `Line` to `[Line, BeginColumn,
EndColumn]`. Pass the current column after the current line in
`elixir_tokenizer:tokenize`. Reflect the change in related modules.
2015-01-05 03:34:53 +02:00
José Valim 0c5b3d5e67 Improve token errors for aliases, closes #2818 2014-10-21 11:41:36 -02:00
José Valim 08677de10d Properly handle eval_failure warnings, closes #2835 2014-10-21 11:08:21 -02:00
James Fish 2417b196a4 Fix elixir dialyzer warnings 2014-09-03 19:29:01 +01:00
José Valim a1e4a2741f Avoid unecessary wrap inside do keyword 2014-07-19 18:13:38 +02:00
José Valim 2865bd8653 Make elixir_errors API more strict and consider :file in meta 2014-07-08 18:54:40 +02:00
José Valim 1bd0ca6dea Return explicit :ok from more functions 2014-07-05 13:43:52 +02:00
José Valim 6c3a4bd019 Fix the guard for this clause evaluates to false warning
Since the guard can be hidden inside if/unless, it is better
to have a more generic error, stating we will always get the
same result from an check/guard.
2014-07-03 00:58:02 +02:00
José Valim 55e885f5c5 Ensure we don't leak erlang terms on failure, closes #2303 2014-05-21 12:44:12 +02:00