Do not automatically load modules after their compilation, guaranteeing a more consistent compile time experience and drastically improving compilation times
Module
Module
37 changes across 21 versions
Changes by version
Include module attribute line and name when tracing its aliases
Deprecate Module.eval_quoted/3 in favor of Code.eval_quoted/3
Return default value in Module.get_attribute/3 for persisted attributes which have not yet been written to
Add support for @nifs annotation from Erlang/OTP 25
Add support for missing @dialyzer configuration
Mark functions as generated in "Docs" chunk
Add Module.get_last_attribute/3
Ensure that Module.get_attribute/3 returns nil and not the given default value when an attribute has been explicitly set as nil
Support new @after_verify attribute for executing code whenever a module is verified
Fix loop while unifying type variables
Support :nillify_clauses in Module.get_definition/3
Add Module.attributes_in/1 and Module.overridables_in/1
Raise on invalid @dialyzer attributes
Add Module.get_definition/2 and Module.delete_definition/2
Allow @on_load to be a private function
Validate @dialyzer related module attributes
Add Module.reserved_attributes/0 to list all reserved attributes by the language
Do not warn for attributes used in @after_compile
Fix accidental breaking change where bodiless clauses had their body value on @on_definition callbacks set to an empty list instead of nil
Ensure the code verifier handles the :erlang.size/1 guard properly
Add Module.has_attribute?/2
Add @compile {:no_warn_undefined, mfa_or_module} to turn off undefined function warnings
Raise instead of silently failing when performing a write module operation during after-compile
Fix @macrocallback definitions with a when clause
Add Module.get_attribute/3
Avoid warnings when using Module.eval_quoted in the middle of existing definitions
Do not remove docs for previous function declaration when @impl true is used
Introduce @deprecated and @since attributes
on_definition/6 callback receives body wrapped in a keyword list, such as [do: body]. This solves a bug where it was impossible to distinguish between a bodyless clause and a function that returns nil.
Using Erlang parse transforms via @compile {:parse_transform, _} is deprecated
Do not expect stacktraces to be always present when dispatching to locals during the module compilation
Improve name inference for function signatures in documentation metadata
Do not accept non-Elixir module names in Module.split/1
Module.function/3 is deprecated, please use :erlang.make_fun/3 instead
Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated
Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated