Module

Kernel

Changes by version

Elixir 1.19.5

· 3 changes

Bugfix Tool: Elixir

Fix unnecessary recompilation when dbg_callback is modified at runtime

Bugfix Tool: Elixir

Fix parser crash on missing parentheses on expression following operator not in

Bugfix Tool: Elixir

Support fetching abstract code for modules compiled with Elixir v1.14 and earlier

Elixir 1.19.3

· 1 change

Enhancement Tool: Elixir

Support /E modifier for regular expressions in config files

Elixir 1.19.2

· 3 changes

Enhancement Tool: Elixir

Measure and optimize writing of .beam files in the compiler

Enhancement Tool: Elixir

Optimize rare scenarios where type checking took too long

Bugfix Tool: Elixir

Ensure we warn on deprecated ~~~ unary operator

Elixir 1.19.1

· 2 changes

Bugfix Tool: Elixir

Optimize how types are computed for pretty printing

Bugfix Tool: Elixir

Optimize how differences are computed in the type system

Elixir 1.19.0

· 6 changes

Enhancement Tool: Elixir

Raise when U+2028 and U+2029 characters are present in comments and strings to avoid line spoofing attacks

Enhancement Tool: Elixir

Include the line for the previous clause in errors/warnings related to conflicts between defaults on function definitions

Enhancement Tool: Elixir

Support min/2 and max/2 as guards

Bugfix Tool: Elixir

Properly increment metadata newline when ? is followed by a literal newline character

Bugfix Tool: Elixir

not_a_map.key now raises BadMapError for consistency with other map operations

Hard Deprecation Tool: Elixir

The struct update syntax, such as %URI{uri | path: "/foo/bar"}, now requires the given variable (or expression) to explicitly pattern match on the struct before it can be updated. This is because, thanks to the type system, pattern matching on structs can find more errors, more reliably, and we want to promote its usage. Once pattern matching is added, you may optionally convert the struct update syntax into the map update syntax %{uri | path: "/foo/bar"} with no less of typing guarantees

Elixir 1.18.4

· 9 changes

Bugfix Tool: Elixir

Emit trace events for @on_definition callbacks

Bugfix Tool: Elixir

Emit trace events for @on_load callbacks

Bugfix Tool: Elixir

Emit trace events for super calls

Bugfix Tool: Elixir

Emit trace events for imported function calls

Bugfix Tool: Elixir

Optimize map unions to avoid building long lists

Bugfix Tool: Elixir

Do not crash when type checking nested bitstrings in patterns

Bugfix Tool: Elixir

Do not crash when non-binary bitstring is given as struct default value

Bugfix Tool: Elixir

Recompile regexes when escaped from module attributes for Erlang/OTP 28 compatibility

Bugfix Tool: Elixir

Preserve backwards compatibility in elixir_erl

Elixir 1.18.3

· 1 change

Enhancement Tool: Elixir

Allow <<_::3*8>> in typespecs

Elixir 1.18.1

· 7 changes

Enhancement Tool: Elixir

Do not emit type violation warnings when comparing or matching against literals

Enhancement Tool: Elixir

Do not validate clauses of private overridable functions

Bugfix Tool: Elixir

Do not crash when typing violation is detected on dynamic dispatch

Bugfix Tool: Elixir

Properly annotate the source for warnings emitted by the compiler with the @file annotation

Bugfix Tool: Elixir

Properly annotate the source for warnings emitted by the type system with the @file annotation

Bugfix Tool: Elixir

Remove :no_parens metadata when using capture with arity on all cases

Bugfix Tool: Elixir

Ensure diagnostic traces are kept backwards compatible

Elixir 1.18.0

· 11 changes

Enhancement Tool: Elixir

Update source code parsing to match UTS #55 latest recommendations. In particular, mixed script is allowed in identifiers as long as they are separate by underscores (_), such as http_сервер. Previously allowed highly restrictive identifiers, which mixed Latin and other scripts, such as the japanese word for t-shirt, Tシャツ, now require the underscore as well

Enhancement Tool: Elixir

Warn on bidirectional confusability in identifiers

Enhancement Tool: Elixir

Verify the type of the binary generators

Enhancement Tool: Elixir

Track the type of tuples in patterns and inside elem/2

Enhancement Tool: Elixir

Perform validation of root AST nodes in unquote and unquote_splicing to catch bugs earlier

Enhancement Tool: Elixir

Add source, behaviour, and record information to Docs chunk metadata

Enhancement Tool: Elixir

Support deterministic builds in tandem with Erlang by setting ERL_COMPILER_OPTIONS=deterministic. Keep in mind deterministic builds strip source and other compile time information, which may be relevant for programs

Enhancement Tool: Elixir

Allow aliases and imports to be enabled conditionally in module body

Bugfix Tool: Elixir

Validate AST on unquote and unquote_splicing to provide better error reports instead of failing too late inside the compiler

Bugfix Tool: Elixir

Avoid crashes when emitting diagnostics on code using \t for indentation

Enhancement Tool: Elixir

Deprecate unless in favor of if. Use mix format --migrate to automate the migration

Elixir 1.17.3

· 1 change

Bugfix Tool: Elixir

Do not attempt to group module warnings when they have a large context

Elixir 1.17.1

· 2 changes

Bugfix Tool: Elixir

Fix bug when using pinned variables inside with's else patterns

Bugfix Tool: Elixir

Fix Dialyzer error when with else clause is calling a no_return function

Elixir 1.17.0

· 14 changes

Enhancement Tool: Elixir

Add Kernel.get_in/1 with safe nil-handling for access and structs

Enhancement Tool: Elixir

Add Kernel.is_non_struct_map/1 guard

Enhancement Tool: Elixir

Add Kernel.to_timeout/1

Enhancement Tool: Elixir

Emit warnings for undefined functions from modules defined within the same context as the caller code

Enhancement Tool: Elixir

Support integers in uppercase sigils

Bugfix Tool: Elixir

Resolve inconsistencies of how .. and ... are handled at the AST level

Bugfix Tool: Elixir

Fix parsing precedence of ambiguous operators followed by containers

Bugfix Tool: Elixir

Do not expand code in quote bind_quoted: ... twice

Bugfix Tool: Elixir

Respect :line property when :file is given as option to quote

Bugfix Tool: Elixir

Do not crash on Macro.escape/2 when passing a quote triplet without valid meta

Bugfix Tool: Elixir

Avoid double tracing events when capturing a function

Bugfix Tool: Elixir

Fix a bug where captured arguments would conflict when a capture included a macro that also used captures

Hard Deprecation Tool: Elixir

Single-quote charlists are deprecated, use ~c instead

Hard Deprecation Tool: Elixir

Deprecate escaping closing delimiter in uppercase sigils

Elixir 1.16.3

· 1 change

Bugfix Tool: Elixir

Only infer size in pinned variable in binary strings when needed

Elixir 1.16.0

· 9 changes

Enhancement Tool: Elixir

Auto infer size of matched variable in bitstrings

Enhancement Tool: Elixir

Preserve column information when translating typespecs

Enhancement Tool: Elixir

Suggest module names based on suffix and casing errors when the module does not exist in UndefinedFunctionError

Bugfix Tool: Elixir

Do not expand aliases recursively (the alias stored in Macro.Env is already expanded)

Bugfix Tool: Elixir

