···187187188188 ([Surya Rose](https://github.com/GearsDatapacks))
189189190190+- When targeting JavaScript the compiler now emits a warning for integer literals
191191+ and constants that lie outside JavaScript's safe integer range:
192192+193193+ ```txt
194194+ warning: Int is outside the safe range on JavaScript
195195+ ┌─ /Users/richard/Desktop/int_test/src/int_test.gleam:1:15
196196+ │
197197+ 1 │ pub const i = 9_007_199_254_740_992
198198+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer on JavaScript
199199+200200+ This integer value is too large to be represented accurately by
201201+ JavaScript's number type. To avoid this warning integer values must be in
202202+ the range -(2^53 - 1) - (2^53 - 1).
203203+204204+ See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
205205+ properties for more information.
206206+ ```
207207+208208+ ([Richard Viney](https://github.com/richard-viney))
209209+190210### Formatter
191211192212- The formatter no longer removes the first argument from a function
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n [\n 0b11111111111111111111111111111111111111111111111111110,\n 0b11111111111111111111111111111111111111111111111111111,\n 0b100000000000000000000000000000000000000000000000000000,\n ]\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ [
99+ 0b11111111111111111111111111111111111111111111111111110,
1010+ 0b11111111111111111111111111111111111111111111111111111,
1111+ 0b100000000000000000000000000000000000000000000000000000,
1212+ ]
1313+}
1414+1515+1616+----- WARNING
1717+warning: Int is outside JavaScript's safe integer range
1818+ ┌─ /src/warning/wrn.gleam:6:5
1919+ │
2020+6 │ 0b100000000000000000000000000000000000000000000000000000,
2121+ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
2222+2323+This integer value is too large to be represented accurately by
2424+JavaScript's number type. To avoid this warning integer values must be in
2525+the range -(2^53 - 1) - (2^53 - 1).
2626+2727+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2828+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n [\n 9_007_199_254_740_990,\n 9_007_199_254_740_991,\n 9_007_199_254_740_992,\n -9_007_199_254_740_990,\n -9_007_199_254_740_991,\n -9_007_199_254_740_992,\n ]\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ [
99+ 9_007_199_254_740_990,
1010+ 9_007_199_254_740_991,
1111+ 9_007_199_254_740_992,
1212+ -9_007_199_254_740_990,
1313+ -9_007_199_254_740_991,
1414+ -9_007_199_254_740_992,
1515+ ]
1616+}
1717+1818+1919+----- WARNING
2020+warning: Int is outside JavaScript's safe integer range
2121+ ┌─ /src/warning/wrn.gleam:6:5
2222+ │
2323+6 │ 9_007_199_254_740_992,
2424+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
2525+2626+This integer value is too large to be represented accurately by
2727+JavaScript's number type. To avoid this warning integer values must be in
2828+the range -(2^53 - 1) - (2^53 - 1).
2929+3030+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
3131+properties for more information.
3232+3333+warning: Int is outside JavaScript's safe integer range
3434+ ┌─ /src/warning/wrn.gleam:9:5
3535+ │
3636+9 │ -9_007_199_254_740_992,
3737+ │ ^^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
3838+3939+This integer value is too large to be represented accurately by
4040+JavaScript's number type. To avoid this warning integer values must be in
4141+the range -(2^53 - 1) - (2^53 - 1).
4242+4343+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
4444+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n [\n 0x1FFFFFFFFFFFFE,\n 0x1FFFFFFFFFFFFF,\n 0x20000000000000,\n ]\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ [
99+ 0x1FFFFFFFFFFFFE,
1010+ 0x1FFFFFFFFFFFFF,
1111+ 0x20000000000000,
1212+ ]
1313+}
1414+1515+1616+----- WARNING
1717+warning: Int is outside JavaScript's safe integer range
1818+ ┌─ /src/warning/wrn.gleam:6:5
1919+ │
2020+6 │ 0x20000000000000,
2121+ │ ^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
2222+2323+This integer value is too large to be represented accurately by
2424+JavaScript's number type. To avoid this warning integer values must be in
2525+the range -(2^53 - 1) - (2^53 - 1).
2626+2727+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2828+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: pub const i = 9_007_199_254_740_992
44+---
55+----- SOURCE CODE
66+pub const i = 9_007_199_254_740_992
77+88+----- WARNING
99+warning: Int is outside JavaScript's safe integer range
1010+ ┌─ /src/warning/wrn.gleam:1:15
1111+ │
1212+1 │ pub const i = 9_007_199_254_740_992
1313+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1414+1515+This integer value is too large to be represented accurately by
1616+JavaScript's number type. To avoid this warning integer values must be in
1717+the range -(2^53 - 1) - (2^53 - 1).
1818+1919+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2020+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "pub const i = #(9_007_199_254_740_992)"
44+---
55+----- SOURCE CODE
66+pub const i = #(9_007_199_254_740_992)
77+88+----- WARNING
99+warning: Int is outside JavaScript's safe integer range
1010+ ┌─ /src/warning/wrn.gleam:1:17
1111+ │
1212+1 │ pub const i = #(9_007_199_254_740_992)
1313+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1414+1515+This integer value is too large to be represented accurately by
1616+JavaScript's number type. To avoid this warning integer values must be in
1717+the range -(2^53 - 1) - (2^53 - 1).
1818+1919+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2020+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n #(9_007_199_254_740_992)\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ #(9_007_199_254_740_992)
99+}
1010+1111+1212+----- WARNING
1313+warning: Int is outside JavaScript's safe integer range
1414+ ┌─ /src/warning/wrn.gleam:3:5
1515+ │
1616+3 │ #(9_007_199_254_740_992)
1717+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1818+1919+This integer value is too large to be represented accurately by
2020+JavaScript's number type. To avoid this warning integer values must be in
2121+the range -(2^53 - 1) - (2^53 - 1).
2222+2323+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2424+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n [\n 0o377777777777777776,\n 0o377777777777777777,\n 0o400000000000000000,\n ]\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ [
99+ 0o377777777777777776,
1010+ 0o377777777777777777,
1111+ 0o400000000000000000,
1212+ ]
1313+}
1414+1515+1616+----- WARNING
1717+warning: Int is outside JavaScript's safe integer range
1818+ ┌─ /src/warning/wrn.gleam:6:5
1919+ │
2020+6 │ 0o400000000000000000,
2121+ │ ^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
2222+2323+This integer value is too large to be represented accurately by
2424+JavaScript's number type. To avoid this warning integer values must be in
2525+the range -(2^53 - 1) - (2^53 - 1).
2626+2727+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2828+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n <<9_007_199_254_740_992:64>>\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ <<9_007_199_254_740_992:64>>
99+}
1010+1111+1212+----- WARNING
1313+warning: Int is outside JavaScript's safe integer range
1414+ ┌─ /src/warning/wrn.gleam:3:5
1515+ │
1616+3 │ <<9_007_199_254_740_992:64>>
1717+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1818+1919+This integer value is too large to be represented accurately by
2020+JavaScript's number type. To avoid this warning integer values must be in
2121+the range -(2^53 - 1) - (2^53 - 1).
2222+2323+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2424+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub const i = <<9_007_199_254_740_992:64>>\n"
44+---
55+----- SOURCE CODE
66+77+pub const i = <<9_007_199_254_740_992:64>>
88+99+1010+----- WARNING
1111+warning: Int is outside JavaScript's safe integer range
1212+ ┌─ /src/warning/wrn.gleam:2:17
1313+ │
1414+2 │ pub const i = <<9_007_199_254_740_992:64>>
1515+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1616+1717+This integer value is too large to be represented accurately by
1818+JavaScript's number type. To avoid this warning integer values must be in
1919+the range -(2^53 - 1) - (2^53 - 1).
2020+2121+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2222+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub fn go() {\n [\n <<0:9_007_199_254_740_992>>,\n <<0:size(9_007_199_254_740_992)>>,\n ]\n}\n"
44+---
55+----- SOURCE CODE
66+77+pub fn go() {
88+ [
99+ <<0:9_007_199_254_740_992>>,
1010+ <<0:size(9_007_199_254_740_992)>>,
1111+ ]
1212+}
1313+1414+1515+----- WARNING
1616+warning: Int is outside JavaScript's safe integer range
1717+ ┌─ /src/warning/wrn.gleam:4:9
1818+ │
1919+4 │ <<0:9_007_199_254_740_992>>,
2020+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
2121+2222+This integer value is too large to be represented accurately by
2323+JavaScript's number type. To avoid this warning integer values must be in
2424+the range -(2^53 - 1) - (2^53 - 1).
2525+2626+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2727+properties for more information.
2828+2929+warning: Int is outside JavaScript's safe integer range
3030+ ┌─ /src/warning/wrn.gleam:5:14
3131+ │
3232+5 │ <<0:size(9_007_199_254_740_992)>>,
3333+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
3434+3535+This integer value is too large to be represented accurately by
3636+JavaScript's number type. To avoid this warning integer values must be in
3737+the range -(2^53 - 1) - (2^53 - 1).
3838+3939+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
4040+properties for more information.
···11+---
22+source: compiler-core/src/type_/tests/warnings.rs
33+expression: "\npub const ints = [\n <<0:9_007_199_254_740_992>>,\n <<0:size(9_007_199_254_740_992)>>,\n]\n"
44+---
55+----- SOURCE CODE
66+77+pub const ints = [
88+ <<0:9_007_199_254_740_992>>,
99+ <<0:size(9_007_199_254_740_992)>>,
1010+]
1111+1212+1313+----- WARNING
1414+warning: Int is outside JavaScript's safe integer range
1515+ ┌─ /src/warning/wrn.gleam:3:7
1616+ │
1717+3 │ <<0:9_007_199_254_740_992>>,
1818+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
1919+2020+This integer value is too large to be represented accurately by
2121+JavaScript's number type. To avoid this warning integer values must be in
2222+the range -(2^53 - 1) - (2^53 - 1).
2323+2424+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
2525+properties for more information.
2626+2727+warning: Int is outside JavaScript's safe integer range
2828+ ┌─ /src/warning/wrn.gleam:4:12
2929+ │
3030+4 │ <<0:size(9_007_199_254_740_992)>>,
3131+ │ ^^^^^^^^^^^^^^^^^^^^^ This is not a safe integer value on JavaScript
3232+3333+This integer value is too large to be represented accurately by
3434+JavaScript's number type. To avoid this warning integer values must be in
3535+the range -(2^53 - 1) - (2^53 - 1).
3636+3737+See JavaScript's Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER
3838+properties for more information.