The previous format would use | before code blocks
and would remove # from headings, we have reverted
those changes to make the printed documentation and
help be closer to what it would look on source while
providing more information (in the case of headings).
They could be confusing especially if read together with the
docs for List.delete_at/2 (since both use lists of integers, which
makes index vs element confusing). Using a list of atoms in
List.delete/2 makes things unambiguous for this function.
This commit contains no functional changes, but it renames a bunch of
variables and functions to make their purpose clearer and adds a couple
of informative comments.
Right now, application of anonymous function literals in
Macro.to_string/2 is represented like this:
iex> Macro.to_string(quote do: (fn x -> x end).(1))
"fn x -> x end.(1)"
While this is valid, I think it's far more common to have such calls
with the literal fn wrapped in parens:
(fn x -> x end).(1)
This commit makes Macro.to_string/2 behave like this.
Right now, Kernel.macro_exported?/3 blindly calls __info__/1 on the
given module, but since __info__/1 is defined by Elixir when compiling
modules, this breaks if an Erlang module is passed to
macro_exported?/3. This commit fixes this behaviour by always returning
"false" in macro_exported?/3 when an Erlang module is given.
Change how we mark the generated AST for suppressing dialyzer errors -
instead of [generated: true, location: 0], we provide proper line number.
This means, however, that on OTP 18, those nodes won't be recognized
as generated and warnings will be issued.
It was decided that proper error messages are more important than
avoiding bogus dialyzer warnings.
The old mark for generated code is left in places that made compiler
issue warnings on 18.
The bad remote call dialyzer warnings can be suppressed with the
@dialyzer :no_fail_call
module attribute.