diff --git a/grammar.js b/grammar.js index 2b4b351..fb0d7d8 100644 --- a/grammar.js +++ b/grammar.js @@ -174,6 +174,7 @@ module.exports = grammar({ test_definition: $ => seq( 'test', optional($.string_literal), + optional($.parameters), $.block_expression ), @@ -293,10 +294,10 @@ module.exports = grammar({ boolean_literal: _ => choice('true', 'false'), integer_literal: _ => token(choice( - /[0-9][0-9_]*L?/, - /0[xX][0-9a-fA-F_]+L?/, - /0[oO][0-7_]+L?/, - /0[bB][01_]+L?/, + /[0-9][0-9_]*U?L?/, + /0[xX][0-9a-fA-F_]+U?L?/, + /0[oO][0-7_]+U?L?/, + /0[bB][01_]+U?L?/, )), // integerPart = /[0-9][_0-9]*/, diff --git a/src/grammar.json b/src/grammar.json index abb464a..f176867 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -956,6 +956,18 @@ } ] }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "parameters" + }, + { + "type": "BLANK" + } + ] + }, { "type": "SYMBOL", "name": "block_expression" @@ -1547,19 +1559,19 @@ "members": [ { "type": "PATTERN", - "value": "[0-9][0-9_]*L?" + "value": "[0-9][0-9_]*U?L?" }, { "type": "PATTERN", - "value": "0[xX][0-9a-fA-F_]+L?" + "value": "0[xX][0-9a-fA-F_]+U?L?" }, { "type": "PATTERN", - "value": "0[oO][0-7_]+L?" + "value": "0[oO][0-7_]+U?L?" }, { "type": "PATTERN", - "value": "0[bB][01_]+L?" + "value": "0[bB][01_]+U?L?" } ] } diff --git a/src/node-types.json b/src/node-types.json index 221490a..306939e 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -2189,6 +2189,10 @@ "type": "block_expression", "named": true }, + { + "type": "parameters", + "named": true + }, { "type": "string_literal", "named": true diff --git a/src/parser.c b/src/parser.c index 86cefe9..7bae45c 100644 Binary files a/src/parser.c and b/src/parser.c differ diff --git a/test/corpus/literal.txt b/test/corpus/literal.txt index 4955b10..f7918e5 100644 --- a/test/corpus/literal.txt +++ b/test/corpus/literal.txt @@ -279,3 +279,61 @@ fn init { (bytes_literal (string_fragment (unescaped_string_fragment)))))))))))))))) + +================================================================================ +integer literal +================================================================================ +fn main { + let a = 1 + let b = 1U + let c = 1L + let d = 1UL +} +-------------------------------------------------------------------------------- + +(structure + (structure_item + (function_definition + (function_identifier + (lowercase_identifier)) + (block_expression + (statement_expression + (let_expression + (pattern + (simple_pattern + (lowercase_identifier))) + (expression + (simple_expression + (atomic_expression + (literal + (integer_literal))))))) + (statement_expression + (let_expression + (pattern + (simple_pattern + (lowercase_identifier))) + (expression + (simple_expression + (atomic_expression + (literal + (integer_literal))))))) + (statement_expression + (let_expression + (pattern + (simple_pattern + (lowercase_identifier))) + (expression + (simple_expression + (atomic_expression + (literal + (integer_literal))))))) + (statement_expression + (let_expression + (pattern + (simple_pattern + (lowercase_identifier))) + (expression + (simple_expression + (atomic_expression + (literal + (integer_literal))))))))))) diff --git a/test/corpus/test.txt b/test/corpus/test.txt index 8e028ff..2fb05e2 100644 --- a/test/corpus/test.txt +++ b/test/corpus/test.txt @@ -46,3 +46,72 @@ test { (atomic_expression (literal (integer_literal))))))))))) + +================================================================================ +snapshot +================================================================================ +test "a" (it : @test.T) { + it.writeln("hello") + it.snapshot!(filename="test.txt") +} +-------------------------------------------------------------------------------- + +(structure + (structure_item + (test_definition + (string_literal + (string_fragment + (unescaped_string_fragment))) + (parameters + (parameter + (lowercase_identifier) + (type_annotation + (colon) + (type + (apply_type + (qualified_type_identifier + (package_identifier) + (dot_identifier + (dot_operator)))))))) + (block_expression + (statement_expression + (expression + (simple_expression + (dot_apply_expression + (simple_expression + (qualified_identifier + (lowercase_identifier))) + (dot_identifier + (dot_operator)) + (argument + (expression + (simple_expression + (atomic_expression + (literal + (string_literal + (string_fragment + (unescaped_string_fragment)))))))))))) + (statement_expression + (expression + (simple_expression + (apply_expression + (simple_expression + (access_expression + (simple_expression + (qualified_identifier + (lowercase_identifier))) + (accessor + (dot_identifier + (dot_operator))))) + (argument + (argument_label + (simple_expression + (qualified_identifier + (lowercase_identifier)))) + (expression + (simple_expression + (atomic_expression + (literal + (string_literal + (string_fragment + (unescaped_string_fragment))))))))))))))))