···11# Changelog
2233-## 1.7.0-rc3 - 2025-12-02
44-55-### Formatter
66-77-- Function captures are now formatted like regular function calls.
88- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
99-1010-- Record updates are now formatted like function calls.
1111- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
1212-1313-### Bug fixes
1414-1515-- Fixed a bug where the "convert from use" code action would generate invalid
1616- code with labelled arguments.
1717- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
1818-1919-- Fixed a bug where private types would be allowed to be used in other modules.
2020- ([Surya Rose](https://github.com/GearsDatapacks))
2121-2222-## 1.7.0-rc2 - 2024-12-30
2323-2424-### Bug fixes
2525-2626-- Fixed a bug on JavaScript where a trailing `:bytes` segment would give the
2727- wrong pattern match result for a sliced bit array.
2828- ([Richard Viney](https://github.com/richard-viney))
2929-3030-## 1.7.0-rc1 - 2024-12-29
33+## Unreleased
314325### Compiler
3363434-- Removed compiler hint about pattern matching a `Result(a, b)` when being used
3535- where `a` is expected.
3636- ([Kieran O'Reilly](https://github.com/SoTeKie))
3737-3838-- Optimised code generated for record updates.
3939- ([yoshi](https://github.com/joshi-monster))
4040-4141-- The compiler now allows for record updates to change the generic type
4242- parameters of the record:
4343-4444- ```gleam
4545- type Box(value) {
4646- Box(password: String, value: value)
4747- }
4848-4949- fn insert(box: Box(a), value: b) -> Box(b) {
5050- Box(..box, value:)
5151- }
5252- ```
5353-5454- ([yoshi](https://github.com/joshi-monster))
5555-5656-- It is now allowed to write a block with no expressions. Like an empty function
5757- body, an empty block is considered incomplete as if it contained a `todo`
5858- expression.
5959- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
6060-6161-- The shorthand names for the two targets, `erl` and `js` are now
6262- deprecated in code such as `@target`.
6363- ([Surya Rose](https://github.com/GearsDatapacks))
6464-6565-- A custom panic message can now be specified when asserting a value with
6666- `let assert`:
6767-6868- ```gleam
6969- let assert Ok(regex) = regex.compile("ab?c+") as "This regex is always valid"
7070- ```
7171-7272- ([Surya Rose](https://github.com/GearsDatapacks))
7373-7474-- When targeting JavaScript the compiler now generates faster and smaller code
7575- for `Int` values in bit array expressions and patterns by evaluating them at
7676- compile time where possible.
7777- ([Richard Viney](https://github.com/richard-viney))
7878-7979-- Qualified records can now be used in clause guards.
8080- ([Surya Rose](https://github.com/GearsDatapacks))
8181-8282-- The compiler now allows deprecating specific custom type variants using the
8383- `@deprecated` attribute:
8484-8585- ```gleam
8686- pub type HashAlgorithm {
8787- @deprecated("Please upgrade to another algorithm")
8888- Md5
8989- Sha224
9090- Sha512
9191- }
9292-9393- pub fn hash_password(input: String) -> String {
9494- hash(input:, algorithm: Md5) // Warning: Deprecated value used
9595- }
9696- ```
9797-9898- ([Iesha](https://github.com/wilbert-mad))
9999-100100-- On the JavaScript target, taking byte-aligned slices of bit arrays is now an
101101- O(1) operation instead of O(N), significantly improving performance.
102102- ([Richard Viney](https://github.com/richard-viney))
103103-104104-- Better error message for when an existing type constructor is used as a value
105105- constructor.
106106- ([Jiangda Wang](https://github.com/Frank-III))
107107-108108-- Print better error messages when shell commands used by compiler cannot be
109109- found.
110110- ([wheatfox](https://github.com/enkerewpo))
111111-1127### Build tool
1138114114-- Improved the error message you get when trying to add a package that doesn't
115115- exist with `gleam add`.
116116- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
117117-118118-- External files (such as `.mjs` and `.erl`) are now permitted in subdirectories
119119- of `src/` and `test/`.
120120- ([PgBiel](https://github.com/PgBiel))
121121-122122-- `gleam publish` now requires more verbose confirmation for publishing Gleam
123123- team packages and v0 packages.
124124- ([Louis Pilfold](https://github.com/lpil))
125125-126126-- `gleam publish` now warns when publishing packages that define multiple
127127- top-level modules, as this can lead to namespace pollution and conflicts for
128128- consumers.
129129- ([Aleksei Gurianov](https://github.com/guria))
130130-131131-- New projects now require `gleam_stdlib` v0.44.0.
132132- ([Louis Pilfold](https://github.com/lpil))
133133-134134-- `gleam remove` no longer requires a network connection.
135135- ([yoshi](https://github.com/joshi-monster))
136136-137137-- Commands that work with the Hex package manager API now create and store an
138138- API key rather than creating a new one each time. This API key is encrypted
139139- with a local password, reducing risk of your Hex password being compromised.
140140- ([Louis Pilfold](https://github.com/lpil))
141141-142142-- The build tool now sets the `REBAR_SKIP_PROJECT_PLUGINS` environment variable
143143- when using rebar3 to compile Erlang dependencies. With future versions of
144144- rebar3 this will cause it to skip project plugins, significantly reducing the
145145- amount of code it'll need to download and compile, improving compile times.
146146- ([Tristan Sloughter](https://github.com/tsloughter))
147147-1489### Language server
14910150150-- The language server now provides type information when hovering over argument
151151- labels.
152152- ([Surya Rose](https://github.com/GearsDatapacks))
153153-154154-- The language server now suggests a code action to desugar a use expression
155155- into the equivalent function call. For example, this snippet of code:
156156-157157- ```gleam
158158- pub fn main() {
159159- use profile <- result.try(fetch_profile(user))
160160- render_welcome(user, profile)
161161- }
162162- ```
163163-164164- Will be turned into:
165165-166166- ```gleam
167167- pub fn main() {
168168- result.try(fetch_profile(user), fn(profile) {
169169- render_welcome(user, profile)
170170- })
171171- }
172172- ```
173173-174174- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
175175-176176-- The language server now suggests a code action to turn a function call into
177177- the equivalent use expression. For example, this snippet of code:
178178-179179- ```gleam
180180- pub fn main() {
181181- result.try(fetch_profile(user) fn(profile) {
182182- render_welcome(user, profile)
183183- })
184184- }
185185- ```
186186-187187- Will be turned into:
188188-189189- ```gleam
190190- pub fn main() {
191191- use profile <- result.try(fetch_profile(user))
192192- render_welcome(user, profile)
193193- }
194194- ```
195195-196196- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
197197-198198-- The language server now provides correct information when hovering over
199199- patterns in use expressions.
200200- ([Surya Rose](https://github.com/GearsDatapacks))
201201-202202-- The language server now suggests a code action to convert an inexhaustive
203203- `let` assignment into a `case` expression:
204204-205205- ```gleam
206206- pub fn unwrap_result(result: Result(a, b)) -> a {
207207- let Ok(inner) = result
208208- inner
209209- }
210210- ```
211211-212212- Becomes:
213213-214214- ```gleam
215215- pub fn unwrap_result(result: Result(a, b)) -> a {
216216- let inner = case result {
217217- Ok(inner) -> inner
218218- Error(_) -> todo
219219- }
220220- inner
221221- }
222222- ```
223223-224224- ([Surya Rose](https://github.com/GearsDatapacks))
225225-226226-- The language server now provides an action to extract a value into a variable.
227227- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
228228-229229-- The language server now suggests a code action to expand a function capture
230230- into the equivalent anonymous function. For example, this snippet of code:
231231-232232- ```gleam
233233- pub fn main() {
234234- list.map([1, 2, 3], int.add(_, 11))
235235- }
236236- ```
237237-238238- Will be turned into:
239239-240240- ```gleam
241241- pub fn main() {
242242- list.map([1, 2, 3], fn(value) { int.add(value, 11) })
243243- }
244244- ```
245245-246246- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
247247-248248-- The language server now suggests a code action to generate a dynamic decoder
249249- for a custom type. For example, this code:
250250-251251- ```gleam
252252- pub type Person {
253253- Person(name: String, age: Int)
254254- }
255255- ```
256256-257257- Will become:
258258-259259- ```gleam
260260- import gleam/dynamic/decode
261261-262262- pub type Person {
263263- Person(name: String, age: Int)
264264- }
265265-266266- fn person_decoder() -> decode.Decoder(Person) {
267267- use name <- decode.field("name", decode.string)
268268- use age <- decode.field("age", decode.int)
269269- decode.success(Person(name:, age:))
270270- }
271271- ```
272272-273273- ([Surya Rose](https://github.com/GearsDatapacks))
274274-27511### Formatter
27612277277-- The formatter now adds a `todo` inside empty blocks.
278278- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
279279-280280-- The formatter now formats lists the same in constants as in expressions.
281281- ([Jiangda Wang](https://github.com/Frank-III))
282282-283283-### Documentation
284284-285285-- Canonical links created for documentation pages if published on Hex.
286286- Previously published documentation would need to be updated.
287287- Resolves versioned pages to point to latest page for search engines.
288288- ([Dave Lage](https://github.com/rockerBOO))
289289-29013### Bug fixes
291291-292292-- The compiler now throws an error when a float literal ends with an `e` and
293293- is missing an exponent.
294294- ([Surya Rose](https://github.com/GearsDatapacks))
295295-296296-- Fixed a crash with ENOTEMPTY (os error 39) when building on NTFS partitions.
297297- ([Ivan Ermakov](https://github.com/ivanjermakov))
298298-299299-- Fixed a bug where the compiler would crash when pattern matching on multiple
300300- subjects and one of them being a constant record.
301301- ([Surya Rose](https://github.com/GearsDatapacks))
302302-303303-- Variant inference on prelude types now works correctly if the variant is
304304- constant.
305305- ([Surya Rose](https://github.com/GearsDatapacks))
306306-307307-- Fixed a bug where patterns in `use` expressions would not be checked to ensure
308308- that they were exhaustive.
309309- ([Surya Rose](https://github.com/GearsDatapacks))
310310-311311-- Fixed a bug where a `module.mjs` file would be overwritten by a `module.gleam`
312312- file of same name without warning. It now produces an error.
313313- ([PgBiel](https://github.com/PgBiel))
314314-315315-- Modules depending on removed or renamed modules now get automatically
316316- recompiled.
317317- ([Sakari Bergen](https://github.com/sbergen))
318318-319319-- The compiler now raises a warning for unused case expressions, code blocks and
320320- pipelines that would be safe to remove.
321321- ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
322322-323323-- Fixed a bug where assigning the prefix of a string pattern to a variable
324324- nested inside another pattern would produce invalid code on Javascript.
325325- ([yoshi](https://github.com/joshi-monster))
326326-327327-- Fixed a bug where expressions which use an unsafe integer on JavaScript would
328328- not emit a warning if an external function had been referenced.
329329- ([Richard Viney](https://github.com/richard-viney))
330330-331331-- Fixed a bug where nested tuple access would not be parsed correctly when
332332- the left-hand side was a function call.
333333- ([Surya Rose](https://github.com/GearsDatapacks))
334334-335335-- Fixed a bug where Gleam would be unable to compile to BEAM bytecode on older
336336- versions of Erlang/OTP.
337337- ([yoshi](https://github.com/joshi-monster))
338338-339339-- Fixed a bug where the inferred variant of values was not properly cached,
340340- leading to incorrect errors on incremental builds and in the language server.
341341- ([Surya Rose](https://github.com/GearsDatapacks))
342342-343343-- Fixed a bug where Gleam would be unable to compile to BEAM bytecode if the
344344- project path contains a non-ascii character.
345345- ([yoshi](https://github.com/joshi-monster))
346346-347347-- Fixed a bug where the compiler would display incorrect hints about ignoring
348348- unused variables in certain cases.
349349- ([Surya Rose](https://github.com/GearsDatapacks))
350350-351351-- Fixed a bug where the completer would not include braces in type import
352352- completions when it should have.
353353- ([Jiangda Wang](https://github.com/Frank-III))
354354-355355-- Fixed a bug where `gleam new` would generate the github `test` workflow
356356- configuration with incompatible Erlang OTP and Elixir versions.
357357- ([John Strunk](https://github.com/jrstrunk))
358358-359359-## v1.6.1 - 2024-11-19
360360-361361-### Bug fixes
362362-363363-- Fixed a bug where `gleam update` would fail to update versions.
364364- ([Jason Sipula](https://github.com/SnakeDoc))
···11+# Changelog
22+33+## 1.7.0 - 2025-01-05
44+55+Happy birthday Louis! 🎁
66+77+## 1.7.0-rc3 - 2025-01-02
88+99+### Formatter
1010+1111+- Function captures are now formatted like regular function calls.
1212+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
1313+1414+- Record updates are now formatted like function calls.
1515+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
1616+1717+### Bug fixes
1818+1919+- Fixed a bug where the "convert from use" code action would generate invalid
2020+ code with labelled arguments.
2121+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
2222+2323+- Fixed a bug where private types would be allowed to be used in other modules.
2424+ ([Surya Rose](https://github.com/GearsDatapacks))
2525+2626+## 1.7.0-rc2 - 2024-12-30
2727+2828+### Bug fixes
2929+3030+- Fixed a bug on JavaScript where a trailing `:bytes` segment would give the
3131+ wrong pattern match result for a sliced bit array.
3232+ ([Richard Viney](https://github.com/richard-viney))
3333+3434+## 1.7.0-rc1 - 2024-12-29
3535+3636+### Compiler
3737+3838+- Removed compiler hint about pattern matching a `Result(a, b)` when being used
3939+ where `a` is expected.
4040+ ([Kieran O'Reilly](https://github.com/SoTeKie))
4141+4242+- Optimised code generated for record updates.
4343+ ([yoshi](https://github.com/joshi-monster))
4444+4545+- The compiler now allows for record updates to change the generic type
4646+ parameters of the record:
4747+4848+ ```gleam
4949+ type Box(value) {
5050+ Box(password: String, value: value)
5151+ }
5252+5353+ fn insert(box: Box(a), value: b) -> Box(b) {
5454+ Box(..box, value:)
5555+ }
5656+ ```
5757+5858+ ([yoshi](https://github.com/joshi-monster))
5959+6060+- It is now allowed to write a block with no expressions. Like an empty function
6161+ body, an empty block is considered incomplete as if it contained a `todo`
6262+ expression.
6363+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
6464+6565+- The shorthand names for the two targets, `erl` and `js` are now
6666+ deprecated in code such as `@target`.
6767+ ([Surya Rose](https://github.com/GearsDatapacks))
6868+6969+- A custom panic message can now be specified when asserting a value with
7070+ `let assert`:
7171+7272+ ```gleam
7373+ let assert Ok(regex) = regex.compile("ab?c+") as "This regex is always valid"
7474+ ```
7575+7676+ ([Surya Rose](https://github.com/GearsDatapacks))
7777+7878+- When targeting JavaScript the compiler now generates faster and smaller code
7979+ for `Int` values in bit array expressions and patterns by evaluating them at
8080+ compile time where possible.
8181+ ([Richard Viney](https://github.com/richard-viney))
8282+8383+- Qualified records can now be used in clause guards.
8484+ ([Surya Rose](https://github.com/GearsDatapacks))
8585+8686+- The compiler now allows deprecating specific custom type variants using the
8787+ `@deprecated` attribute:
8888+8989+ ```gleam
9090+ pub type HashAlgorithm {
9191+ @deprecated("Please upgrade to another algorithm")
9292+ Md5
9393+ Sha224
9494+ Sha512
9595+ }
9696+9797+ pub fn hash_password(input: String) -> String {
9898+ hash(input:, algorithm: Md5) // Warning: Deprecated value used
9999+ }
100100+ ```
101101+102102+ ([Iesha](https://github.com/wilbert-mad))
103103+104104+- On the JavaScript target, taking byte-aligned slices of bit arrays is now an
105105+ O(1) operation instead of O(N), significantly improving performance.
106106+ ([Richard Viney](https://github.com/richard-viney))
107107+108108+- Better error message for when an existing type constructor is used as a value
109109+ constructor.
110110+ ([Jiangda Wang](https://github.com/Frank-III))
111111+112112+- Print better error messages when shell commands used by compiler cannot be
113113+ found.
114114+ ([wheatfox](https://github.com/enkerewpo))
115115+116116+### Build tool
117117+118118+- Improved the error message you get when trying to add a package that doesn't
119119+ exist with `gleam add`.
120120+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
121121+122122+- External files (such as `.mjs` and `.erl`) are now permitted in subdirectories
123123+ of `src/` and `test/`.
124124+ ([PgBiel](https://github.com/PgBiel))
125125+126126+- `gleam publish` now requires more verbose confirmation for publishing Gleam
127127+ team packages and v0 packages.
128128+ ([Louis Pilfold](https://github.com/lpil))
129129+130130+- `gleam publish` now warns when publishing packages that define multiple
131131+ top-level modules, as this can lead to namespace pollution and conflicts for
132132+ consumers.
133133+ ([Aleksei Gurianov](https://github.com/guria))
134134+135135+- New projects now require `gleam_stdlib` v0.44.0.
136136+ ([Louis Pilfold](https://github.com/lpil))
137137+138138+- `gleam remove` no longer requires a network connection.
139139+ ([yoshi](https://github.com/joshi-monster))
140140+141141+- Commands that work with the Hex package manager API now create and store an
142142+ API key rather than creating a new one each time. This API key is encrypted
143143+ with a local password, reducing risk of your Hex password being compromised.
144144+ ([Louis Pilfold](https://github.com/lpil))
145145+146146+- The build tool now sets the `REBAR_SKIP_PROJECT_PLUGINS` environment variable
147147+ when using rebar3 to compile Erlang dependencies. With future versions of
148148+ rebar3 this will cause it to skip project plugins, significantly reducing the
149149+ amount of code it'll need to download and compile, improving compile times.
150150+ ([Tristan Sloughter](https://github.com/tsloughter))
151151+152152+### Language server
153153+154154+- The language server now provides type information when hovering over argument
155155+ labels.
156156+ ([Surya Rose](https://github.com/GearsDatapacks))
157157+158158+- The language server now suggests a code action to desugar a use expression
159159+ into the equivalent function call. For example, this snippet of code:
160160+161161+ ```gleam
162162+ pub fn main() {
163163+ use profile <- result.try(fetch_profile(user))
164164+ render_welcome(user, profile)
165165+ }
166166+ ```
167167+168168+ Will be turned into:
169169+170170+ ```gleam
171171+ pub fn main() {
172172+ result.try(fetch_profile(user), fn(profile) {
173173+ render_welcome(user, profile)
174174+ })
175175+ }
176176+ ```
177177+178178+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
179179+180180+- The language server now suggests a code action to turn a function call into
181181+ the equivalent use expression. For example, this snippet of code:
182182+183183+ ```gleam
184184+ pub fn main() {
185185+ result.try(fetch_profile(user) fn(profile) {
186186+ render_welcome(user, profile)
187187+ })
188188+ }
189189+ ```
190190+191191+ Will be turned into:
192192+193193+ ```gleam
194194+ pub fn main() {
195195+ use profile <- result.try(fetch_profile(user))
196196+ render_welcome(user, profile)
197197+ }
198198+ ```
199199+200200+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
201201+202202+- The language server now provides correct information when hovering over
203203+ patterns in use expressions.
204204+ ([Surya Rose](https://github.com/GearsDatapacks))
205205+206206+- The language server now suggests a code action to convert an inexhaustive
207207+ `let` assignment into a `case` expression:
208208+209209+ ```gleam
210210+ pub fn unwrap_result(result: Result(a, b)) -> a {
211211+ let Ok(inner) = result
212212+ inner
213213+ }
214214+ ```
215215+216216+ Becomes:
217217+218218+ ```gleam
219219+ pub fn unwrap_result(result: Result(a, b)) -> a {
220220+ let inner = case result {
221221+ Ok(inner) -> inner
222222+ Error(_) -> todo
223223+ }
224224+ inner
225225+ }
226226+ ```
227227+228228+ ([Surya Rose](https://github.com/GearsDatapacks))
229229+230230+- The language server now provides an action to extract a value into a variable.
231231+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
232232+233233+- The language server now suggests a code action to expand a function capture
234234+ into the equivalent anonymous function. For example, this snippet of code:
235235+236236+ ```gleam
237237+ pub fn main() {
238238+ list.map([1, 2, 3], int.add(_, 11))
239239+ }
240240+ ```
241241+242242+ Will be turned into:
243243+244244+ ```gleam
245245+ pub fn main() {
246246+ list.map([1, 2, 3], fn(value) { int.add(value, 11) })
247247+ }
248248+ ```
249249+250250+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
251251+252252+- The language server now suggests a code action to generate a dynamic decoder
253253+ for a custom type. For example, this code:
254254+255255+ ```gleam
256256+ pub type Person {
257257+ Person(name: String, age: Int)
258258+ }
259259+ ```
260260+261261+ Will become:
262262+263263+ ```gleam
264264+ import gleam/dynamic/decode
265265+266266+ pub type Person {
267267+ Person(name: String, age: Int)
268268+ }
269269+270270+ fn person_decoder() -> decode.Decoder(Person) {
271271+ use name <- decode.field("name", decode.string)
272272+ use age <- decode.field("age", decode.int)
273273+ decode.success(Person(name:, age:))
274274+ }
275275+ ```
276276+277277+ ([Surya Rose](https://github.com/GearsDatapacks))
278278+279279+### Formatter
280280+281281+- The formatter now adds a `todo` inside empty blocks.
282282+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
283283+284284+- The formatter now formats lists the same in constants as in expressions.
285285+ ([Jiangda Wang](https://github.com/Frank-III))
286286+287287+### Documentation
288288+289289+- Canonical links created for documentation pages if published on Hex.
290290+ Previously published documentation would need to be updated.
291291+ Resolves versioned pages to point to latest page for search engines.
292292+ ([Dave Lage](https://github.com/rockerBOO))
293293+294294+### Bug fixes
295295+296296+- The compiler now throws an error when a float literal ends with an `e` and
297297+ is missing an exponent.
298298+ ([Surya Rose](https://github.com/GearsDatapacks))
299299+300300+- Fixed a crash with ENOTEMPTY (os error 39) when building on NTFS partitions.
301301+ ([Ivan Ermakov](https://github.com/ivanjermakov))
302302+303303+- Fixed a bug where the compiler would crash when pattern matching on multiple
304304+ subjects and one of them being a constant record.
305305+ ([Surya Rose](https://github.com/GearsDatapacks))
306306+307307+- Variant inference on prelude types now works correctly if the variant is
308308+ constant.
309309+ ([Surya Rose](https://github.com/GearsDatapacks))
310310+311311+- Fixed a bug where patterns in `use` expressions would not be checked to ensure
312312+ that they were exhaustive.
313313+ ([Surya Rose](https://github.com/GearsDatapacks))
314314+315315+- Fixed a bug where a `module.mjs` file would be overwritten by a `module.gleam`
316316+ file of same name without warning. It now produces an error.
317317+ ([PgBiel](https://github.com/PgBiel))
318318+319319+- Modules depending on removed or renamed modules now get automatically
320320+ recompiled.
321321+ ([Sakari Bergen](https://github.com/sbergen))
322322+323323+- The compiler now raises a warning for unused case expressions, code blocks and
324324+ pipelines that would be safe to remove.
325325+ ([Giacomo Cavalieri](https://github.com/giacomocavalieri))
326326+327327+- Fixed a bug where assigning the prefix of a string pattern to a variable
328328+ nested inside another pattern would produce invalid code on Javascript.
329329+ ([yoshi](https://github.com/joshi-monster))
330330+331331+- Fixed a bug where expressions which use an unsafe integer on JavaScript would
332332+ not emit a warning if an external function had been referenced.
333333+ ([Richard Viney](https://github.com/richard-viney))
334334+335335+- Fixed a bug where nested tuple access would not be parsed correctly when
336336+ the left-hand side was a function call.
337337+ ([Surya Rose](https://github.com/GearsDatapacks))
338338+339339+- Fixed a bug where Gleam would be unable to compile to BEAM bytecode on older
340340+ versions of Erlang/OTP.
341341+ ([yoshi](https://github.com/joshi-monster))
342342+343343+- Fixed a bug where the inferred variant of values was not properly cached,
344344+ leading to incorrect errors on incremental builds and in the language server.
345345+ ([Surya Rose](https://github.com/GearsDatapacks))
346346+347347+- Fixed a bug where Gleam would be unable to compile to BEAM bytecode if the
348348+ project path contains a non-ascii character.
349349+ ([yoshi](https://github.com/joshi-monster))
350350+351351+- Fixed a bug where the compiler would display incorrect hints about ignoring
352352+ unused variables in certain cases.
353353+ ([Surya Rose](https://github.com/GearsDatapacks))
354354+355355+- Fixed a bug where the completer would not include braces in type import
356356+ completions when it should have.
357357+ ([Jiangda Wang](https://github.com/Frank-III))
358358+359359+- Fixed a bug where `gleam new` would generate the github `test` workflow
360360+ configuration with incompatible Erlang OTP and Elixir versions.
361361+ ([John Strunk](https://github.com/jrstrunk))
362362+363363+## v1.6.1 - 2024-11-19
364364+365365+### Bug fixes
366366+367367+- Fixed a bug where `gleam update` would fail to update versions.
368368+ ([Jason Sipula](https://github.com/SnakeDoc))