plum

#treesitter#compiler#wasm

git clone https://git.pyrossh.dev/plum

A statically typed, imperative programming language inspired by rust, python


4b9435d — Peter John 2026-11-01T17:37:29+05:30
T1: core syntax + lowering
Files changed (1) hide show
  1. plum-core/tests/parser_test.rs +19 -0
plum-core/tests/parser_test.rs CHANGED
@@ -837,3 +837,22 @@ fn value_enum_rejected() {
837
837
  fn struct_generic_rejected() {
838
838
  assert!(hasParseError("struct Pp[T](a: T)"));
839
839
  }
840
+
841
+ #[test]
842
+ fn review_struct_bodyless_comment_then_items() {
843
+ let s = parse("struct Aa(x: Int)\n# note\nstruct Bb(a: Aa)\n# c2\nrecord Pp[T](a: T)\n# c3\nfun f() -> Int = 1\n");
844
+ assert_eq!(s.items.len(), 4);
845
+ }
846
+
847
+ #[test]
848
+ fn review_struct_comment_after_eq_consts_nested_record() {
849
+ let s = parse(
850
+ "struct Vec2(x: Float, y: Float) =\n # c\n ZERO = Vec2(x: 0.0, y: 0.0)\n fun len(self) -> Float = self.x\nrecord Rr(v: Vec2) =\n fun g(self) -> Float = self.v.x\n",
851
+ );
852
+ let consts = s.items.iter().filter(|i| matches!(i, Item::Const(_))).count();
853
+ assert_eq!(consts, 1);
854
+ let fns: Vec<_> = s.items.iter().filter_map(|i| if let Item::Fn(f) = i { Some(f) } else { None }).collect();
855
+ assert_eq!(fns.len(), 2);
856
+ assert_eq!(fns[0].type_param.as_deref(), Some("Vec2"));
857
+ assert_eq!(fns[1].type_param.as_deref(), Some("Rr"));
858
+ }