Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

Use consistent phrasing

+304 -19
+3 -3
CHANGELOG.md
··· 218 218 patterns and guards of a case arm. 219 219 ([Giacomo Cavalieri](https://github.com/giacomocavalieri)) 220 220 221 - - Fixed a bug where the compiler would not warn for integers over the safe 221 + - Fixed a bug where the compiler would not warn for ints over the safe 222 222 JavaScript limit in `BitArray` segments with a unit option. 223 223 ([Giacomo Cavalieri](https://github.com/giacomocavalieri)) 224 224 225 - - Fixed a bug where the compiler would incorrectly warn for integers over the 226 - safe JavaScript limit in `BitArray` byte segments that aren't integers. 225 + - Fixed a bug where the compiler would incorrectly warn for ints over the 226 + safe JavaScript limit in `BitArray` byte segments that aren't ints. 227 227 ([Giacomo Cavalieri](https://github.com/giacomocavalieri)) 228 228 229 229 - Fixed a bug where enabling `javascript.typescript_declarations` or
+2 -2
compiler-core/src/type_/pattern.rs
··· 1531 1531 } 1532 1532 1533 1533 /// This raises a warning if we're on the js target and we're matching on 1534 - /// an integer segment that has an explicit literal size over 52 bits. 1534 + /// an int segment that has an explicit literal size over 52 bits. 1535 1535 /// That's the maximum size of ints on the JS target, matching on anything 1536 1536 /// bigger would result in the number being truncated. 1537 1537 /// 1538 1538 fn check_matched_int_is_in_js_bounds(&mut self, segment: &TypedPatternBitArraySegment) { 1539 1539 // This only makes sense to check on the js target 1540 1540 // And if the segment actually defines a variable that would end up 1541 - // being truncated and that is an integer! 1541 + // being truncated and that is an int! 1542 1542 if self.environment.target != Target::JavaScript || !segment.type_.is_int() { 1543 1543 return; 1544 1544 }
+24
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__assert_on_impossible_to_reach_int_segment.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n let assert <<1, -1, 2, -3>> = x\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + let assert <<1, -1, 2, -3>> = x 9 + } 10 + 11 + ----- WARNING 12 + warning: Assertion that will always fail 13 + ┌─ /src/warning/wrn.gleam:3:14 14 + 15 + 3 │ let assert <<1, -1, 2, -3>> = x 16 + │ ^^^^^^^^^^^^^^^^ 17 + │ │ │ 18 + │ │ A 1 byte unsigned integer will never match this value 19 + │ A 1 byte unsigned integer will never match this value 20 + 21 + We can tell from the code above that the value will never match this 22 + pattern and that this code will always crash. 23 + 24 + Either change the pattern or use `panic` to unconditionally fail.
+23
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__bit_array_match_on_int_over_js_limit.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn go(x: BitArray) {\n let <<number:123>> = x\n number\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn go(x: BitArray) { 8 + let <<number:123>> = x 9 + number 10 + } 11 + 12 + 13 + ----- WARNING 14 + warning: Truncated bit array segment 15 + ┌─ /src/warning/wrn.gleam:3:11 16 + 17 + 3 │ let <<number:123>> = x 18 + │ ^^^^^^^^^^ 19 + 20 + This segment is a 123-bit long int, but on the JavaScript target numbers 21 + have at most 52 bits. It would be truncated to its first 52 bits. 22 + 23 + Hint: Did you mean to use the `bytes` segment option?
+25
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__bit_array_match_on_int_over_js_limit_1.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn go(x: BitArray) {\n case x {\n <<n:size(53)>> -> n\n _ -> 1\n }\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn go(x: BitArray) { 8 + case x { 9 + <<n:size(53)>> -> n 10 + _ -> 1 11 + } 12 + } 13 + 14 + 15 + ----- WARNING 16 + warning: Truncated bit array segment 17 + ┌─ /src/warning/wrn.gleam:4:7 18 + 19 + 4 │ <<n:size(53)>> -> n 20 + │ ^^^^^^^^^^ 21 + 22 + This segment is a 53-bit long int, but on the JavaScript target numbers 23 + have at most 52 bits. It would be truncated to its first 52 bits. 24 + 25 + Hint: Did you mean to use the `bytes` segment option?
+25
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__bit_array_match_on_int_over_js_limit_with_unit.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn go(x: BitArray) {\n case x {\n <<n:2-unit(250)>> -> n\n _ -> 1\n }\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn go(x: BitArray) { 8 + case x { 9 + <<n:2-unit(250)>> -> n 10 + _ -> 1 11 + } 12 + } 13 + 14 + 15 + ----- WARNING 16 + warning: Truncated bit array segment 17 + ┌─ /src/warning/wrn.gleam:4:7 18 + 19 + 4 │ <<n:2-unit(250)>> -> n 20 + │ ^^^^^^^^^^^^^ 21 + 22 + This segment is a 500-bit long int, but on the JavaScript target numbers 23 + have at most 52 bits. It would be truncated to its first 52 bits. 24 + 25 + Hint: Did you mean to use the `bytes` segment option?
+13
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__double_unary_int_literal.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "pub fn main() { let _ = --7 }" 4 + --- 5 + ----- SOURCE CODE 6 + pub fn main() { let _ = --7 } 7 + 8 + ----- WARNING 9 + warning: Unnecessary double negation (--) on integer 10 + ┌─ /src/warning/wrn.gleam:1:25 11 + 12 + 1 │ pub fn main() { let _ = --7 } 13 + │ ^^ You can safely remove this.
+18
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__double_unary_int_variable.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\n pub fn main() {\n let x = 7\n let _ = --x\n }\n " 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main() { 8 + let x = 7 9 + let _ = --x 10 + } 11 + 12 + 13 + ----- WARNING 14 + warning: Unnecessary double negation (--) on integer 15 + ┌─ /src/warning/wrn.gleam:4:21 16 + 17 + 4 │ let _ = --x 18 + │ ^^ You can safely remove this.
+13
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__even_number_of_multiple_int_negations_raise_a_single_warning.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "pub fn main() { let _ = ----7 }" 4 + --- 5 + ----- SOURCE CODE 6 + pub fn main() { let _ = ----7 } 7 + 8 + ----- WARNING 9 + warning: Unnecessary double negation (--) on integer 10 + ┌─ /src/warning/wrn.gleam:1:25 11 + 12 + 1 │ pub fn main() { let _ = ----7 } 13 + │ ^^^^ You can safely remove this.
+26
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__impossible_to_reach_int_segment.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n case x {\n <<9:size(2)>> -> True\n _ -> False\n }\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + case x { 9 + <<9:size(2)>> -> True 10 + _ -> False 11 + } 12 + } 13 + 14 + ----- WARNING 15 + warning: Unreachable pattern 16 + ┌─ /src/warning/wrn.gleam:4:5 17 + 18 + 4 │ <<9:size(2)>> -> True 19 + │ ^^^^^^^^^^^^^ 20 + │ │ 21 + │ A 2 bits unsigned integer will never match this value 22 + 23 + This pattern cannot be reached as it contains segments that will never 24 + match. 25 + 26 + Hint: It can be safely removed.
+26
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__impossible_to_reach_int_segment_2.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n case x {\n <<-9:unsigned>> -> True\n _ -> False\n }\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + case x { 9 + <<-9:unsigned>> -> True 10 + _ -> False 11 + } 12 + } 13 + 14 + ----- WARNING 15 + warning: Unreachable pattern 16 + ┌─ /src/warning/wrn.gleam:4:5 17 + 18 + 4 │ <<-9:unsigned>> -> True 19 + │ ^^^^^^^^^^^^^^^ 20 + │ │ 21 + │ A 1 byte unsigned integer will never match this value 22 + 23 + This pattern cannot be reached as it contains segments that will never 24 + match. 25 + 26 + Hint: It can be safely removed.
+26
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__impossible_to_reach_int_segment_3.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n case x {\n <<312>> -> True\n _ -> False\n }\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + case x { 9 + <<312>> -> True 10 + _ -> False 11 + } 12 + } 13 + 14 + ----- WARNING 15 + warning: Unreachable pattern 16 + ┌─ /src/warning/wrn.gleam:4:5 17 + 18 + 4 │ <<312>> -> True 19 + │ ^^^^^^^ 20 + │ │ 21 + │ A 1 byte unsigned integer will never match this value 22 + 23 + This pattern cannot be reached as it contains segments that will never 24 + match. 25 + 26 + Hint: It can be safely removed.
+26
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__impossible_to_reach_int_segment_4.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n case x {\n <<-1>> -> True\n _ -> False\n }\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + case x { 9 + <<-1>> -> True 10 + _ -> False 11 + } 12 + } 13 + 14 + ----- WARNING 15 + warning: Unreachable pattern 16 + ┌─ /src/warning/wrn.gleam:4:5 17 + 18 + 4 │ <<-1>> -> True 19 + │ ^^^^^^ 20 + │ │ 21 + │ A 1 byte unsigned integer will never match this value 22 + 23 + This pattern cannot be reached as it contains segments that will never 24 + match. 25 + 26 + Hint: It can be safely removed.
+27
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__multiple_impossible_to_reach_int_segments.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "\npub fn main(x) {\n case x {\n <<1, -1, 2, -3>> -> True\n _ -> False\n }\n}" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub fn main(x) { 8 + case x { 9 + <<1, -1, 2, -3>> -> True 10 + _ -> False 11 + } 12 + } 13 + 14 + ----- WARNING 15 + warning: Unreachable pattern 16 + ┌─ /src/warning/wrn.gleam:4:5 17 + 18 + 4 │ <<1, -1, 2, -3>> -> True 19 + │ ^^^^^^^^^^^^^^^^ 20 + │ │ │ 21 + │ │ A 1 byte unsigned integer will never match this value 22 + │ A 1 byte unsigned integer will never match this value 23 + 24 + This pattern cannot be reached as it contains segments that will never 25 + match. 26 + 27 + Hint: It can be safely removed.
+13
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__warnings__odd_number_of_multiple_int_negations_raise_a_single_warning_that_highlights_the_unnecessary_ones.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/warnings.rs 3 + expression: "pub fn main() { let _ = -----7 }" 4 + --- 5 + ----- SOURCE CODE 6 + pub fn main() { let _ = -----7 } 7 + 8 + ----- WARNING 9 + warning: Unnecessary double negation (--) on integer 10 + ┌─ /src/warning/wrn.gleam:1:25 11 + 12 + 1 │ pub fn main() { let _ = -----7 } 13 + │ ^^^^ You can safely remove this.
+14 -14
compiler-core/src/type_/tests/warnings.rs
··· 491 491 492 492 // https://github.com/gleam-lang/gleam/issues/2050 493 493 #[test] 494 - fn double_unary_integer_literal() { 494 + fn double_unary_int_literal() { 495 495 assert_warning!("pub fn main() { let _ = --7 }"); 496 496 } 497 497 498 498 #[test] 499 - fn even_number_of_multiple_integer_negations_raise_a_single_warning() { 499 + fn even_number_of_multiple_int_negations_raise_a_single_warning() { 500 500 assert_warning!("pub fn main() { let _ = ----7 }"); 501 501 } 502 502 503 503 #[test] 504 - fn odd_number_of_multiple_integer_negations_raise_a_single_warning_that_highlights_the_unnecessary_ones() 504 + fn odd_number_of_multiple_int_negations_raise_a_single_warning_that_highlights_the_unnecessary_ones() 505 505 { 506 506 assert_warning!("pub fn main() { let _ = -----7 }"); 507 507 } ··· 519 519 520 520 // https://github.com/gleam-lang/gleam/issues/2050 521 521 #[test] 522 - fn double_unary_integer_variable() { 522 + fn double_unary_int_variable() { 523 523 assert_warning!( 524 524 r#" 525 525 pub fn main() { ··· 4580 4580 } 4581 4581 4582 4582 #[test] 4583 - fn impossible_to_reach_integer_segment() { 4583 + fn impossible_to_reach_int_segment() { 4584 4584 assert_warning!( 4585 4585 " 4586 4586 pub fn main(x) { ··· 4593 4593 } 4594 4594 4595 4595 #[test] 4596 - fn impossible_to_reach_integer_segment_2() { 4596 + fn impossible_to_reach_int_segment_2() { 4597 4597 assert_warning!( 4598 4598 " 4599 4599 pub fn main(x) { ··· 4606 4606 } 4607 4607 4608 4608 #[test] 4609 - fn impossible_to_reach_integer_segment_3() { 4609 + fn impossible_to_reach_int_segment_3() { 4610 4610 assert_warning!( 4611 4611 " 4612 4612 pub fn main(x) { ··· 4619 4619 } 4620 4620 4621 4621 #[test] 4622 - fn impossible_to_reach_integer_segment_4() { 4622 + fn impossible_to_reach_int_segment_4() { 4623 4623 assert_warning!( 4624 4624 " 4625 4625 pub fn main(x) { ··· 4632 4632 } 4633 4633 4634 4634 #[test] 4635 - fn multiple_impossible_to_reach_integer_segments() { 4635 + fn multiple_impossible_to_reach_int_segments() { 4636 4636 assert_warning!( 4637 4637 " 4638 4638 pub fn main(x) { ··· 4645 4645 } 4646 4646 4647 4647 #[test] 4648 - fn assert_on_impossible_to_reach_integer_segment() { 4648 + fn assert_on_impossible_to_reach_int_segment() { 4649 4649 assert_warning!( 4650 4650 " 4651 4651 pub fn main(x) { ··· 4937 4937 } 4938 4938 4939 4939 #[test] 4940 - fn bit_array_match_on_integer_over_js_limit() { 4940 + fn bit_array_match_on_int_over_js_limit() { 4941 4941 assert_js_warning!( 4942 4942 " 4943 4943 pub fn go(x: BitArray) { ··· 4949 4949 } 4950 4950 4951 4951 #[test] 4952 - fn bit_array_match_on_integer_over_js_limit_1() { 4952 + fn bit_array_match_on_int_over_js_limit_1() { 4953 4953 assert_js_warning!( 4954 4954 " 4955 4955 pub fn go(x: BitArray) { ··· 4963 4963 } 4964 4964 4965 4965 #[test] 4966 - fn bit_array_match_on_integer_over_js_limit_with_unit() { 4966 + fn bit_array_match_on_int_over_js_limit_with_unit() { 4967 4967 assert_js_warning!( 4968 4968 " 4969 4969 pub fn go(x: BitArray) { ··· 4977 4977 } 4978 4978 4979 4979 #[test] 4980 - fn bit_array_match_on_bytes_does_not_complain_about_integer_size() { 4980 + fn bit_array_match_on_bytes_does_not_complain_about_int_size() { 4981 4981 assert_js_no_warnings!( 4982 4982 " 4983 4983 pub fn go(x: BitArray) {