tree-sitter-abl 0.0.49 → 0.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ {
2
+ "AblFormatter.variableAssignmentFormatting": true
3
+ }
package/binding.gyp CHANGED
@@ -1,19 +1,19 @@
1
- {
2
- "targets": [
3
- {
4
- "target_name": "tree_sitter_abl_binding",
5
- "include_dirs": [
6
- "<!(node -e \"require('nan')\")",
7
- "src"
8
- ],
9
- "sources": [
10
- "bindings/node/binding.cc",
11
- "src/parser.c",
12
- "src/scanner.c",
13
- ],
14
- "cflags_c": [
15
- "-std=c99",
16
- ]
17
- }
18
- ]
19
- }
1
+ {
2
+ "targets": [
3
+ {
4
+ "target_name": "tree_sitter_abl_binding",
5
+ "include_dirs": [
6
+ "<!(node -e \"require('nan')\")",
7
+ "src"
8
+ ],
9
+ "sources": [
10
+ "bindings/node/binding.cc",
11
+ "src/parser.c",
12
+ "src/scanner.c",
13
+ ],
14
+ "cflags_c": [
15
+ "-std=c99",
16
+ ]
17
+ }
18
+ ]
19
+ }
@@ -25,4 +25,4 @@ void Init(Local<Object> exports, Local<Object> module) {
25
25
 
26
26
  NODE_MODULE(tree_sitter_abl_binding, Init)
27
27
 
28
- } // namespace
28
+ } // namespace
@@ -16,4 +16,4 @@ try {
16
16
 
17
17
  try {
18
18
  module.exports.nodeTypeInfo = require("../../src/node-types.json");
19
- } catch (_) {}
19
+ } catch (_) {}
@@ -1,40 +1,40 @@
1
- fn main() {
2
- let src_dir = std::path::Path::new("src");
3
-
4
- let mut c_config = cc::Build::new();
5
- c_config.include(&src_dir);
6
- c_config
7
- .flag_if_supported("-Wno-unused-parameter")
8
- .flag_if_supported("-Wno-unused-but-set-variable")
9
- .flag_if_supported("-Wno-trigraphs");
10
- let parser_path = src_dir.join("parser.c");
11
- c_config.file(&parser_path);
12
-
13
- // If your language uses an external scanner written in C,
14
- // then include this block of code:
15
-
16
- /*
17
- let scanner_path = src_dir.join("scanner.c");
18
- c_config.file(&scanner_path);
19
- println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
20
- */
21
-
22
- c_config.compile("parser");
23
- println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
24
-
25
- // If your language uses an external scanner written in C++,
26
- // then include this block of code:
27
-
28
- /*
29
- let mut cpp_config = cc::Build::new();
30
- cpp_config.cpp(true);
31
- cpp_config.include(&src_dir);
32
- cpp_config
33
- .flag_if_supported("-Wno-unused-parameter")
34
- .flag_if_supported("-Wno-unused-but-set-variable");
35
- let scanner_path = src_dir.join("scanner.cc");
36
- cpp_config.file(&scanner_path);
37
- cpp_config.compile("scanner");
38
- println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
39
- */
40
- }
1
+ fn main() {
2
+ let src_dir = std::path::Path::new("src");
3
+
4
+ let mut c_config = cc::Build::new();
5
+ c_config.include(&src_dir);
6
+ c_config
7
+ .flag_if_supported("-Wno-unused-parameter")
8
+ .flag_if_supported("-Wno-unused-but-set-variable")
9
+ .flag_if_supported("-Wno-trigraphs");
10
+ let parser_path = src_dir.join("parser.c");
11
+ c_config.file(&parser_path);
12
+
13
+ // If your language uses an external scanner written in C,
14
+ // then include this block of code:
15
+
16
+ /*
17
+ let scanner_path = src_dir.join("scanner.c");
18
+ c_config.file(&scanner_path);
19
+ println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
20
+ */
21
+
22
+ c_config.compile("parser");
23
+ println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
24
+
25
+ // If your language uses an external scanner written in C++,
26
+ // then include this block of code:
27
+
28
+ /*
29
+ let mut cpp_config = cc::Build::new();
30
+ cpp_config.cpp(true);
31
+ cpp_config.include(&src_dir);
32
+ cpp_config
33
+ .flag_if_supported("-Wno-unused-parameter")
34
+ .flag_if_supported("-Wno-unused-but-set-variable");
35
+ let scanner_path = src_dir.join("scanner.cc");
36
+ cpp_config.file(&scanner_path);
37
+ cpp_config.compile("scanner");
38
+ println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
39
+ */
40
+ }
@@ -1,52 +1,52 @@
1
- //! This crate provides abl language support for the [tree-sitter][] parsing library.
2
- //!
3
- //! Typically, you will use the [language][language func] function to add this language to a
4
- //! tree-sitter [Parser][], and then use the parser to parse some code:
5
- //!
6
- //! ```
7
- //! let code = "";
8
- //! let mut parser = tree_sitter::Parser::new();
9
- //! parser.set_language(tree_sitter_abl::language()).expect("Error loading abl grammar");
10
- //! let tree = parser.parse(code, None).unwrap();
11
- //! ```
12
- //!
13
- //! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
14
- //! [language func]: fn.language.html
15
- //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
16
- //! [tree-sitter]: https://tree-sitter.github.io/
17
-
18
- use tree_sitter::Language;
19
-
20
- extern "C" {
21
- fn tree_sitter_abl() -> Language;
22
- }
23
-
24
- /// Get the tree-sitter [Language][] for this grammar.
25
- ///
26
- /// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
27
- pub fn language() -> Language {
28
- unsafe { tree_sitter_abl() }
29
- }
30
-
31
- /// The content of the [`node-types.json`][] file for this grammar.
32
- ///
33
- /// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
34
- pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
35
-
36
- // Uncomment these to include any queries that this grammar contains
37
-
38
- // pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
39
- // pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm");
40
- // pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
41
- // pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
42
-
43
- #[cfg(test)]
44
- mod tests {
45
- #[test]
46
- fn test_can_load_grammar() {
47
- let mut parser = tree_sitter::Parser::new();
48
- parser
49
- .set_language(super::language())
50
- .expect("Error loading abl language");
51
- }
52
- }
1
+ //! This crate provides abl language support for the [tree-sitter][] parsing library.
2
+ //!
3
+ //! Typically, you will use the [language][language func] function to add this language to a
4
+ //! tree-sitter [Parser][], and then use the parser to parse some code:
5
+ //!
6
+ //! ```
7
+ //! let code = "";
8
+ //! let mut parser = tree_sitter::Parser::new();
9
+ //! parser.set_language(tree_sitter_abl::language()).expect("Error loading abl grammar");
10
+ //! let tree = parser.parse(code, None).unwrap();
11
+ //! ```
12
+ //!
13
+ //! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
14
+ //! [language func]: fn.language.html
15
+ //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
16
+ //! [tree-sitter]: https://tree-sitter.github.io/
17
+
18
+ use tree_sitter::Language;
19
+
20
+ extern "C" {
21
+ fn tree_sitter_abl() -> Language;
22
+ }
23
+
24
+ /// Get the tree-sitter [Language][] for this grammar.
25
+ ///
26
+ /// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
27
+ pub fn language() -> Language {
28
+ unsafe { tree_sitter_abl() }
29
+ }
30
+
31
+ /// The content of the [`node-types.json`][] file for this grammar.
32
+ ///
33
+ /// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
34
+ pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
35
+
36
+ // Uncomment these to include any queries that this grammar contains
37
+
38
+ // pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
39
+ // pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm");
40
+ // pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
41
+ // pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
42
+
43
+ #[cfg(test)]
44
+ mod tests {
45
+ #[test]
46
+ fn test_can_load_grammar() {
47
+ let mut parser = tree_sitter::Parser::new();
48
+ parser
49
+ .set_language(super::language())
50
+ .expect("Error loading abl language");
51
+ }
52
+ }
package/example1.cls CHANGED
@@ -1,32 +1 @@
1
- /* formatterSettingsOverride */
2
- /* { "abl.completion.upperCase": true}*/
3
-
4
- CLASS A:
5
- DEFINE PROTECTED VARIABLE oRepo AS ILanguageRepository NO-UNDO.
6
-
7
- CONSTRUCTOR PUBLIC LanguageService (poRepo AS ILanguageRepository):
8
- THIS-OBJECT:oRepo = poRepo.
9
- END CONSTRUCTOR.
10
-
11
- METHOD PUBLIC Language GetByID(pcID AS CHARACTER):
12
- RETURN THIS-OBJECT:oRepo:GetByID(pcID).
13
- END METHOD.
14
-
15
- METHOD PUBLIC Language GetByISO(pcISO AS CHARACTER):
16
- RETURN THIS-OBJECT:oRepo:GetByISO(pcISO).
17
- END METHOD.
18
-
19
- METHOD PUBLIC LOGICAL ExistByISO(pcISO AS CHARACTER):
20
- THIS-OBJECT:oRepo:GetByISO(pcISO).
21
- RETURN TRUE.
22
-
23
- CATCH e AS LanguageError:
24
- RETURN FALSE.
25
- END.
26
- END METHOD.
27
-
28
- METHOD PUBLIC Language GetByNameEn(pcNameEn AS CHARACTER):
29
- RETURN THIS-OBJECT:oRepo:GetByNameEn(pcNameEn).
30
- END METHOD.
31
-
32
- END CLASS.
1
+ run getValues.p(input Session:List [{&value}], output table ttData append by-reference).
package/grammar.js CHANGED
@@ -42,7 +42,7 @@ module.exports = grammar({
42
42
  rules: {
43
43
  source_code: ($) => repeat(choice($._statement, $.class_statement, $._definition, $.do_block, $.interface_statement)),
44
44
 
45
- body: ($) => seq(":", repeat(choice($._statement, $._definition))),
45
+ body: ($) => seq(":", repeat(choice($._statement, $._definition, $.do_block))),
46
46
 
47
47
  _statement_body: ($) => choice($.do_block, prec(2, $._statement)),
48
48
 
@@ -57,9 +57,11 @@ module.exports = grammar({
57
57
  $.var_statement,
58
58
  seq(
59
59
  optional($.annotation),
60
- $.method_statement),
60
+ $.method_statement
61
+ ),
61
62
  $.constructor_statement,
62
- $.destructor_statement
63
+ $.destructor_statement,
64
+ $.function_statement
63
65
  )
64
66
  )
65
67
  ),
@@ -242,6 +244,7 @@ module.exports = grammar({
242
244
  $.array_literal,
243
245
  $.array_access,
244
246
  $.identifier,
247
+ $.constant,
245
248
  $._binary_expression
246
249
  ),
247
250
 
@@ -283,7 +286,7 @@ module.exports = grammar({
283
286
 
284
287
  // IDENTIFIERS
285
288
 
286
- identifier: ($) => /[A-Z|a-z|\-|\\_]{1}[A-Z|a-z|\-|\\_|0-9]*/i,
289
+ identifier: ($) => /[A-Z|a-z|\-|\\_]{1}[#A-Z|a-z|\-|\\_|0-9]*/i,
287
290
 
288
291
  constant: ($) =>
289
292
  seq("{", optional("&"), $._constant_value, "}"),
@@ -302,7 +305,8 @@ module.exports = grammar({
302
305
  choice(
303
306
  $.access_tuning,
304
307
  $.scope_tuning,
305
- $.member_modifier
308
+ $.member_modifier,
309
+ $.constant
306
310
  ),
307
311
 
308
312
  // TODO: Fix! HACK: progress spaghetti allows to define tuning order before where clause
@@ -533,23 +537,21 @@ module.exports = grammar({
533
537
  ),
534
538
 
535
539
  variable_tuning: ($) =>
536
- seq(
537
- choice(
538
- $._serialize_name,
539
- // $._bgcolor,
540
- // $._fgcolor,
541
- // $._pfcolor,
542
- // $._dcolor,
543
- // $._context_help_id,
544
- $._value_tuning,
545
- $._format,
546
- $._font,
547
- $._label,
548
- seq(kw("MOUSE-POINTER"), $.identifier),
549
- $._column_label,
550
- // kw("DROP-TARGET"),
551
- seq(optional(kw("NOT")), kw("CASE-SENSITIVE")),
552
- )
540
+ choice(
541
+ $._serialize_name,
542
+ // $._bgcolor,
543
+ // $._fgcolor,
544
+ // $._pfcolor,
545
+ // $._dcolor,
546
+ // $._context_help_id,
547
+ $._value_tuning,
548
+ $._format,
549
+ $._font,
550
+ $._label,
551
+ seq(kw("MOUSE-POINTER"), $.identifier),
552
+ $._column_label,
553
+ // kw("DROP-TARGET"),
554
+ seq(optional(kw("NOT")), kw("CASE-SENSITIVE")),
553
555
  ),
554
556
 
555
557
  // TYPES
@@ -649,9 +651,10 @@ module.exports = grammar({
649
651
  $.number_literal,
650
652
  $.null_expression,
651
653
  $._binary_expression,
652
-
654
+ $.unary_expression,
655
+ $.function_call
653
656
  ),
654
- optional($.parameter_tuning)
657
+ repeat($.parameter_tuning)
655
658
  )
656
659
  ),
657
660
 
@@ -726,7 +729,7 @@ module.exports = grammar({
726
729
  seq(
727
730
  field(
728
731
  "object",
729
- choice($.identifier, $.new_expression, $.function_call)
732
+ choice($.new_expression, $.function_call, $.constant, $._name)
730
733
  ),
731
734
  repeat1(seq(alias($._namecolon, ":"), field("property", $.identifier)))
732
735
  ),
@@ -740,7 +743,7 @@ module.exports = grammar({
740
743
  ),
741
744
 
742
745
  case_condition: ($) =>
743
- seq(optional(seq(kw("OR"), kw("WHEN"))), choice($._literal, $.boolean_literal)),
746
+ seq(optional(seq(kw("OR"), kw("WHEN"))), choice($._literal, $.boolean_literal, $.logical_expression, $.comparison_expression, $.unary_expression, $.object_access)),
744
747
 
745
748
  case_when_branch: ($) =>
746
749
  seq(kw("WHEN"), repeat1($.case_condition), kw("THEN"), $._statement_body),
@@ -854,9 +857,9 @@ module.exports = grammar({
854
857
 
855
858
  _return_action: ($) =>
856
859
  choice(
857
- seq(kw("ERROR"), optional($.identifier)),
860
+ seq(kw("ERROR"), optional($._return_value_expression)),
858
861
  kw("NO-APPLY"),
859
- $._expression
862
+ $._return_value_expression
860
863
  ),
861
864
 
862
865
  // PHRASES
@@ -867,8 +870,8 @@ module.exports = grammar({
867
870
  seq(
868
871
  $.assignment,
869
872
  kw("TO"),
870
- choice($.function_call, $._integer_literal, $.identifier),
871
- optional(seq(kw("BY"), $._integer_literal))
873
+ choice($.function_call, $._integer_literal, $.identifier, $.object_access),
874
+ optional(seq(kw("BY"), choice($._integer_literal, $.unary_expression)))
872
875
  ),
873
876
 
874
877
  // combo_box_phrase: ($) =>
@@ -1118,6 +1121,13 @@ module.exports = grammar({
1118
1121
  _list($._name, ",")
1119
1122
  ),
1120
1123
 
1124
+ in_frame_phrase: ($) =>
1125
+ seq(
1126
+ $.object_access,
1127
+ kw("IN"),
1128
+ $._frame
1129
+ ),
1130
+
1121
1131
  // widget_phrase: ($) =>
1122
1132
  // choice(
1123
1133
  // $._frame,
@@ -1386,13 +1396,16 @@ module.exports = grammar({
1386
1396
 
1387
1397
  event_definition: ($) =>
1388
1398
  seq(
1389
- $._define,
1390
- repeat($._tuning),
1391
- kw("EVENT"),
1392
- $.identifier,
1393
- optional(kw("SIGNATURE")),
1394
- kw("VOID"),
1395
- alias($.function_parameters, $.parameters),
1399
+ $._define,
1400
+ repeat($._tuning),
1401
+ kw("EVENT"),
1402
+ field("name", $.identifier),
1403
+ optional(
1404
+ choice(
1405
+ seq(optional(kw("SIGNATURE")), kw("VOID"), alias($.function_parameters, $.parameters)),
1406
+ seq(optional(kw("DELEGATE")), optional(kw("CLASS")), $._name),
1407
+ )
1408
+ ),
1396
1409
  $._terminator
1397
1410
  ),
1398
1411
 
@@ -1432,7 +1445,9 @@ module.exports = grammar({
1432
1445
  optional(
1433
1446
  choice(alias($._input_keyword, "INPUT"), alias($._output_keyword, "OUTPUT"), kw("INPUT-OUTPUT"), kw("RETURN"))
1434
1447
  ),
1435
- $._parameter_definition_option,
1448
+ choice(kw("PARAMETER"), kw("PARAM")),
1449
+ optional($._parameter_definition_option),
1450
+ optional(alias($._for_keyword, "FOR")),
1436
1451
  field("name", $.identifier),
1437
1452
  choice(
1438
1453
  seq($.type_tuning, repeat($.variable_tuning)),
@@ -1450,17 +1465,11 @@ module.exports = grammar({
1450
1465
  ),
1451
1466
 
1452
1467
  _parameter_definition_option: ($) =>
1453
- seq(
1454
- choice(kw("PARAMETER"), kw("PARAM")),
1455
- optional(
1456
- choice(
1457
- seq(kw("BUFFER"), field("buffer", $.identifier)),
1458
- kw("TABLE"),
1459
- kw("TABLE-HANDLE"),
1460
- seq(kw("DATASET"), optional(token.immediate(kw("-HANDLE"))))
1461
- )
1462
- ),
1463
- optional(alias($._for_keyword, "FOR")),
1468
+ choice(
1469
+ seq(kw("BUFFER"), field("buffer", $.identifier)),
1470
+ kw("TABLE"),
1471
+ kw("TABLE-HANDLE"),
1472
+ seq(kw("DATASET"), optional(token.immediate(kw("-HANDLE"))))
1464
1473
  ),
1465
1474
 
1466
1475
  property_definition: ($) =>
@@ -1471,7 +1480,7 @@ module.exports = grammar({
1471
1480
  field("name", $.identifier),
1472
1481
  $.type_tuning,
1473
1482
  repeat($._value_tuning),
1474
- choice(seq($.getter, $.setter), $._terminator)
1483
+ choice(repeat1(choice($.getter, $.setter)), $._terminator)
1475
1484
  ),
1476
1485
 
1477
1486
  query_definition: ($) =>
@@ -1652,8 +1661,18 @@ module.exports = grammar({
1652
1661
  $.return_type,
1653
1662
  optional($._extent),
1654
1663
  optional(alias($.function_parameters, $.parameters)),
1655
- optional(alias($.dot_body, $.body)),
1656
- $._block_terminator
1664
+ $._function_option,
1665
+ ),
1666
+
1667
+ _function_option: ($) =>
1668
+ choice(
1669
+ seq(
1670
+ optional(alias($.dot_body, $.body)),
1671
+ $._block_terminator),
1672
+ seq(
1673
+ choice(seq(kw("IN"), $.identifier), kw("FORWARD")),
1674
+ $._terminator
1675
+ )
1657
1676
  ),
1658
1677
 
1659
1678
  repeat_statement: ($) =>
@@ -1693,6 +1712,7 @@ module.exports = grammar({
1693
1712
  $._input_output_option,
1694
1713
  repeat($.stream_tuning),
1695
1714
  repeat($.stream_flag),
1715
+ optional($.constant),
1696
1716
  $._terminator
1697
1717
  ),
1698
1718
 
@@ -1827,6 +1847,14 @@ module.exports = grammar({
1827
1847
  $._terminator
1828
1848
  ),
1829
1849
 
1850
+ release_statement: ($) =>
1851
+ seq(
1852
+ kw("RELEASE"),
1853
+ $.identifier,
1854
+ optional(kw("NO-ERROR")),
1855
+ $._terminator
1856
+ ),
1857
+
1830
1858
  run_statement: ($) =>
1831
1859
  seq(
1832
1860
  kw("RUN"),
@@ -1939,13 +1967,22 @@ module.exports = grammar({
1939
1967
  ambiguous_expression: ($) => seq(kw("AMBIGUOUS"), $._name),
1940
1968
 
1941
1969
  temp_table_expression: ($) =>
1942
- seq(kw("TEMP-TABLE"), field("table", $.identifier)),
1970
+ seq(kw("TEMP-TABLE"), field("table", choice($.identifier, $.object_access))),
1971
+
1972
+ query_expression: ($) =>
1973
+ seq(kw("QUERY"), field("query", choice($.identifier, $.object_access))),
1974
+
1975
+ stream_expression: ($) =>
1976
+ seq(kw("STREAM"), field("stream", choice($.identifier, $.object_access))),
1977
+
1978
+ buffer_expression: ($) =>
1979
+ seq(kw("BUFFER"), field("buffer", choice($.identifier, $.object_access))),
1943
1980
 
1944
1981
  current_changed_expression: ($) => seq(kw("CURRENT-CHANGED"), $._name),
1945
1982
 
1946
1983
  locked_expression: ($) => seq(kw("LOCKED"), $._name),
1947
1984
 
1948
- // dataset_expression: ($) => seq(prec.left(kw("DATASET")), $._name),
1985
+ dataset_expression: ($) => seq(prec.left(kw("DATASET")), $._name),
1949
1986
 
1950
1987
  when_expression: ($) => seq(kw("WHEN"), $._expression),
1951
1988
 
@@ -2005,7 +2042,7 @@ module.exports = grammar({
2005
2042
  available_expression: ($) =>
2006
2043
  seq(
2007
2044
  choice(kw("AVAIL"), kw("AVAILABLE")),
2008
- $.identifier
2045
+ choice($.identifier, $.parenthesized_expression),
2009
2046
  ),
2010
2047
 
2011
2048
  new_expression: ($) =>
@@ -2030,6 +2067,30 @@ module.exports = grammar({
2030
2067
  )
2031
2068
  ),
2032
2069
 
2070
+ _return_value_expression: ($) =>
2071
+ choice(
2072
+ $.string_literal,
2073
+ $.number_literal,
2074
+ $.boolean_literal,
2075
+ $.null_expression,
2076
+ $.dataset_expression,
2077
+ $.temp_table_expression,
2078
+ $.query_expression,
2079
+ $.stream_expression,
2080
+ $.buffer_expression,
2081
+ $.identifier,
2082
+ $.function_call,
2083
+ $.object_access,
2084
+ $.member_access,
2085
+ $.qualified_name,
2086
+ $.array_access,
2087
+ $.ternary_expression,
2088
+ $.new_expression,
2089
+ $.parenthesized_expression,
2090
+ $.unary_expression,
2091
+ $._binary_expression
2092
+ ),
2093
+
2033
2094
  // SUPERTYPES
2034
2095
 
2035
2096
  _expression: ($) =>
@@ -2045,7 +2106,7 @@ module.exports = grammar({
2045
2106
  $.temp_table_expression,
2046
2107
  $.current_changed_expression,
2047
2108
  $.locked_expression,
2048
- // $.dataset_expression,
2109
+ $.dataset_expression,
2049
2110
  $.input_expression,
2050
2111
  $.can_find_expression,
2051
2112
  $.new_expression,
@@ -2060,6 +2121,7 @@ module.exports = grammar({
2060
2121
  $.member_access,
2061
2122
  $.array_access,
2062
2123
  $.function_call,
2124
+ $.in_frame_phrase,
2063
2125
 
2064
2126
  $._name,
2065
2127
  $.constant
@@ -2090,6 +2152,7 @@ module.exports = grammar({
2090
2152
  // $.interface_statement,
2091
2153
  $.on_statement,
2092
2154
  $.prompt_for_statement,
2155
+ $.release_statement,
2093
2156
  $.run_statement,
2094
2157
  $.enum_statement,
2095
2158
  $.abl_statement,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tree-sitter-abl",
3
- "version": "0.0.49",
3
+ "version": "0.0.50",
4
4
  "description": "ABL grammar for tree-sitter",
5
5
  "repository": "https://github.com/eglekaz/tree-sitter-abl",
6
6
  "keywords": [
package/parser.obj CHANGED
Binary file
package/scanner.obj CHANGED
Binary file