Enhancement
80 changes
Add :parser_options to EEx functions
Add c:Calendar.year_of_era/3 to support calendars where the beginning of a new era does not align with the beginning of a new year
Support --short-version on the CLI that does not boot the VM
Add Code.string_to_quoted_with_comments/2 and Code.quoted_to_algebra/2
Add more :token_metadata to aliases and remote calls when parsing strings
Add Code.Fragment module to provide best-effort information from code fragments. The module currently provides an updated Code.Fragment.cursor_context/2 with operator support and Code.Fragment.surround_context/2 which looks at a given position in a fragment and find its surrounding delimiters
Allow custom sigil formatting on Code.format_string!/2
Add {:on_module, bytecode, :none} trace to compilation tracers
Optimize Enum.concat/1 for lists of lists
Add Enum.slide/3
Better format Elixir exceptions in Erlang
Allow default inspect fun to be set globally with Inspect.Opts.default_inspect_fun/1
Allow :eof to be given as limit to IO.getn/2
Support the :sigils option in import Mod, only: :sigils and allow the sigil modifiers to be also digits
Make get_in consistently abort when nil values are found
Improve compilation times by reducing the amount of copies of the AST across compiler processes
Raise if trying to define a module with a slash in its name
Warn when ?\ is used and there is no need for a escape character
Track structs in typespecs as export deps instead of compile-time deps
Add power operator (**/2)
Add Keyword.validate/2
Implement Keyword.filter/2 and Keyword.map/2
Add List.keyfind!/3
Add Macro.prewalker/1 and Macro.postwalker/1
Add the following reflection functions: required?/2, lookup_import/2, fetch_alias/2, and fetch_macro_alias/2
Implement Map.filter/2 and Map.map/2
Support :nillify_clauses in Module.get_definition/3
Add Module.attributes_in/1 and Module.overridables_in/1
Add "did you mean?" suggestions to OptionParser.ParseError messages
Add record reflection via @__records__
Add Task.completed/1
Add Task.ignore/1 to keep a task running but ignoring all of its results
Reduce the amount of copying Task.async* functions
Add URI.new/1 and URI.new!/1
Show hint if comparing different but equivalent strings
Add with_io/3 to return result with captured io
Add with_log/2 to return result with captured logs
Add path autocompletion whenever when the cursor follows "./ or "/ or "DRIVER: where DRIVER is a single letter
Add autocompletion for sigils, struct names, and struct fields
Allow multiple modules to be given to r/1
Add Logger.put_application_level/2
Add MIX_INSTALL_FORCE environment variable support
Support :config and :system_env in Mix.install/2
Add Mix.installed?/0
Add :default option to Mix.Shell.yes?
Run loadconfig before building archive
Move Elixir version check to before deps are compiled, in order to give feedback earlier
Do not recompile files if their modification time change but their contents are still the same and the .beam files are still on disk
Do not recompile all Elixir sources when Erlang modules change, only dependent ones
Do not recompile Elixir files if mix.exs changes, instead recompile only files using Mix.Project or trigger a recompilation if a compiler option changes
Only recompile needed files when a dependency is added, updated or removed
Only recompile needed files when a dependency is configured
Add :subdir option to git deps
Run loadconfig before building escript
Support :plugins in mix format that can hook into custom extensions and sigils
Add Mix.Tasks.Format.formatter_for_file/2
No longer support sub_dirs in Rebar 2 to help migration towards Rebar 3
Support --if-missing option when installing Rebar
Set REBAR_PROFILE=prod when compiling Rebar dependencies
Support --profile-require=time to profile the time loading test files themselves
Allow filtering modules from coverage using regex
Allow the exit status of ExUnit to be configured and set the default to 2
Exit with a status of 3 when coverage falls below threshold
Write failed manifest when suite fails due to --warnings-as-errors
Ignore MIX_TEST_PARTITION when partitions set to 1
Support multiple sinks and sources in mix xref graph
Add trace subcommand to print compilation dependencies between files
Add --fail-above option to mix xref
Add --label compile-connected to mix xref
Environment options in Code.eval_quoted/3 and Code.eval_string/3, such as :aliases and :tracers, have been deprecated in favor of passing an environment
:all on IO.getn is deprecated in favor of :eof
URI.parse/1 is deprecated in favor of URI.new/1 and URI.new!/1
Mix.Tasks.Format.formatter_opts_for_file/2 is deprecated in favor of Mix.Tasks.Format.formatter_for_file/2
Code.cursor_context/2 is deprecated, use Code.Fragment.cursor_context/2 instead
Macro.to_string/2 is deprecated, use Macro.to_string/1 instead
System.get_pid/0 is deprecated, use System.pid/0 instead
Using ! or != in version requirements is deprecated, use ~> or >= instead
:strip_beam option is deprecated in favor of :strip_beams
:exit_code in Mix.raise/2 has been deprecated in favor of :exit_status
Mix.Config is deprecated in favor of Config module