Ensure dbg module is a compile-time dependency

Bugfix Tool: Elixir

Warn when a private function or macro uses unquote/1 and the function/macro itself is unused

Bugfix Tool: Elixir

Re-enabled compiler optimizations for top level functions in scripts (disabled in v1.14.0 but shouldn't impact most programs)

Bugfix Tool: Elixir

Do not define an alias for nested modules starting with Elixir. in their definition

Hard Deprecation Tool: Elixir

~R/.../ is deprecated in favor of ~r/.../. This is because ~R/.../ still allowed escape codes, which did not fit the definition of uppercase sigils

Elixir 1.15.6

· 1 change

Bugfix Tool: Elixir

Trace functions before they are inlined

Elixir 1.15.5

· 2 changes

Bugfix Tool: Elixir

Ensure stacktrace is included when necessary when rescuing multiple exceptions in the same branch

Bugfix Tool: Elixir

Fix index in error message for unused optional arguments

Elixir 1.15.3

· 1 change

Enhancement Tool: Elixir

Improve better stacktraces when executing unnested Elixir code in a file

Elixir 1.15.0

· 14 changes

Enhancement Tool: Elixir

Break down case and cond inside dbg/2

Enhancement Tool: Elixir

Add t:nonempty_binary/0 and t:nonempty_bitstring/0

Enhancement Tool: Elixir

Treat @behaviours as runtime dependencies

Enhancement Tool: Elixir

Do not add runtime dependencies for alias references in patterns and guards

Enhancement Tool: Elixir

Warn for nested calls without parens inside keywords

Enhancement Tool: Elixir

Support for multi-letter uppercase sigils

Enhancement Tool: Elixir

Introduce mechanism to collect several errors in a module. Previously, as soon as there was a compilation error, compilation would fail. Now the compiler became a bit smarter and will report multiple errors whenever possible as multiple error: ... messages, similar to warning: ...

Enhancement Tool: Elixir

Raise instead of warning on undefined variables. Previously, an undefined variable would attempt to invoke a function of the same name, which led to confusing error messages, especially to newcomers. To enable the previous behaviour, invoke Code.compiler_options(on_undefined_variable: :warn) at the top of your mix.exs

Bugfix Tool: Elixir

Expand macros on the left side of -> in try/rescue

Bugfix Tool: Elixir

Raise on misplaced ... inside typespecs

Bugfix Tool: Elixir

Do not import behaviour_info and module_info functions from Erlang modules

Bugfix Tool: Elixir

Raise when macros are given to dialyzer

Enhancement Tool: Elixir

Require pin variable when accessing variable inside binary size in match

Hard Deprecation Tool: Elixir

Deprecate ... as a valid function call identifier

Elixir 1.14.4

· 3 changes

Enhancement Tool: Elixir

Fix debug_info/4 when returning core_v1

Enhancement Tool: Elixir

Store complete path on quote keep: true to avoid invalid stacktraces

Enhancement Tool: Elixir

Fix column count when tokenizing escaped interpolations

Elixir 1.14.3

· 4 changes

Enhancement Tool: Elixir

Speed up loading of runtime modules in the parallel compiler

Bugfix Tool: Elixir

Fix invalid variable scoping in defguard expansion

Bugfix Tool: Elixir

Do not warn on captured underscored vars from defmodule

Bugfix Tool: Elixir

Do not crash for missing line info on type warnings

Elixir 1.14.2

· 1 change

Bugfix Tool: Elixir

Generate unique variables for macro expansion of defguard

Elixir 1.14.1

· 6 changes

Enhancement Tool: Elixir

Perform partial expansion of literals in module attributes

Enhancement Tool: Elixir

Do not add compile-time dependencies for literals as defaults in Application.compile_env/3 inside module attributes

Enhancement Tool: Elixir

Fix misleading warning when :uniq is given in for comprehensions and the result is unused

Enhancement Tool: Elixir

Improve error message for when there is a conflicting struct and ignoring module conflict

Enhancement Tool: Elixir

Do not delete @enforce_keys attribute after defstruct declaration

Enhancement Tool: Elixir

Do not crash the checker on modules with missing :debug_info chunk

Elixir 1.14.0

· 19 changes

Enhancement Tool: Elixir

Add new dbg/0-2 macro

Enhancement Tool: Elixir

Allow any guard expression as the size of a bitstring in a pattern match

Enhancement Tool: Elixir

Allow composite types with pins as the map key in a pattern match

Enhancement Tool: Elixir

Print escaped version of control chars when they show up as unexpected tokens

Enhancement Tool: Elixir

Warn on confusable non-ASCII identifiers

Enhancement Tool: Elixir

Add .. as a nullary operator that returns 0..-1//1

Enhancement Tool: Elixir

Implement Unicode Technical Standard #39 recommendations. In particular, we warn for confusable scripts and restrict identifiers to single-scripts or highly restrictive mixed-scripts

Enhancement Tool: Elixir

Automatically perform NFC conversion of identifiers

Enhancement Tool: Elixir

Add binary_slice/2 and binary_slice/3

Enhancement Tool: Elixir

Lazily expand module attributes to avoid compile-time deps

Enhancement Tool: Elixir

Automatically cascade generated: true annotations on macro expansion

Bugfix Tool: Elixir

Do not allow restricted characters in identifiers according to UTS39

Bugfix Tool: Elixir

Define __exception__ field as true when expanding exceptions in typespecs

Bugfix Tool: Elixir

Warn if any of True, False, and Nil aliases are used

Bugfix Tool: Elixir

Warn on underived @derive attributes

Bugfix Tool: Elixir

Remove compile-time dependency from defimpl :for

Bugfix Tool: Elixir

Track all arities on imported functions

Bugfix Tool: Elixir

Fix equality in guards for dynamic ranges without steps

Hard Deprecation Tool: Elixir

Deprecate the operator <|> to avoid ambiguity with upcoming extended numerical operators

Elixir 1.13.4

· 2 changes

Bugfix Tool: Elixir

Tweak type unification to fix infinite loop with recursive vars

Bugfix Tool: Elixir

Add compile-time dependencies on require

Elixir 1.13.3

· 2 changes

Bugfix Tool: Elixir

Make sure signatures stored in the Documentation chunk does not contain newlines

Bugfix Tool: Elixir

Fix infinite loop when compiling guards with recursive map access

Elixir 1.13.2

· 2 changes

Bugfix Tool: Elixir

Fix a crash when a for-comprehension with :uniq was used inside another comprehension with :uniq

Bugfix Tool: Elixir

Ensure env.context_modules is properly set inside optimized defmodule

Elixir 1.13.0

· 18 changes

Enhancement Tool: Elixir

Support the :sigils option in import Mod, only: :sigils and allow the sigil modifiers to be also digits

Enhancement Tool: Elixir

Make get_in consistently abort when nil values are found

Enhancement Tool: Elixir

Improve compilation times by reducing the amount of copies of the AST across compiler processes

Enhancement Tool: Elixir

Raise if trying to define a module with a slash in its name

Enhancement Tool: Elixir

Warn when ?\ is used and there is no need for a escape character

Enhancement Tool: Elixir

Track structs in typespecs as export deps instead of compile-time deps

Enhancement Tool: Elixir

Add power operator (**/2)

Bugfix Tool: Elixir

Reject bidirectional formatting characters in strings and comments

Bugfix Tool: Elixir

Support escaping of terminators in uppercase sigils heredocs for consistency

Bugfix Tool: Elixir

Raise if __CALLER__ or __ENV__ or __STACKTRACE__ are used in match

Bugfix Tool: Elixir

Improve error message on invalid argument for byte_size from binary concat

Bugfix Tool: Elixir

Raise when aliasing non-Elixir modules without :as

Bugfix Tool: Elixir

Allow unquote_splicing inside %{...} without parens

Bugfix Tool: Elixir

Ensure that waiting on a struct expansion inside a typespec is correctly tracked as waiting time in the compiler

Bugfix Tool: Elixir

Correctly parse the atom . as a keyword list key

Bugfix Tool: Elixir

Do not leak variables from the first generator in with and for special forms

Bugfix Tool: Elixir

Fix column number on strings with NFD characters

Bugfix Tool: Elixir

Fix a bug where a combination of dynamic line in quote with unquote of remote calls would emit invalid AST metadata

Elixir 1.12.3

· 1 change

Bugfix Tool: Elixir

Do not crash when handling ambiguity errors

Elixir 1.12.2

· 1 change

Bugfix Tool: Elixir

Ensure deprecated macros emit warnings

Elixir 1.12.0

· 18 changes

Enhancement Tool: Elixir

Add first..last//step as support for stepped ranges

Enhancement Tool: Elixir

Also warn for literal structs on min/2 and max/2

Enhancement Tool: Elixir

Add Kernel.tap/2 and Kernel.then/2

Enhancement Tool: Elixir

Do not add runtime dependencies to remotes in typespecs

Enhancement Tool: Elixir

When there is an unused variable warning and there is a variable with the same name previously defined, suggest the user may have wanted to use the pin operator

Enhancement Tool: Elixir

Improve error messages on invalid character right after a number

Enhancement Tool: Elixir

Show removal and deprecated tips from Erlang/OTP

Bugfix Tool: Elixir

Allow heredoc inside a heredoc interpolation

Bugfix Tool: Elixir

Preserve CRLF on heredocs

Bugfix Tool: Elixir

Public functions without documentation now appear as an empty map on Code.fetch_docs/1, unless they start with underscore, where they remain as :none. This aligns Elixir's implementation with EEP48

Bugfix Tool: Elixir

Do not crash when complex literals (binaries and maps) are used in guards

Bugfix Tool: Elixir

Properly parse keywords (such as end) followed by the :: operator

Bugfix Tool: Elixir

Do not ignore unimplemented signatures from generated functions

Bugfix Tool: Elixir

Improve error message when an expression follows a keyword list without brackets

Enhancement Tool: Elixir

Using first..last to match on ranges is soft-deprecated and will warn on future Elixir versions. Use first..last//step instead

Enhancement Tool: Elixir

Using first..last to create decreasing ranges is soft-deprecated and will warn on future versions. Use first..last//-1 instead

Enhancement Tool: Elixir

The binary operator ^^^ is deprecated. If you are using Bitwise.^^^/2, use Bitwise.bxor/2 instead

Enhancement Tool: Elixir

Deprecate @foo() in favor of @foo

Elixir 1.11.4

· 2 changes

Enhancement Tool: Elixir

Update formatting when printing warnings and errors from Erlang/OTP 24+

Enhancement Tool: Elixir

Support float-16 on bitstrings

Elixir 1.11.3

· 2 changes

Bugfix Tool: Elixir

Emit undefined function warnings from with

Bugfix Tool: Elixir

Do not fail type checking when literals are used in guards

Elixir 1.11.2

· 2 changes

Bugfix Tool: Elixir

Raise meaningful error if :erlang.is_record is used in guards

Bugfix Tool: Elixir

Prune tracers when fetching __ENV__ inside functions

Elixir 1.11.1

· 2 changes

Bugfix Tool: Elixir

Do not crash when :reduce is set to nil in comprehensions

Bugfix Tool: Elixir

Fix a scenario where undefined function warnings were not being emitted

Elixir 1.11.0

· 12 changes

Enhancement Tool: Elixir

Add is_struct/2 guard

Enhancement Tool: Elixir

Add is_exception/1 and is_exception/2 guards

Enhancement Tool: Elixir

Support map.field syntax in guards

Enhancement Tool: Elixir

Add +++ and --- with right associativity to the list of custom operators

Enhancement Tool: Elixir

Warn if a variable that looks like a compiler variable (such as __MODULE__) is unused

Bugfix Tool: Elixir

Validate values given to :line in quote to avoid emitting invalid ASTs

Bugfix Tool: Elixir

Report the correct line number when raising inside a macro

Bugfix Tool: Elixir

Fix an issue where elixirc would not accept paths with backslash (\) separators on Windows

Bugfix Tool: Elixir

Properly parse &//2 (i.e. the capture of the division operator)

Bugfix Tool: Elixir

Raise CompileError when trying to define reserved types

Bugfix Tool: Elixir

Improve compiler error message when using | in a def signature

Bugfix Tool: Elixir

Improve error message when trying to use invalid list operators in guards

Elixir 1.10.4

· 4 changes

Bugfix Tool: Elixir

Fix a bug where custom types were printed as built-in types

Bugfix Tool: Elixir

Don't add compile-time dependency on defdelegate

Bugfix Tool: Elixir

Add line numbers to warnings on deprecated imports

Bugfix Tool: Elixir

Report the correct line number when raising inside a macro

Elixir 1.10.1

· 3 changes

Bugfix Tool: Elixir

Ensure with clauses properly unpack "implicit guards" (such as matching on the struct name)

Bugfix Tool: Elixir

Do not warn if commas are used by themselves in ~w/~W sigils

Bugfix Tool: Elixir

Do not validate the :line option in quote (the validation has been moved to v1.11 to give users more time to update their code)

Elixir 1.10.0

· 5 changes

Enhancement Tool: Elixir

Add Kernel.is_struct/1 and Kernel.is_map_key/2

Enhancement Tool: Elixir

Warn when function head comes immediately after the implementation instead of before the implementation

Enhancement Tool: Elixir

Warn if duplicate key is found in struct declaration

Enhancement Tool: Elixir

Print all undefined functions as warnings and then raise. This allows users to see all undefined calls at once, when it would otherwise require them to compile the code multiple times

Bugfix Tool: Elixir

Raise error on functions/guards without implementation

Elixir 1.9.2

· 2 changes

Bugfix Tool: Elixir

Ensure compilation works for a variable named super

Bugfix Tool: Elixir

Ensure capture operator of a local function expands correctly inside a macro

Elixir 1.9.0

· 11 changes

Enhancement Tool: Elixir

Add ~U sigil for UTC date times

Enhancement Tool: Elixir

Optimize &super/arity and &super(&1)

Enhancement Tool: Elixir

Optimize generated code for with with a catch-all clause

Enhancement Tool: Elixir

Validate __struct__ key in map returned by __struct__/0,1

Bugfix Tool: Elixir

Improve error message when string interpolation is used in a guard

Bugfix Tool: Elixir

Properly merge and handle docs for callbacks with multiple clauses

Bugfix Tool: Elixir

Guarantee reproducible builds on modules with dozens of specs

Bugfix Tool: Elixir

Resolve __MODULE__ accordingly in nested defmodule to avoid double nesting

Bugfix Tool: Elixir

Type variables starting with an underscore (_foo) should not raise compile error

Bugfix Tool: Elixir

Keep order of elements when macro in/2 is expanded with a literal list on the right-hand side

Bugfix Tool: Elixir

Print proper location on undefined function error from dynamically generated functions

Elixir 1.8.0

· 13 changes

Enhancement Tool: Elixir

Do not propagate counters to variables in quote inside another quote

Enhancement Tool: Elixir

Warn on ambiguous use of :: and | in typespecs

Enhancement Tool: Elixir

Add :delegate_to @doc metadata tag when using defdelegate

Enhancement Tool: Elixir

Improve compile-time building of ranges via the .. operator

Enhancement Tool: Elixir

Compile charlist interpolation more efficiently

Enhancement Tool: Elixir

Add floor/1 and ceil/1 guards

Bugfix Tool: Elixir

Remove Guard test tuple_size(...) can never succeed Dialyzer warning on try

Bugfix Tool: Elixir

Expand operands in size*unit bitstring modifier instead of expecting size and unit to be literal integers

Bugfix Tool: Elixir

Do not deadlock on circular struct dependencies in typespecs

Bugfix Tool: Elixir

Raise proper error message when passing flags to the Erlang compiler that Elixir cannot handle

Bugfix Tool: Elixir

Do not leak variables in cond clauses with a single matching at compile-time clause

Enhancement Tool: Elixir

Using @since will now emit a unused attribute warning. Use @doc since: "1.7.2" instead

Enhancement Tool: Elixir

Passing a non-empty list as :into in for comprehensions was inconsistent with maps and is deprecated in favor of Kernel.++/2 or Keyword.merge/2

Elixir 1.7.4

· 2 changes

Enhancement Tool: Elixir

Expand left..right at compile time in more cases, which leads to improved performance under different scenarios, especially on x in left..right expressions

Bugfix Tool: Elixir

Ensure @spec, @callback, @type and friends can be read accordingly

Elixir 1.7.2

· 1 change

Bugfix Tool: Elixir

Do not emit warnings for repeated docs over different clauses due to false positives

Elixir 1.7.0

· 14 changes

Enhancement Tool: Elixir

Support adding arbitrary documentation metadata by passing a keyword list to @doc, @moduledoc and @typedoc

Enhancement Tool: Elixir

Introduce __STACKTRACE__ to retrieve the current stacktrace inside catch/rescue (this will be a requirement for Erlang/OTP 21+)

Enhancement Tool: Elixir

Raise on unsafe variables in order to allow us to better track unused variables (also known as imperative assignment / variable leakage)

Enhancement Tool: Elixir

Warn when using length to check if a list is not empty on guards

Enhancement Tool: Elixir

Add hints on mismatched do/end and others pairs

Enhancement Tool: Elixir

Warn when comparing structs using the >, <, >= and <= operators

Enhancement Tool: Elixir

Warn on unsupported nested comparisons such as x < y < z

Enhancement Tool: Elixir

Warn if redefining documentation across clauses of the same definition

Enhancement Tool: Elixir

Warn on unnecessary quotes around atoms, keywords and calls

Bugfix Tool: Elixir

Raise on unsafe variables as some of the code emitted with unsafe variables would not correctly propagate variables or would disable tail call optimization semantics

Bugfix Tool: Elixir

Do not crash on dynamic sizes in binary generators with collectable into in comprehensions

Bugfix Tool: Elixir

Do not crash on literals with non-unary size in binary generators with collectable into in comprehensions

Enhancement Tool: Elixir

not left in right is ambiguous and is deprecated in favor of left not in right

Enhancement Tool: Elixir

Warn on confusing operator sequences, such as 1+++1 meaning 1 ++ +1 or ........ meaning ... .. ...

Elixir 1.6.5

· 2 changes

Bugfix Tool: Elixir

Support specsdiff flag on __info__ spec clauses

Bugfix Tool: Elixir

Do not exclude hygienic vars in defguard

Elixir 1.6.4

· 1 change

Bugfix Tool: Elixir

Properly support into: binary in Erlang/OTP 20.3

Elixir 1.6.2

· 1 change

Bugfix Tool: Elixir

Ensure arguments given to a guard defined with defguard are evaluated in the correct order

Elixir 1.6.1

· 1 change

Enhancement Tool: Elixir

Raise better error messages on invalid map syntax

Elixir 1.6.0

· 10 changes

Enhancement Tool: Elixir

Prefix variables with V when emitting Erlang code. This improves the integration with tools such as Erlang code formatters and the GUI debugger

Enhancement Tool: Elixir

Warn on the use of length(x) == 0 in guards

Enhancement Tool: Elixir

Warn if catch comes before rescue in try

Enhancement Tool: Elixir

Warn if heredoc is outdented compared to its closing quotes

Enhancement Tool: Elixir

Add defguard/1 and defguardp/1 to make it easier to build guard-safe macros

Bugfix Tool: Elixir

Solve a precedence issue between & and |, such as [&Foo.bar/1 | &Baz.bat/2]

Bugfix Tool: Elixir

Do not load dynamic Elixir modules as :in_memory as this value is not officially supported by the code server. Instead, use an empty list, which is the same value used by Erlang.

Bugfix Tool: Elixir

Validate variable struct name is atom when used in pattern matching

Bugfix Tool: Elixir

No longer generate documentation for defdelegate functions automatically to avoid overriding previously specified @doc

Enhancement Tool: Elixir

Specifying map types with variable keys without defining the type as required/optional is deprecated

Elixir 1.5.3

· 3 changes

Bugfix Tool: Elixir

Warn duplicate definitions in macros

Bugfix Tool: Elixir

Remove dialyzer warnings from else in with clauses

Bugfix Tool: Elixir

Do not warning on upcoming @deprecated and @since attributes for v1.6

Elixir 1.5.2

· 5 changes

Enhancement Tool: Elixir

Optimize function definition with multiple clauses by not traversing the internal clauses table

Enhancement Tool: Elixir

Warn if unary operators are followed by new lines

Bugfix Tool: Elixir

Improve error message for oversized atoms

Bugfix Tool: Elixir

Ensure @impl attribute also propagates to clauses from default arguments

Bugfix Tool: Elixir

Emit proper error for unknown vars inside binary pattern in match

Elixir 1.5.1

· 6 changes

Enhancement Tool: Elixir

Do not use references on function/macro definitions - this provides large improvements in compilation times in some rare corner cases

Bugfix Tool: Elixir

Ensure dialyzer does not emit warnings in some uses of with

Bugfix Tool: Elixir

Fix dialyzer warnings when defmacrop is used in modules

Bugfix Tool: Elixir

Ensure Elixir modules can be dialyzed without starting the Elixir application

Bugfix Tool: Elixir

Do not serialize references in quoted expressions

Bugfix Tool: Elixir

Make sure structs expansion use the latest definition available when struct modules are recompiled

Elixir 1.5.0

· 14 changes

Enhancement Tool: Elixir

Add left not in right to check that the left side is not in the enumerable on the right

Enhancement Tool: Elixir

Use the new debug_info chunk in OTP 20. This provides a mechanism for tools to retrieve the Elixir AST from beam files

Enhancement Tool: Elixir

defoverridable/1 accepts a module name as argument and marks all callbacks as overridable

Enhancement Tool: Elixir

Allow non-quoted Unicode atoms and variables according to Unicode Annex #31 (see Unicode Syntax document)

Enhancement Tool: Elixir

Warn when a :__struct__ key is used when building/updating structs

Enhancement Tool: Elixir

Cache the AST on definitions. This speeds up the compilation time from 10% to 15% measured across different projects

Enhancement Tool: Elixir

Improve compiler error message on invalid patterns and guards

Bugfix Tool: Elixir

Support guards on anonymous functions of zero arity

Bugfix Tool: Elixir

Fix compilation of maps used as maps keys inside matches

Bugfix Tool: Elixir

Ensure do clause in with is tail call optimizable

Enhancement Tool: Elixir

not left in right is soft-deprecated in favor of left not in right

Enhancement Tool: Elixir

Using () to mean nil is deprecated

Enhancement Tool: Elixir

:as_char_lists value in Inspect.Opts.t/0 type, in favor of :as_charlists

Enhancement Tool: Elixir

:char_lists key in Inspect.Opts.t/0 type, in favor of :charlists

Elixir 1.4.3

· 2 changes

Enhancement Tool: Elixir

Improve compilation time for modules with many clauses

Bugfix Tool: Elixir

Fix code generation when non-binary bitstrings are in AST

Elixir 1.4.2

· 1 change

Bugfix Tool: Elixir

Ensure redefined functions point to the proper source

Elixir 1.4.1

· 1 change

Bugfix Tool: Elixir

Remove warning when making private functions overridable

Elixir 1.4.0

· 9 changes

Enhancement Tool: Elixir

Recognize merge conflict markers in source and provide a readable error message

Enhancement Tool: Elixir

Warn on unused module attributes

Enhancement Tool: Elixir

Improve compiler message on unexpected end of line

Enhancement Tool: Elixir

Raise BadBooleanError when a non-boolean is given on the left-hand side of and/or

Bugfix Tool: Elixir

Don't crash in macro_exported?/3 when dealing with Erlang modules

Bugfix Tool: Elixir

Ensure locals calls are rewritten when calling a local function or macro from inside a module

Bugfix Tool: Elixir

Annotate the context for variables as zero-arity funs in quotes

Enhancement Tool: Elixir

Deprecate support for making private functions overridable. Overridable functions must always be public as they must be contracts

Enhancement Tool: Elixir

Warn if variable is used as a function call

Elixir 1.3.4

· 2 changes

Bugfix Tool: Elixir

Ensure the compiler does not generate unecessary variable bindings inside case statements. This improves the code emitted and make sure "unused variable warnings" are not mistakenly silenced

Bugfix Tool: Elixir

Move raise checks to runtime to avoid crashing cover on Erlang 19.1

Elixir 1.3.2

· 2 changes

Enhancement Tool: Elixir

Support guards in else clauses in with

Bugfix Tool: Elixir

Do not attempt to load modules that have not been required when invoking regular functions, otherwise this invalidates the @compile {:autoload, false} directive.

Elixir 1.3.1

· 2 changes

Bugfix Tool: Elixir

Ensure structs can be expanded in dynamic module names

Bugfix Tool: Elixir

Ensure aliases warnings are not accidentally discarded when the same module is imported

Elixir 1.3.0

· 17 changes

Enhancement Tool: Elixir

Support generated: true in quote

Enhancement Tool: Elixir

Support Kernel.pop_in/1 and Kernel.pop_in/2 for yanking a value from a nested data structure

Enhancement Tool: Elixir

Allow variable struct names when matching, for example, %module{key: "value"} = struct

Enhancement Tool: Elixir

Allow guards on the left side of <- in for and with special forms

Enhancement Tool: Elixir

Support else chunks in with

Enhancement Tool: Elixir

Track {module, function, arity} imports and warn on unused ones when such are specified in :only

Enhancement Tool: Elixir

Add keyword/0 and keyword/1 built-in types to typespecs

Enhancement Tool: Elixir

Add sigils for date (~D[2015-04-17]), time (~T[08:00:00]) and naive date times ~N[2015-04-17 08:00:00]

Enhancement Tool: Elixir

Support @enforce_keys on defstruct/1 to guarantee some keys are explicitly given when building structs

Bugfix Tool: Elixir

Do not choke on capture operator with argument above &191

Bugfix Tool: Elixir

Raise if defstruct is called multiple times

Bugfix Tool: Elixir

Ensure Module.create/3 respects var/alias hygiene

Bugfix Tool: Elixir

Support non-literal ranges on the right side of in/2

Enhancement Tool: Elixir

to_char_list functions have been soft-deprecated in favor of to_charlist. This aligns with the naming conventions in both Erlang and Elixir

Enhancement Tool: Elixir

\x{H*} in strings/sigils/charlists is deprecated

Enhancement Tool: Elixir

Add deprecation for defdelegate list arguments and :append_first option. The previously undocumented and deprecated support for matching has been removed

Enhancement Tool: Elixir

Warn if a variable is assigned inside case/if/etc and used outside the block

Elixir 1.2.6

· 2 changes

Enhancement Tool: Elixir

Support Erlang 19

Enhancement Tool: Elixir

Supported generated: true in the quote special form

Elixir 1.2.2

· 1 change

Enhancement Tool: Elixir

Support @compile {:autoload, false} to disable automatic loading after compilation

Elixir 1.2.0

· 16 changes

Enhancement Tool: Elixir

Support multiple aliases in alias, import, require and use. For example, alias MyApp.{Foo, Bar, Baz}

Enhancement Tool: Elixir

Add struct!/2. Similar to struct/2 but raises on invalid keys

Enhancement Tool: Elixir

Warn if @doc/@typedoc/@moduledoc attributes are redefined

Enhancement Tool: Elixir

Warn if non-variables are used in defdelegate/2 (as they have no effect)

Enhancement Tool: Elixir

Mark quoted expressions as generated, avoiding false positives on dialyzer

Enhancement Tool: Elixir

Allow variables as map keys on creation %{key => value} and on matches %{^key => value}

Enhancement Tool: Elixir

Allow the pin operator ^ in fn clauses and on the left side of <- in for comprehensions

Enhancement Tool: Elixir

Introduce with as a special form that allows matching on right side parameters

Enhancement Tool: Elixir

Warn when right hand side of -> does not provide any expression

Enhancement Tool: Elixir

Warn if the Elixir was compiled with a different endianness than the one currently available at runtime

Enhancement Tool: Elixir

Warn if a variable is used after being defined exclusively in a nested context

Enhancement Tool: Elixir

Warn if piping into an expression without parentheses

Bugfix Tool: Kernel

Raise when conflicting :only and :except are given to import

Bugfix Tool: Kernel

Change __ENV__.file if @file is set for the given function

Bugfix Tool: Kernel

Make Kernel.ParallelRequire aware of :warning_as_errors

Bugfix Tool: Kernel

Improve error message for invalid do/do:

Elixir 1.1.0

· 18 changes

Enhancement Tool: Elixir

No longer include :crypto and :syntax_tools as dependencies. The former is only needed if you have encrypted debug info (therefore you can add :crypto as a dependency manually) and the latter is no longer used

Enhancement Tool: Elixir

Raise when var.Alias syntax is used and it does not expand to an atom at compile time (previously it emitted warnings)

Enhancement Tool: Elixir

Improve generation of argument names for function signatures

Enhancement Tool: Elixir

::/2 is now a special form

Enhancement Tool: Elixir

Warn when a variable with underscore is used

Enhancement Tool: Elixir

Allow underscores in binary, octal and hex literals

Enhancement Tool: Elixir

Warn when module attributes, variables, strings and numbers are used in code but the expression has no effect

Enhancement Tool: Elixir

Support \uXXXX and \u{X*} in strings and char lists to map to Unicode codepoints

Bugfix Tool: Elixir

Do not expand in/2 argument in module body

Bugfix Tool: Elixir

Throw syntax error for undefind atom/alias syntax :foo.Bar

Bugfix Tool: Elixir

Improve error message when we can't compile because the target directory is not writeable

Bugfix Tool: Elixir

Allow capture of non-symbolic operators like &and/2, &not/1 and others

Bugfix Tool: Elixir

Raise if heredoc terminal is accidentally found in the middle of a line without escaping

Bugfix Tool: Elixir

Don't warn on missing imports if nothing was imported

Bugfix Tool: Elixir

Raise if arity bigger than 255 is given to capture operator

Enhancement Tool: Elixir

\x inside strings and charlists is deprecated in favor of \uXXXX and \u{X*}. The values emitted by \x are unfortunately wrong (they should be bytes but currently it emits codepoints). \u is meant to correctly map to codepoints and \x will be fixed in the future to map to bytes

Enhancement Tool: Elixir

?\xHEX is deprecated in favor of 0xHEX. There is no situation where the former should be used in favor of the latter and the latter is always cleaner

Enhancement Tool: Elixir

Giving as: true | false to alias/2 and require/2 have been deprecated (it was undocumented behaviour)

Elixir 1.0.4

· 1 change

Enhancement Tool: Elixir

Fix a bug where =~/2 returned false when matching on an empty string. The current behaviour was changed to match the behaviour of String.contains?/2

Elixir 1.0.2

· 4 changes

Enhancement Tool: Elixir

Do not define an ets table with the same name as the module as it clashes with user code

Enhancement Tool: Elixir

Fail compiling try expressions if they lack one of catch/after/rescue/else clauses

Enhancement Tool: Elixir

Improve error messages when parsing fails on aliases

Enhancement Tool: Elixir

Improve warnings coming from compile-time evaluation of arguments

Elixir 0.15.1

· 5 changes

Enhancement Tool: Elixir

Print warnings when used ? with characters with escape codes

Enhancement Tool: Elixir

Modules compiled by Elixir now report the correct beam location when :code.which/1 is invoked. If the bytecode is only available in memory, :code.which/1 returns :in_memory

Enhancement Tool: Elixir

Do not expand args for unknown functions/macros

Enhancement Tool: Elixir

Ensure defstruct, @attr inside and friends raise a nice error messages when values cannot be properly escaped

Enhancement Tool: Elixir

Do not raise conflicts on imports used from inside quotes

Elixir 0.15.0

· 6 changes

Enhancement Tool: Elixir

Correctly parse unary/binary operators regardless of number of spaces

Enhancement Tool: Elixir

Ensure private functions are not exported

Enhancement Tool: Elixir

Leading 0 for octals is deprecated in favor of 0o

Enhancement Tool: Elixir

0X for hexadecimals is deprecated in favor of 0x

Enhancement Tool: Elixir

0B for binaries is deprecated in favor of 0b

Enhancement Tool: Elixir

binding/1 and binding/2 expecting a list were removed

Elixir 0.14.3

· 12 changes

Enhancement Tool: Elixir

Print a warning if a dangling @doc clause is found

Enhancement Tool: Elixir

|>, <<<, >>> and ^^^ made left associative in operator table

Enhancement Tool: Elixir

<, >, <=, >= given higher precedence than comparison operators (==, !=, etc) in the operator table

Enhancement Tool: Elixir

Run command line and escripts in a process that does not trap exits

Enhancement Tool: Elixir

Fix a bug where Mix paths had higher priority than CLI ones, causing protocol consolidations to not be properly loaded

Enhancement Tool: Elixir

Fix wording on error messages when a check/guard always passes or always fails

Enhancement Tool: Elixir

Fix a bug where an unused function warning was printed even when the function was used via defoverridable

Enhancement Tool: Elixir

Improve typespecs so they don't generate supertype dialyzer warnings

Enhancement Tool: Elixir

Using a list for bitstring modifiers is deprecated (as in <<x :: [little, utf16]>>), please use - as the separator instead (as in <<x :: little-utf16>>)

Enhancement Tool: Elixir

defstruct no longer automatically defines a type

Enhancement Tool: Elixir

exit(integer) is no longer supported from scripts to configure the exit signal. Use exit({:shutdown, integer}) instead

Enhancement Tool: Elixir

Default argument values have to be defined in a function head if the function has multiple clauses

Elixir 0.14.2

· 9 changes

Enhancement Tool: Elixir

Ensure compatibility with Erlang 17.1

Enhancement Tool: Elixir

Support @external_resource attribute to external dependencies to a module

Enhancement Tool: Elixir

Ensure derived protocols are defined with a file

Enhancement Tool: Elixir

Change precedence of & to not special case /

Enhancement Tool: Elixir

Ensure we can only use variables and \\ as arguments of bodyless clause

Enhancement Tool: Elixir

Kernel.xor/2 is deprecated

Enhancement Tool: Elixir

size/1 is deprecated in favor of byte_size/1 and tuple_size/1 (this change was soft deprecated two releases ago)

Enhancement Tool: Elixir

Sigils no longer balance start and end tokens, e.g. the sigil ~s(f(o)o) is no longer valid as it finishes in the first closing )

