-
gleam docs build
now takes an optional--target
flag to specify the target platform for the generated documentation. (Jiangda Wang) -
Warnings are now emitted each time the project is built, even if the module the warnings originated from were loaded from the cache rather than recompiling. (Louis Pilfold)
-
Labelled arguments can now use the label shorthand syntax. This means that when you're passing a variable as a labelled argument and it happens to have the same name as the label, you can omit the variable name:
pub fn date(day day: Int, month month: Month, year year: Year) -> Date { todo } pub fn main() { let day = 11 let month = October let year = 1998 date(year:, month:, day:) // This is the same as writing // date(year: year, month: month, day: day) }
-
Labelled pattern variables can now use the label shorthand syntax. This means that when you're pattern matching on a record constructor and binding its labelled fields to variables that happen to have the same name, you can omit the variable name:
pub type Date Date(day: Int, month: Month, year: Year) } pub fn main() { case Date(11, October, 1998) { Date(year:, month:, day:) -> todo // This is the same as writing // Date(year: year, month: month, day: day) -> todo } }
-
The warning for the deprecated
[..]
pattern has been improved. (Giacomo Cavalieri) -
Record accessors are now fault tolerant. This means an invalid label can be properly detected and won't invalidate the rest of the expression. (Ameen Radwan)
-
Erlang type spec generation has been improved to avoid new warnings emitted in OTP27. (Damir Vandic)
-
Error messages for invalid record constructors now contain a restructured example of what the user likely intended. This is especially helpful for users coming from other languages, like Rust or Go.
For example, provided a User type:
pub type User { name: String }
The compiler errors with the following message:
error: Syntax error ┌─ /src/parse/error.gleam:3:5 │ 3 │ name: String, │ ^^^^ I was not expecting this Each custom type variant must have a constructor: pub type User { User( name: String, ) }
-
The
<>
string concatenation operator can now be used in constant expressions. (Thomas) -
Function calls are now fault tolerant. This means that errors in the function call arguments won't stop the rest of the call from being analysed. (Ameen Radwan)
-
The error message presented when a function is called in a guard has been improved. (Thomas)
-
Case expressions are now fault tolerant. This means an subject, pattern, guard, or then body can be properly detected and won't invalidate the rest of the expression. (Ameen Radwan)
-
Documentation comments that come before a regular comment are no longer clumped together with the documentation of the following definition. Now commenting out a definition won't result in its documentation merging with the following one's.
/// This doc comment will be ignored! // a commented definition // fn wibble() {} /// Wibble's documentation. fn wibble() { todo }
-
The
little
andbig
endianness options, thesigned
andunsigned
integer options, and sized floats (32-bit and 64-bit), can now be used in bit array expressions and patterns on the JavaScript target. (Richard Viney)
-
The formatter will no longer move a documentation comment below a regular comment following it. This snippet of code is left as it is by the formatter:
/// This doc comment will be ignored! // a commented definition // fn wibble() {} /// Wibble's documentation. fn wibble() { todo }
While previously all documentation comments would be merged together into one, ignoring the regular comment separating them:
// a commented definition // fn wibble() {} /// This doc comment will be ignored! /// Wibble's documentation. fn wibble() { todo }
-
The language server can now show completions for fields if a record access is being attempted. (Ameen Radwan)
-
The language server will now insert a blank line before the first statement when inserting a new import and there are no other imports at the top of the module. (Zhomart Mukhamejanov)
-
The language server now suggests a code a action to rename variables, types and functions when they don't match the Gleam naming requirements:
let myNumber = 10
Becomes:
let my_number = 10
(Gears)
-
The language server can now suggest a code action to convert
let assert
into a case expression:let assert Ok(value) = get_result()
Becomes:
let value = case get_result() { Ok(value) -> value _ -> panic }
(Gears)
-
The language server can now show signature help when writing functions. (Giacomo Cavalieri)
-
The language server now supports listing document symbols, such as functions and constants, for the current Gleam file. (PgBiel)
-
The language server can now suggest a code action to automatically use shorthand labels where possible:
case date { Day(day: day, month: month, year: year) -> todo }
Becomes:
case date { Day(day:, month:, year:) -> todo }
-
The language server can now show completions for labels when writing a function call or record construction. (Ameen Radwan)
-
The language server can now suggest a code action to fill in the labels of a function call:
pub type Date { Date(year: Int, month: Int, day: Int) } pub fn main() { Date() }
Becomes:
pub type Date { Date(year: Int, month: Int, day: Int) } pub fn main() { Date(year: todo, month: todo, day: todo) }
-
Functions, types and constructors named
module_info
are now escaped in generated Erlang code to avoid conflicts with the builtinmodule_info/0
andmodule_info/1
functions. (Juraj Petráš) -
Fixed formatting of comments at the start of a case branch. (Giacomo Cavalieri)
-
Fixed a bug where a private type could be leaked from an internal module. (Ameen Radwan)
-
Fixed a bug where certain binops would not wrap their arguments properly thus generating invalid JavaScript. (Ameen Radwan)
- The language server no longer shows completions when inside a literal string. (Giacomo Cavalieri)
-
Fixed a bug where the compiler would report errors for duplicate
@external
attributes with inconsistent spans between Erlang and JavaScript. (Connor Szczepaniak) -
Fixed a bug where
gleam add
would fail to parse version specifiers correctly. (Louis Pilfold) -
Fixed a bug where single clause case expressions could generate JavaScript code with incorrectly rewritten JavaScript variable names. (Louis Pilfold)
- Fixes a bug with import cycle detection when there is more than 2 imports in the cycle. (Ameen Radwan)