Enhancement
68 changes
Allow markers / and | to be used in a custom EEx engine
Add truncate to Time, DateTime and NaiveDateTime to facilitate microsecond precision pruning
Add format_string!/2 and format_file!/2 for automatic code formatting
Support column annotations in quoted expressions with columns: true in Code.string_to_quoted/2
Add DynamicSupervisor designed to manage children that are added and removed dynamically
Make Exception.blame/3 extensible by adding an optional blame/2 callback to exceptions
Improve the printing of guards on blamed exceptions
Add Enumerable.slice/1 and optimize many Enum operations with the new protocol. This allows data-structures with index-based random access to provide a non-linear implementation
Show UTF-8 BOM on inspected strings
Add :strict and :flex breaks - this gives more control over the document fitting
Allow a group to inherit the parent group break
Add force_unfit/1 and next_break_fits/2 which give more control over document fitting
Add collapse_lines/1 for collapsing multiple lines to a maximum value
Allow nest/2 to be :reset or be set to the current :cursor position
Prefix variables with V when emitting Erlang code. This improves the integration with tools such as Erlang code formatters and the GUI debugger
Warn on the use of length(x) == 0 in guards
Warn if catch comes before rescue in try
Warn if heredoc is outdented compared to its closing quotes
Add defguard/1 and defguardp/1 to make it easier to build guard-safe macros
Add compile/2, compile_to_path/3 and require/2 which provide detailed information about warnings and errors
Support the uniq: true flag in for comprehensions
Introduce @deprecated and @since attributes
Rearrange equals and inserts for shorter diff scripts in List.myers_difference/2
Allow :macros and :includes to be given to Record.extract/2
Add Stream.intersperse/2
Update to Unicode 10
Allow passing empty string match to String.replace/4
Support context and language sensitive operations in String.upcase/2 and String.downcase/2. Currently only the :greek context is supported
Support :ascii conversion in String.upcase/2 and String.downcase/2
Add Time.add/3
Perform inclusive checks in assert_in_delta
Add ExUnit.Callbacks.start_supervised!/2
Generate a random seed per test based on the test suite seed
Provide contextual autocompletion: t Enum. will autocomplete types, b Enum will autocomplete callbacks
Provide hints for developers when a bad host name is given to --remsh
Automatically include specs when showing documentation for functions/macros
Improve formatting of behaviours and typespecs by using the formatter
Allow pattern matching and guard expressions when on IEx.break!
Add :discard_threshold to Logger to help with message queue overflow
Add --preload-modules to mix app.start
Allow mix archive.build to bundle dot files via an option
Define a behavior for Mix compiler tasks and return diagnostics from compiler tasks
Track struct dependencies between files and recompile them only if the struct changes
Support :system_env option when specifying dependencies
Add a mix format task that formats the given files (or the files specified in a .formatter.exs file)
Add a new task for time-based profiling with eprof
Run all functions in a describe block by giving the file:line the describe block starts
Report the top N slowest tests with the --slowest N flag
Report the number of doctests and tests separately
Support --include-siblings in reports for umbrella support
Add mix xref graph --format stats
Add --only-nodes and --label filters to mix xref graph
Add mix xref deprecated that shows the callsite of deprecated functions
Warn if init/1 is not defined in GenServer. This brings GenServer closer to the implementation in OTP and aligns all behaviours to require the init/1 callback
surround/3 and surround_many/6 are deprecated in favor of container_doc/6
Specifying map types with variable keys without defining the type as required/optional is deprecated
files/2 and files_to_path/3 are deprecated in favor of compile/2 and compile_to_path/3
files/2 is deprecated in favor of Kernel.ParallelCompiler.require/2
The :simple_one_for_one strategy is deprecated in favor of DynamicSupervisor
Passing a list of args to Supervisor.start_child/2 is deprecated in favor of DynamicSupervisor
Passing :restart and :shutdown to Task.Supervisor.start_link/2 is deprecated (it should be passed on start child instead)
:case_started and :case_finished events are deprecated in favor of :module_started and :module_finished
Returning {:ok, val} | :error from custom Erlang compilers is deprecated in favor of {:ok, val, warnings} | {:error, errors, warnings}
Enum.partition/2 is deprecated in favor of Enum.split_with/2
Keyword.replace/3 is deprecated in favor of Keyword.fetch/2 and Keyword.put/3
Map.replace/3 is deprecated in favor of Map.fetch/2 and Map.put/3
Macro.unescape_tokens/1 and Macro.unescape_tokens/2 are deprecated in favor of Enum.map/2
Deprecate Range.range?/1 in favor of pattern matching on _ .. _