Enhancement Tool: Elixir

Variables set in cond clause heads are no longer available outside of that particular cond clause (this is the behaviour also found in case, receive and friends)

Elixir 0.14.1

· 2 changes

Enhancement Tool: Elixir

Disambiguate (w)erl to (w)erl.exe

Enhancement Tool: Elixir

Remove get_in/1

Elixir 0.14.0

· 13 changes

Enhancement Tool: Elixir

Store documentation in the abstract code to avoid loading them when the module is loaded

Enhancement Tool: Elixir

Add get_in/2, put_in/3, update_in/3 and get_and_update_in/3 to handle nested data structure operations

Enhancement Tool: Elixir

Add get_in/1, put_in/2, update_in/2 and get_and_update_in/2 to handle nested data structure operations via paths

Enhancement Tool: Elixir

Ensure Mix _build structure works on Windows when copying projects

Enhancement Tool: Elixir

Ensure 1.0E10 (with uppercase E) is also valid syntax

Enhancement Tool: Elixir

size/1 is deprecated, please use byte_size/1 or tuple_size/1 instead

Enhancement Tool: Elixir

Application.Behaviour, GenEvent.Behaviour, GenServer.Behaviour and Supervisor.Behaviour are deprecated in favor of Application, GenEvent, GenServer and Supervisor

