From deaffbebeabb1b0e395f41a7ff139fd3de66eec0 Mon Sep 17 00:00:00 2001 From: GearsDatapacks Date: Sun, 24 Aug 2025 16:41:15 +0100 Subject: [PATCH] Add parsing for constants --- ...deo_language__parser__tests__constant.snap | 43 ++++++++ ...rser__tests__constant_with_annotation.snap | 101 ++++++++++++++++++ src/parser/tests.rs | 10 ++ test.tut | 2 +- 4 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 src/parser/snapshots/video_language__parser__tests__constant.snap create mode 100644 src/parser/snapshots/video_language__parser__tests__constant_with_annotation.snap diff --git a/src/parser/snapshots/video_language__parser__tests__constant.snap b/src/parser/snapshots/video_language__parser__tests__constant.snap new file mode 100644 index 0000000..6a9900c --- /dev/null +++ b/src/parser/snapshots/video_language__parser__tests__constant.snap @@ -0,0 +1,43 @@ +--- +source: src/parser/tests.rs +expression: pub const three = 1 + 2 +--- +---- SOURCE CODE +pub const three = 1 + 2 + +---- AST +[ + Constant( + Constant { + publicity: Public, + name: "three", + annotation: None, + value: BinaryOperator { + location: Span { + start: 18, + end: 23, + }, + left: Int { + location: Span { + start: 18, + end: 19, + }, + value: 1, + }, + operator: Add, + right: Int { + location: Span { + start: 22, + end: 23, + }, + value: 2, + }, + type_: (), + }, + location: Span { + start: 0, + end: 23, + }, + }, + ), +] diff --git a/src/parser/snapshots/video_language__parser__tests__constant_with_annotation.snap b/src/parser/snapshots/video_language__parser__tests__constant_with_annotation.snap new file mode 100644 index 0000000..854190c --- /dev/null +++ b/src/parser/snapshots/video_language__parser__tests__constant_with_annotation.snap @@ -0,0 +1,101 @@ +--- +source: src/parser/tests.rs +expression: "const fib: []i32 = [0, 1, 1, 2, 3, 5, 8, 13]" +--- +---- SOURCE CODE +const fib: []i32 = [0, 1, 1, 2, 3, 5, 8, 13] + +---- AST +[ + Constant( + Constant { + publicity: Private, + name: "fib", + annotation: Some( + List { + location: Span { + start: 11, + end: 16, + }, + element: Name { + location: Span { + start: 13, + end: 16, + }, + name: "i32", + generics: [], + }, + }, + ), + value: Array { + location: Span { + start: 19, + end: 44, + }, + elements: [ + Int { + location: Span { + start: 20, + end: 21, + }, + value: 0, + }, + Int { + location: Span { + start: 23, + end: 24, + }, + value: 1, + }, + Int { + location: Span { + start: 26, + end: 27, + }, + value: 1, + }, + Int { + location: Span { + start: 29, + end: 30, + }, + value: 2, + }, + Int { + location: Span { + start: 32, + end: 33, + }, + value: 3, + }, + Int { + location: Span { + start: 35, + end: 36, + }, + value: 5, + }, + Int { + location: Span { + start: 38, + end: 39, + }, + value: 8, + }, + Int { + location: Span { + start: 41, + end: 43, + }, + value: 13, + }, + ], + type_: (), + }, + location: Span { + start: 0, + end: 44, + }, + }, + ), +] diff --git a/src/parser/tests.rs b/src/parser/tests.rs index 1fa9502..502467b 100644 --- a/src/parser/tests.rs +++ b/src/parser/tests.rs @@ -137,3 +137,13 @@ fn type_annotation() { "fn thing(arg: (*mut MyType, *[10]{string: i32}), array: [_](a, b, c)) {}" ); } + +#[test] +fn constant() { + assert_parse_module!("pub const three = 1 + 2"); +} + +#[test] +fn constant_with_annotation() { + assert_parse_module!("const fib: []i32 = [0, 1, 1, 2, 3, 5, 8, 13]"); +} diff --git a/test.tut b/test.tut index 0d21ec1..f1887b6 100644 --- a/test.tut +++ b/test.tut @@ -1,4 +1,4 @@ -const x = 1 + 2 +const x: i23 = 1 + 2 pub fn main() { 1 + 2 -- 2.51.2