plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
348b356
— Peter John
2026-11-01T20:32:18+05:30
fix: parser union tests use raw parse
plum-core/tests/parser_test.rs
CHANGED
|
@@ -3,6 +3,14 @@ use plum_core::ast::*;
|
|
|
3
3
|
use plum_core::AstParser;
|
|
4
4
|
|
|
5
5
|
fn parse(src: &str) -> Source {
|
|
6
|
+
parseWith(src, false)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
fn parseRaw(src: &str) -> Source {
|
|
10
|
+
parseWith(src, true)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
fn parseWith(src: &str, raw: bool) -> Source {
|
|
6
14
|
let mut parser = tree_sitter::Parser::new();
|
|
7
15
|
parser
|
|
8
16
|
.set_language(&tree_sitter_plum::LANGUAGE.into())
|
|
@@ -14,7 +22,11 @@ fn parse(src: &str) -> Source {
|
|
|
14
22
|
tree.root_node().to_sexp()
|
|
15
23
|
);
|
|
16
24
|
let ap = AstParser::new(src);
|
|
25
|
+
if raw {
|
|
26
|
+
ap.parseSourceRaw(tree.root_node())
|
|
27
|
+
} else {
|
|
17
|
-
|
|
28
|
+
ap.parseSource(tree.root_node())
|
|
29
|
+
}
|
|
18
30
|
}
|
|
19
31
|
|
|
20
32
|
fn onlyFn(source: &Source) -> &Fn {
|
|
@@ -863,7 +875,7 @@ fn memberOf(v: &EnumVariant) -> &Type {
|
|
|
863
875
|
|
|
864
876
|
#[test]
|
|
865
877
|
fn unionEnumOneLine() {
|
|
866
|
-
let source =
|
|
878
|
+
let source = parseRaw("enum Shape = Circle | Rectangle");
|
|
867
879
|
let e = onlyEnum(&source);
|
|
868
880
|
assert_eq!(e.name, "Shape");
|
|
869
881
|
assert_eq!(e.variants.len(), 2);
|
|
@@ -875,7 +887,7 @@ fn unionEnumOneLine() {
|
|
|
875
887
|
|
|
876
888
|
#[test]
|
|
877
889
|
fn unionEnumMultiLineGenericMember() {
|
|
878
|
-
let source =
|
|
890
|
+
let source = parseRaw("enum Tree[T] =\n | Leaf\n | Node[T]\n");
|
|
879
891
|
let e = onlyEnum(&source);
|
|
880
892
|
assert_eq!(e.variants.len(), 2);
|
|
881
893
|
assert_eq!(memberOf(&e.variants[0]).name, "Leaf");
|
|
@@ -893,7 +905,7 @@ fn one_line_then_fun() {
|
|
|
893
905
|
|
|
894
906
|
#[test]
|
|
895
907
|
fn one_line_generic_member() {
|
|
896
|
-
let source =
|
|
908
|
+
let source = parseRaw("enum Js = JsNull | List[Js] | Map[Str, Js]");
|
|
897
909
|
let e = onlyEnum(&source);
|
|
898
910
|
assert_eq!(memberOf(&e.variants[0]).generics.len(), 0);
|
|
899
911
|
assert_eq!(memberOf(&e.variants[1]).generics.len(), 1);
|