Enhancement Tool: Elixir

defexception/3 is deprecated in favor of defexception/1

Enhancement Tool: Elixir

raise/3 is deprecated in favor of reraise/2

Enhancement Tool: Elixir

set_elem/3 is deprecated in favor of put_elem/3

Enhancement Tool: Elixir

Passing an atom var!/1 is deprecated, variables can be built dynamically with Macro.var/2

Enhancement Tool: Elixir

Retrieving docs as module.__info__(:docs) is no longer supported, please use Code.get_docs/2 instead

Enhancement Tool: Elixir

Code.compiler_options/1 no longer accepts custom options, only the ones specified by Elixir (use mix config instead)

Elixir 0.13.3

· 18 changes

Enhancement Tool: Elixir

GenEvent, GenServer, Supervisor, Agent and Task modules added

Enhancement Tool: Elixir

Make deprecations compiler warnings to avoid the same deprecation being printed multiple times

Enhancement Tool: Elixir

Rename ELIXIR_ERL_OPTS to ELIXIR_ERL_OPTIONS for consistency with ERL_COMPILER_OPTIONS

Enhancement Tool: Elixir

Application.Behaviour, GenEvent.Behaviour, GenServer.Behaviour and Supervisor.Behaviour are deprecated in favor of Application, GenEvent, GenServer and Supervisor

Enhancement Tool: Elixir

defexception/3 is deprecated in favor of defexception/1

Enhancement Tool: Elixir

raise/3 is deprecated in favor of reraise/2

Enhancement Tool: Elixir

set_elem/3 is deprecated in favor of put_elem/3

Enhancement Tool: Elixir

atom_to_binary/1 and atom_to_list/1 are deprecated in favor of Atom.to_string/1 and Atom.to_char_list/1

Enhancement Tool: Elixir

bitstring_to_list/1 and list_to_bitstring/1 are deprecated in favor of the :erlang ones

Enhancement Tool: Elixir

binary_to_atom/1, binary_to_existing_atom/1, binary_to_float/1, binary_to_integer/1 and binary_to_integer/2 are deprecated in favor of conversion functions in String

Enhancement Tool: Elixir

float_to_binary/* and float_to_list/* are deprecated in favor of Float.to_string/* and Float.to_char_list/*

Enhancement Tool: Elixir

integer_to_binary/* and integer_to_list/* are deprecated in favor of Integer.to_string/* and Integer.to_char_list/*

Enhancement Tool: Elixir

iodata_to_binary/1 and iodata_length/1 are deprecated IO.iodata_to_binary/1 and IO.iodata_length/1

Enhancement Tool: Elixir

list_to_atom/1, list_to_existing_atom/1, list_to_float/1, list_to_integer/1, list_to_integer/2 and list_to_tuple/1 are deprecated in favor of conversion functions in List

Enhancement Tool: Elixir

tuple_to_list/1 is deprecated in favor of Tuple.to_list/1

Enhancement Tool: Elixir

is_exception/1, is_record/1 and is_record/2 are deprecated in favor of Exception.exception?1, Record.record?/1 and Record.record?/2

Enhancement Tool: Elixir

defrecord/3 is deprecated in favor of structs

Enhancement Tool: Elixir

:hygiene in quote is deprecated

Elixir 0.13.2

· 9 changes

Enhancement Tool: Elixir

Ensure modules defined on root respect defined aliases

Enhancement Tool: Elixir

Do not wrap single lists in :__block__

Enhancement Tool: Elixir

Ensure emitted beam code works nicely with dialyzer

Enhancement Tool: Elixir

Do not allow a module named Elixir to be defined

Enhancement Tool: Elixir

Create remote funs even if mod is a variable in capture &mod.fun/arity

Enhancement Tool: Elixir

Improve compiler message when duplicated modules are detected

Enhancement Tool: Elixir

is_exception/1, is_record/1 and is_record/2 are deprecated in favor of Exception.exception?1, Record.record?/1 and Record.record?/2

Enhancement Tool: Elixir

lc and bc comprehensions are deprecated in favor of for

Enhancement Tool: Elixir

File.Stat, HashDict, HashSet, Inspect.Opts, Macro.Env, Range, Regex and Version.Requirement have been converted to structs. This means is_record/2 checks will no longer work, instead, you can pattern match on them using %Range{} and similar

Elixir 0.13.1

· 2 changes

Enhancement Tool: Elixir

Fix a bug where comprehensions arguments were not properly take into account in the variable scope

Enhancement Tool: Elixir

iolist_size and iolist_to_binary are deprecated in favor of iodata_size and iodata_to_binary (this is a soft deprecation, no warnings will be emitted)

Elixir 0.13.0

· 4 changes

Enhancement Tool: Elixir

Support ERL_PATH in bin/elixir

Enhancement Tool: Elixir

Support interpolation in keyword syntax

Enhancement Tool: Elixir

Ensure the same pid is not queued twice in the parallel compiler

Enhancement Tool: Elixir

lc and bc comprehensions are deprecated in favor of for (this is a soft deprecation, no warning will be emitted)

Elixir 0.12.5

· 3 changes

Enhancement Tool: Elixir

Ensure try does not generate an after clause. Generating an after clause forbade clauses in the else part from being tail recursive. This should improve performance and memory consumption of Stream functions

Enhancement Tool: Elixir

% for sigils is deprecated in favor of ~

Enhancement Tool: Elixir

is_range/1 and is_regex/1 are deprecated in favor of Range.range?/1 and Regex.regex?/1

Elixir 0.12.4

· 3 changes

Enhancement Tool: Elixir

// for default arguments is deprecated in favor of \\

Enhancement Tool: Elixir

Using % for sigils is deprecated in favor of ~. This is a soft deprecation, no warnings will be emitted for it in this release

Enhancement Tool: Elixir

Using ^ inside function clause heads is deprecated, please use a guard instead

Elixir 0.12.3

· 9 changes

Enhancement Tool: Elixir

Warnings now are explicitly tagged with "warning:" in messages

Enhancement Tool: Elixir

Explicit functions inlined by the compiler, including operators. This means that Kernel.+/2 will now expand to :erlang.+/2 and so on

Enhancement Tool: Elixir

Ensure undefined @attributes shows proper stacktrace in warnings

Enhancement Tool: Elixir

Guarantee nullary funs/macros are allowed in guards

Enhancement Tool: Elixir

binary_to_term/1, binary_to_term/2, term_to_binary/1 and term_to_binary/2 are deprecated in favor of their counterparts in the :erlang module

Enhancement Tool: Elixir

// for default arguments is deprecated in favor of \\. This is a soft deprecation, no warnings will be emitted for it in this release

Enhancement Tool: Elixir

Deprecated @behavior in favor of @behaviour

Enhancement Tool: Elixir

Remove ** from the list of allowed operators

Enhancement Tool: Elixir

Limit sigils delimiters to one of the following: <>, {}, [], (), ||, //, " and '

Elixir 0.12.2

· 10 changes

Enhancement Tool: Elixir

Improve stacktraces to be relative to the compilation path and include the related application

Enhancement Tool: Elixir

Ensure bitstring modifier arguments are expanded

Enhancement Tool: Elixir

Ensure compiler does not block on missing modules

Enhancement Tool: Elixir

Ensure <>/2 works only with binaries

Enhancement Tool: Elixir

Fix usage of string literals inside <<>> when utf8/utf16/utf32 is used as specifier

Enhancement Tool: Elixir

Deprecate continuable heredocs. In previous versions, Elixir would continue parsing on the same line the heredoc started, this behavior has been deprecated

Enhancement Tool: Elixir

is_alive/0 is deprecated in favor of Node.alive?

Enhancement Tool: Elixir

Kernel.inspect/2 with Inspect.Opts[] is deprecated in favor of Inspect.Algebra.to_doc/2

Enhancement Tool: Elixir

Kernel.inspect/2 with :raw option is deprecated, use :records option instead

Enhancement Tool: Elixir

Deprecate <-/2 in favor of send/2

Elixir 0.12.1

· 3 changes

Enhancement Tool: Elixir

Do not leak clause heads. Previously, a variable defined in a case/receive head clauses would leak to the outer scope. This behaviour is deprecated and will be removed in the next release.

Enhancement Tool: Elixir

Deprecate __FILE__ in favor of __DIR__ or __ENV__.file

Enhancement Tool: Elixir

Change how -> is represented in AST. Now each clause is represented by its own AST node which makes composition easier. See commit 51aef55 for more information.

Elixir 0.12.0

· 4 changes

Enhancement Tool: Elixir

Add List.delete_at/2 and List.updated_at/3

Enhancement Tool: Elixir

Add Enum.reverse/2

Enhancement Tool: Elixir

Implement defmodule/2, @/1, def/2 and friends in Elixir itself. case/2, try/2 and receive/1 have been made special forms. var!/1, var!/2 and alias!/1 have also been implemented in Elixir and demoted from special forms

Enhancement Tool: Elixir

quote location: :keep now only affects definitions in order to keep the proper trace in definition exceptions

Elixir 0.11.1

· 1 change

Enhancement Tool: Elixir

Set compilation status per ParallelCompiler and not globally

Elixir 0.11.0

· 11 changes

Enhancement Tool: Elixir

Improve stacktraces on command line interfaces

Enhancement Tool: Elixir

Sigils can now handle balanced tokens as in %s(f(o)o)

Enhancement Tool: Elixir

Emit warnings when an alias is not used

Enhancement Tool: Elixir

Guarantee aliases hygiene is respected when the current module name is not known upfront

Enhancement Tool: Elixir

Kernel.access/2 no longer flattens lists

Enhancement Tool: Elixir

pid_to_list/1, list_to_pid/1, binary_to_atom/2, binary_to_existing_atom/2 and atom_to_binary/2 are deprecated in favor of their counterparts in the :erlang module

Enhancement Tool: Elixir

insert_elem/3 and delete_elem/2 are deprecated in favor of Tuple.insert_at/3 and Tuple.delete_at/2

Enhancement Tool: Elixir

Use of in inside matches (as in x in [1,2,3] -> x) is deprecated in favor of the guard syntax (x when x in [1,2,3])

Enhancement Tool: Elixir

Kernel.access/2 now expects the second argument to be a compile time list

Enhancement Tool: Elixir

fn -> end quoted expression is no longer wrapped in a do keyword

Enhancement Tool: Elixir

Quoted variables from the same module must be explicitly shared. Previously, if a function returned quote do: a = 1, another function from the same module could access it as quote do: a. This has been fixed and the variables must be explicitly shared with var!(a, __MODULE__)

Elixir 0.10.3

· 6 changes

Enhancement Tool: Enhancements

Allow documentation for types with @typedoc

Enhancement Tool: Bug fixes

Fix handling of multiple heredocs on the same line

Enhancement Tool: Bug fixes

Provide better error messages for match, guard and quoting errors

Enhancement Tool: Bug fixes

Make Kernel.raise/2 a macro to avoid messing up stacktraces

Enhancement Tool: Bug fixes

Ensure &() works on quoted blocks with only one expression

Enhancement Tool: Deprecations

The previous partial application syntax (without the & operator) has now been deprecated

Elixir 0.10.2

· 14 changes

Enhancement Tool: Elixir

Include file and line on error report for overriding an existing function/macro

Enhancement Tool: Elixir

Convert external functions into quoted expressions. This allows record fields to contain functions as long as they point to an &Mod.fun/arity

Enhancement Tool: Elixir

Allow foo? and bar! as valid variable names

Enhancement Tool: Elixir

Limit inspect results to 50 items by default to avoid printing too much data

Enhancement Tool: Elixir

Return a readable error on oversized atoms

Enhancement Tool: Elixir

Allow functions ending with ? or ! to be captured

Enhancement Tool: Elixir

Fix default shutdown of child supervisors to :infinity

Enhancement Tool: Elixir

Fix regression when calling a function/macro ending with bang, followed by do/end blocks

Enhancement Tool: Elixir

list_to_binary/1, binary_to_list/1 and binary_to_list/3 are deprecated in favor of String.from_char_list!/1 and String.to_char_list!/1 for characters and :binary.list_to_bin/1, :binary.bin_to_list/1 and :binary.bin_to_list/3 for bytes

Enhancement Tool: Elixir

to_binary/1 is deprecated in favor of to_string/1

Enhancement Tool: Elixir

Deprecate def/4 and friends in favor of def/2 with unquote and friends

Enhancement Tool: Elixir

Deprecate %b and %B in favor of %s and %S

Enhancement Tool: Elixir

Binary.Chars was renamed to String.Chars

Enhancement Tool: Elixir

The previous ambiguous import syntax import :functions, Foo was removed in favor of import Foo, only: :functions

Elixir 0.10.1

· 11 changes

Enhancement Tool: Elixir

Add the capture operator &

Enhancement Tool: Elixir

Add support for GenFSM.Behaviour

Enhancement Tool: Elixir

Functions now points to the module and function they were defined when inspected

Enhancement Tool: Elixir

A documentation attached to a function that is never defined now prints warnings

Enhancement Tool: Elixir

Improve error messages when the use of an operator has no effect

Enhancement Tool: Elixir

Fix a bug where warnings were not being generated when imported macros conflicted with local functions or macros

Enhancement Tool: Elixir

Document that on_definition can only be a function as it is evaluated inside the function context

Enhancement Tool: Elixir

Ensure %w sigils with no interpolation are fully expanded at compile time

Enhancement Tool: Elixir

function(Mod.fun/arity) and function(fun/arity) are deprecated in favor of &Mod.fun/arity and &fun/arity

Enhancement Tool: Elixir

function/3 is deprecated in favor of Module.function/3

Enhancement Tool: Elixir

Kernel.ParallelCompiler now receives a set of callbacks instead of a single one

Elixir 0.10.0

· 12 changes

Enhancement Tool: Elixir

Add pretty printing support for inspect

Enhancement Tool: Elixir

Add document algebra library used as the foundation for pretty printing

Enhancement Tool: Elixir

Add defrecordp/3 that enables specifying the first element of the tuple

Enhancement Tool: Elixir

Add the Set API and a hash based implementation via HashSet

Enhancement Tool: Elixir

Add Stream as composable, lazy-enumerables

Enhancement Tool: Elixir

match?/2 does not leak variables to outer scope

Enhancement Tool: Elixir

Keep head|tail format when splicing at the tail

Enhancement Tool: Elixir

Ensure variables defined in the module body are not passed to callbacks

Enhancement Tool: Elixir

Deprecate recently added quote binding: ... in favor of the clearer quote bind_quoted: ...

Enhancement Tool: Elixir

Deprecate Kernel.float/1 in favor of a explicit conversion

Enhancement Tool: Elixir

The Binary.Inspect protocol has been renamed to Inspect

Enhancement Tool: Elixir

Tighten up the grammar rules regarding parentheses omission, previously the examples below would compile but now they raise an error message: