@willbooster/tree-sitter-c-sharp 11.0.0 → 13.0.0

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.
package/grammar.js CHANGED
@@ -53,6 +53,48 @@ module.exports = grammar({
53
53
  name: 'c_sharp',
54
54
 
55
55
  conflicts: ($) => [
56
+ [$._simple_name, $._expression_simple_name, $._pattern_simple_identifier_name, $._ambiguous_cast_qualified_name],
57
+ [$._expression_simple_name, $._ambiguous_cast_qualified_name],
58
+ [$._simple_name, $._expression_simple_name, $._ambiguous_cast_qualified_name],
59
+ [$.parameter, $._expression_simple_name, $._ambiguous_cast_name],
60
+ [$.parameter, $._simple_name, $._expression_simple_name, $._ambiguous_cast_name],
61
+ [$._expression_simple_name, $._ambiguous_cast_name],
62
+ [$._simple_name, $._expression_simple_name, $._ambiguous_cast_name],
63
+ [$._simple_name, $.generic_name, $._expression_generic_name, $._pattern_simple_identifier_name],
64
+ [$._expression_simple_name, $.generic_name, $._expression_generic_name, $._pattern_simple_identifier_name],
65
+ [
66
+ $._simple_name,
67
+ $._expression_simple_name,
68
+ $.generic_name,
69
+ $._expression_generic_name,
70
+ $._pattern_simple_identifier_name,
71
+ ],
72
+ [$._expression_simple_name, $._pattern_simple_identifier_name],
73
+ [$._simple_name, $._expression_simple_name, $._pattern_simple_identifier_name],
74
+ [$.generic_name, $._expression_generic_name, $._pattern_simple_identifier_name],
75
+ [$._simple_name, $.generic_name, $._expression_generic_name],
76
+ [$._expression_simple_name, $._expression_generic_name],
77
+ [$._simple_name, $._expression_simple_name, $.generic_name, $._expression_generic_name],
78
+ [$._expression_simple_name, $.subpattern],
79
+ [$._expression_simple_name, $.parameter],
80
+ [$._simple_name, $._expression_simple_name, $.parameter],
81
+
82
+ [$.type_argument_list, $._expression_type_argument_list],
83
+ [$._definite_expression_argument_type, $.type],
84
+ [$._definite_expression_pointer_type, $._pointer_base_type],
85
+ [$._name, $._nongeneric_expression_argument_type],
86
+ [$._name, $._other_expression_pointer_type],
87
+ [$._nongeneric_expression_argument_type, $.type],
88
+ [$._other_expression_pointer_type, $._pointer_base_type],
89
+ [$._simple_name, $._nongeneric_expression_argument_type],
90
+ [$._simple_name, $._nongeneric_expression_qualified_name],
91
+ [$._simple_name, $._other_expression_pointer_type],
92
+ [$.type_argument_list, $._method_expression_arguments],
93
+ [$._ambiguous_expression_arguments, $._method_expression_arguments],
94
+ [$._primary_no_conditional_access_expression, $._range_cast_type, $._definite_cast_name],
95
+ [$._name, $._primary_no_conditional_access_expression, $._range_cast_type, $._definite_cast_name],
96
+ [$._simple_name, $._expression_simple_name],
97
+ [$.generic_name, $._expression_simple_name, $._expression_generic_name],
56
98
  [$.list_pattern],
57
99
  [$._conditional_binding_receiver, $._binding_generic_suppression_expression],
58
100
  [$._member_conditional_binding_receiver, $._member_binding_generic_suppression_expression],
@@ -90,20 +132,14 @@ module.exports = grammar({
90
132
  [$._definite_cast_type, $._range_cast_type],
91
133
  [$.type, $._definite_cast_type, $._range_cast_type],
92
134
  [$._pattern_type, $._definite_cast_type, $._range_cast_type],
93
- [$._definite_cast_name, $._range_cast_type],
94
- [$._name, $._definite_cast_name, $._range_cast_type],
95
135
  [$.array_rank_specifier, $._omitted_array_rank_specifier],
96
136
  [$._pattern_parenthesized_expression, $.constant_pattern, $.expression],
97
137
  [$._pattern_parenthesized_expression, $.constant_pattern],
98
- [$._simple_name, $._pattern_simple_identifier_name, $._ambiguous_cast_qualified_name],
99
- [$._simple_name, $._ambiguous_cast_qualified_name],
100
138
  [$._simple_name, $._definite_cast_qualified_name],
101
139
  [$.positional_pattern_clause, $._untyped_positional_pattern_clause],
102
140
  [$._parenthesized_pattern_with_designation, $.subpattern],
103
141
  [$._pattern_type, $._definite_cast_type],
104
142
  [$.type, $._definite_cast_type],
105
- [$.parameter, $._simple_name, $._ambiguous_cast_name],
106
- [$._simple_name, $._ambiguous_cast_name],
107
143
  [$._simple_name, $._definite_cast_name],
108
144
  [$._name, $._definite_cast_name],
109
145
  [$._object_initializer_expression, $.initializer_expression],
@@ -132,10 +168,7 @@ module.exports = grammar({
132
168
  [$._pattern_type, $._pointer_base_type],
133
169
  [$._pattern_member_access_expression, $._pattern_generic_member_expression],
134
170
  [$._simple_name, $._pattern_simple_generic_name],
135
- [$._simple_name, $.generic_name, $._pattern_simple_identifier_name],
136
171
  [$._simple_name, $._pattern_simple_identifier_name],
137
- [$.generic_name, $._pattern_simple_identifier_name],
138
- [$._pattern_non_name_member_access_expression, $.member_access_expression],
139
172
  [$._pattern_unary_expression, $._unary_expression],
140
173
  [$._pattern_primary_expression, $._primary_expression],
141
174
  [$._pattern_primary_expression, $._primary_no_conditional_access_expression],
@@ -181,7 +214,6 @@ module.exports = grammar({
181
214
  [$.modifier, $._constructor_declaration_initializer, $._reserved_identifier],
182
215
  [$._simple_name, $.generic_name],
183
216
  [$._simple_name, $.type_parameter],
184
- [$._simple_name, $.subpattern],
185
217
  [$.tuple_element, $.type_pattern],
186
218
  [$.type_pattern, $.declaration_pattern],
187
219
  [$.tuple_element, $.using_variable_declarator],
@@ -194,7 +226,6 @@ module.exports = grammar({
194
226
  [$.type, $._array_base_type, $.array_creation_expression],
195
227
  [$.type, $.array_creation_expression],
196
228
  [$.type, $._pointer_base_type],
197
- [$.qualified_name, $.member_access_expression],
198
229
  [$.qualified_name, $.explicit_interface_specifier],
199
230
  [$._array_base_type, $.stackalloc_expression],
200
231
  [$.constant_pattern, $._expression_statement_expression],
@@ -314,6 +345,8 @@ module.exports = grammar({
314
345
  sym('_interpolation_format_colon'),
315
346
  sym('_pragma_boundary'),
316
347
  sym('_pragma_text'),
348
+ sym('_expression_generic_end'),
349
+ sym('_definite_expression_generic_end'),
317
350
  ],
318
351
 
319
352
  extras: ($) => [
@@ -347,6 +380,7 @@ module.exports = grammar({
347
380
 
348
381
  precedences: ($) => [
349
382
  [$._anonymous_object_member_declarator, $._simple_name],
383
+ [$._anonymous_object_member_declarator, $._expression_simple_name],
350
384
  [$.block, $.initializer_expression],
351
385
  ],
352
386
 
@@ -361,6 +395,11 @@ module.exports = grammar({
361
395
  $._ambiguous_cast_type,
362
396
  $._definite_cast_type,
363
397
  $._range_cast_type,
398
+ $._definite_expression_type_argument,
399
+ $._ambiguous_expression_type_argument,
400
+ $._other_expression_type_argument,
401
+ $._nongeneric_expression_type_argument,
402
+ $._method_expression_type_argument,
364
403
  $._is_pattern,
365
404
  $._nonconstant_pattern,
366
405
  ],
@@ -579,7 +618,12 @@ module.exports = grammar({
579
618
  )
580
619
  ),
581
620
 
582
- type_parameter_list: ($) => seq('<', commaSep1($.type_parameter), '>'),
621
+ type_parameter_list: ($) =>
622
+ seq(
623
+ '<',
624
+ commaSep1($.type_parameter),
625
+ choice('>', alias(sym('_expression_generic_end'), '>'), alias(sym('_definite_expression_generic_end'), '>'))
626
+ ),
583
627
 
584
628
  type_parameter: ($) => seq(repeat($._attribute_list), optional(choice('in', 'out')), field('name', $.identifier)),
585
629
 
@@ -980,7 +1024,149 @@ module.exports = grammar({
980
1024
 
981
1025
  generic_name: ($) => prec.dynamic(1, seq($.identifier, $.type_argument_list)),
982
1026
 
983
- type_argument_list: ($) => seq('<', choice(repeat(','), commaSep1($.type)), '>'),
1027
+ type_argument_list: ($) =>
1028
+ seq(
1029
+ '<',
1030
+ choice(repeat(','), commaSep1($.type)),
1031
+ choice('>', alias(sym('_expression_generic_end'), '>'), alias(sym('_definite_expression_generic_end'), '>'))
1032
+ ),
1033
+
1034
+ _expression_simple_name: ($) => choice($.identifier, alias($._expression_generic_name, $.generic_name)),
1035
+
1036
+ _expression_generic_name: ($) =>
1037
+ prec.dynamic(1, seq($.identifier, alias($._expression_type_argument_list, $.type_argument_list))),
1038
+
1039
+ _expression_type_argument_list: ($) =>
1040
+ seq(
1041
+ '<',
1042
+ choice(
1043
+ seq(choice(repeat(','), commaSep1($.type)), alias(sym('_expression_generic_end'), '>')),
1044
+ seq(repeat(','), alias(sym('_definite_expression_generic_end'), '>')),
1045
+ seq(
1046
+ repeat(seq(alias($._other_expression_type_argument, $.type), ',')),
1047
+ choice(
1048
+ alias($._definite_expression_type_argument, $.type),
1049
+ seq(alias($._ambiguous_expression_type_argument, $.type), ',', $.type)
1050
+ ),
1051
+ repeat(seq(',', $.type)),
1052
+ alias(sym('_definite_expression_generic_end'), '>')
1053
+ )
1054
+ )
1055
+ ),
1056
+
1057
+ _definite_expression_type_argument: ($) => $._definite_expression_argument_type,
1058
+
1059
+ _ambiguous_expression_type_argument: ($) => $._ambiguous_expression_argument_type,
1060
+
1061
+ _other_expression_type_argument: ($) => $._other_expression_argument_type,
1062
+
1063
+ _nongeneric_expression_type_argument: ($) => $._nongeneric_expression_argument_type,
1064
+
1065
+ _method_expression_type_argument: ($) => $._method_expression_argument_type,
1066
+
1067
+ _definite_expression_argument_type: ($) =>
1068
+ choice(
1069
+ $.predefined_type,
1070
+ $.nullable_type,
1071
+ $.function_pointer_type,
1072
+ alias($._omitted_cast_array_type, $.array_type),
1073
+ alias($._definite_expression_pointer_type, $.pointer_type)
1074
+ ),
1075
+
1076
+ _definite_expression_pointer_type: ($) =>
1077
+ seq(
1078
+ field(
1079
+ 'type',
1080
+ choice(
1081
+ $.predefined_type,
1082
+ $.nullable_type,
1083
+ $.function_pointer_type,
1084
+ alias($._definite_expression_pointer_type, $.pointer_type),
1085
+ alias($._method_expression_generic_name, $.generic_name),
1086
+ alias($._method_expression_qualified_name, $.qualified_name)
1087
+ )
1088
+ ),
1089
+ '*'
1090
+ ),
1091
+
1092
+ _ambiguous_expression_argument_type: ($) =>
1093
+ choice(
1094
+ alias($._ambiguous_expression_generic_name, $.generic_name),
1095
+ alias($._ambiguous_expression_qualified_name, $.qualified_name)
1096
+ ),
1097
+
1098
+ _ambiguous_expression_generic_name: ($) =>
1099
+ prec.dynamic(1, seq($.identifier, alias($._ambiguous_expression_arguments, $.type_argument_list))),
1100
+
1101
+ _ambiguous_expression_arguments: ($) =>
1102
+ seq(
1103
+ '<',
1104
+ commaSep1(alias($._nongeneric_expression_type_argument, $.type)),
1105
+ choice('>', alias(sym('_expression_generic_end'), '>'), alias(sym('_definite_expression_generic_end'), '>'))
1106
+ ),
1107
+
1108
+ _ambiguous_expression_qualified_name: ($) =>
1109
+ seq(field('qualifier', $._name), '.', field('name', alias($._ambiguous_expression_generic_name, $.generic_name))),
1110
+
1111
+ _other_expression_argument_type: ($) =>
1112
+ choice($._nongeneric_expression_argument_type, $._method_expression_argument_type),
1113
+
1114
+ _nongeneric_expression_argument_type: ($) =>
1115
+ choice(
1116
+ $.identifier,
1117
+ alias($._nongeneric_expression_qualified_name, $.qualified_name),
1118
+ $.alias_qualified_name,
1119
+ $.tuple_type,
1120
+ alias($._other_expression_pointer_type, $.pointer_type)
1121
+ ),
1122
+
1123
+ _method_expression_argument_type: ($) =>
1124
+ choice(
1125
+ alias($._method_expression_generic_name, $.generic_name),
1126
+ alias($._method_expression_qualified_name, $.qualified_name)
1127
+ ),
1128
+
1129
+ _nongeneric_expression_qualified_name: ($) => seq(field('qualifier', $._name), '.', field('name', $.identifier)),
1130
+
1131
+ _method_expression_generic_name: ($) =>
1132
+ prec.dynamic(1, seq($.identifier, alias($._method_expression_arguments, $.type_argument_list))),
1133
+
1134
+ _method_expression_arguments: ($) =>
1135
+ seq(
1136
+ '<',
1137
+ choice(
1138
+ repeat(','),
1139
+ seq(
1140
+ repeat(seq(alias($._nongeneric_expression_type_argument, $.type), ',')),
1141
+ choice(
1142
+ alias($._definite_expression_type_argument, $.type),
1143
+ alias($._ambiguous_expression_type_argument, $.type),
1144
+ alias($._method_expression_type_argument, $.type)
1145
+ ),
1146
+ repeat(seq(',', $.type))
1147
+ )
1148
+ ),
1149
+ choice('>', alias(sym('_expression_generic_end'), '>'), alias(sym('_definite_expression_generic_end'), '>'))
1150
+ ),
1151
+
1152
+ _method_expression_qualified_name: ($) =>
1153
+ seq(field('qualifier', $._name), '.', field('name', alias($._method_expression_generic_name, $.generic_name))),
1154
+
1155
+ _other_expression_pointer_type: ($) =>
1156
+ seq(
1157
+ field(
1158
+ 'type',
1159
+ choice(
1160
+ $.identifier,
1161
+ alias($._nongeneric_expression_qualified_name, $.qualified_name),
1162
+ $.alias_qualified_name,
1163
+ $.tuple_type,
1164
+ $._ambiguous_expression_argument_type,
1165
+ alias($._other_expression_pointer_type, $.pointer_type)
1166
+ )
1167
+ ),
1168
+ '*'
1169
+ ),
984
1170
 
985
1171
  type: ($) => typeAlternatives($),
986
1172
 
@@ -1688,11 +1874,15 @@ module.exports = grammar({
1688
1874
  ),
1689
1875
 
1690
1876
  _primary_no_conditional_access_expression: ($) =>
1691
- primaryAtoms($, { name: $._simple_name, member: $.member_access_expression, collection: true }),
1877
+ primaryAtoms($, {
1878
+ name: choice($._expression_simple_name, $.alias_qualified_name),
1879
+ member: $.member_access_expression,
1880
+ collection: true,
1881
+ }),
1692
1882
 
1693
1883
  _conditional_access_receiver: ($) =>
1694
1884
  primaryAtoms($, {
1695
- name: $._simple_name,
1885
+ name: choice($._expression_simple_name, $.alias_qualified_name),
1696
1886
  member: $.member_access_expression,
1697
1887
  collection: true,
1698
1888
  element: $.element_access_expression,
@@ -1705,7 +1895,7 @@ module.exports = grammar({
1705
1895
 
1706
1896
  _definite_conditional_access_receiver: ($) =>
1707
1897
  primaryAtoms($, {
1708
- name: $._simple_name,
1898
+ name: choice($._expression_simple_name, $.alias_qualified_name),
1709
1899
  member: $.member_access_expression,
1710
1900
  collection: true,
1711
1901
  element: $.element_access_expression,
@@ -2206,7 +2396,7 @@ module.exports = grammar({
2206
2396
 
2207
2397
  member_access_expression: ($) => memberAccessExpression($, choice($._postfix_receiver, $.predefined_type, $._name)),
2208
2398
 
2209
- member_binding_expression: ($) => seq('.', field('name', $._simple_name)),
2399
+ member_binding_expression: ($) => seq('.', field('name', $._expression_simple_name)),
2210
2400
 
2211
2401
  object_creation_expression: ($) =>
2212
2402
  prec.right(
@@ -2916,13 +3106,13 @@ function conditionalDirective(command, $, ...content) {
2916
3106
  }
2917
3107
 
2918
3108
  /**
2919
- * @param {import('@willbooster/web-tree-sitter/dsl').GrammarSymbols<'_simple_name'>} $
3109
+ * @param {import('@willbooster/web-tree-sitter/dsl').GrammarSymbols<'_expression_simple_name'>} $
2920
3110
  * @param {import('@willbooster/web-tree-sitter/dsl').Rule} receiver
2921
3111
  * @param {import('@willbooster/web-tree-sitter/dsl').Rule} [name]
2922
3112
  * @param {import('@willbooster/web-tree-sitter/dsl').RuleOrLiteral} [operator]
2923
3113
  * @returns {import('@willbooster/web-tree-sitter/dsl').Rule}
2924
3114
  */
2925
- function memberAccessExpression($, receiver, name = $._simple_name, operator = choice('.', '->')) {
3115
+ function memberAccessExpression($, receiver, name = $._expression_simple_name, operator = choice('.', '->')) {
2926
3116
  return prec(PREC.DOT, seq(field('expression', receiver), operator, field('name', name)));
2927
3117
  }
2928
3118
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@willbooster/tree-sitter-c-sharp",
3
- "version": "11.0.0",
3
+ "version": "13.0.0",
4
4
  "description": "C# grammar for tree-sitter",
5
5
  "keywords": [
6
6
  "incremental",
@@ -2,8 +2,8 @@
2
2
 
3
3
  ;; Methods
4
4
 
5
- (method_declaration name: (identifier) @function)
6
- (method_signature name: (identifier) @function)
5
+ (method_declaration name: (identifier) @function.method)
6
+ (method_signature name: (identifier) @function.method)
7
7
  (local_function_statement name: (identifier) @function)
8
8
 
9
9
  ;; Types
@@ -208,9 +208,38 @@
208
208
 
209
209
  (type_parameter_constraints_clause (identifier) @property.definition)
210
210
 
211
- ;; Method calls
211
+ ;; Members
212
212
 
213
- (invocation_expression (member_access_expression name: (identifier) @function))
213
+ [
214
+ (field_declaration (variable_declaration (variable_declarator name: (identifier) @variable.member)))
215
+ (event_field_declaration (variable_declaration (variable_declarator name: (identifier) @variable.member)))
216
+ (property_declaration name: (identifier) @variable.member)
217
+ (event_declaration name: (identifier) @variable.member)
218
+ (object_creation_expression
219
+ initializer: (initializer_expression (assignment_expression left: (identifier) @variable.member)))
220
+ (implicit_object_creation_expression
221
+ (initializer_expression (assignment_expression left: (identifier) @variable.member)))
222
+ (assignment_expression
223
+ right: (initializer_expression (assignment_expression left: (identifier) @variable.member)))
224
+ (anonymous_object_creation_expression (identifier) @variable.member . "=")
225
+ (with_initializer . (identifier) @variable.member)
226
+ (member_access_expression name: (identifier) @variable.member)
227
+ (member_access_expression name: (generic_name (identifier) @variable.member))
228
+ (member_binding_expression name: (identifier) @variable.member)
229
+ (member_binding_expression name: (generic_name (identifier) @variable.member))
230
+ ]
231
+
232
+ ;; Calls
233
+
234
+ (invocation_expression
235
+ function: [
236
+ (identifier) @function.call
237
+ (generic_name (identifier) @function.call)
238
+ (member_access_expression name: (identifier) @function.method.call)
239
+ (member_access_expression name: (generic_name (identifier) @function.method.call))
240
+ (member_binding_expression name: (identifier) @function.method.call)
241
+ (member_binding_expression name: (generic_name (identifier) @function.method.call))
242
+ ])
214
243
 
215
244
  ["#:sdk" "#:package" "#:property" "#:project" "#:ref" "#:include" "#:exclude"] @keyword.directive
216
245
  (file_directive_name) @property
@@ -93,6 +93,10 @@
93
93
  "type": "expression",
94
94
  "named": true,
95
95
  "subtypes": [
96
+ {
97
+ "type": "alias_qualified_name",
98
+ "named": true
99
+ },
96
100
  {
97
101
  "type": "anonymous_method_expression",
98
102
  "named": true
@@ -970,6 +974,10 @@
970
974
  "multiple": false,
971
975
  "required": true,
972
976
  "types": [
977
+ {
978
+ "type": "alias_qualified_name",
979
+ "named": true
980
+ },
973
981
  {
974
982
  "type": "anonymous_method_expression",
975
983
  "named": true
@@ -1289,6 +1297,10 @@
1289
1297
  "multiple": false,
1290
1298
  "required": false,
1291
1299
  "types": [
1300
+ {
1301
+ "type": "alias_qualified_name",
1302
+ "named": true
1303
+ },
1292
1304
  {
1293
1305
  "type": "anonymous_method_expression",
1294
1306
  "named": true
@@ -1701,6 +1713,10 @@
1701
1713
  "multiple": false,
1702
1714
  "required": true,
1703
1715
  "types": [
1716
+ {
1717
+ "type": "alias_qualified_name",
1718
+ "named": true
1719
+ },
1704
1720
  {
1705
1721
  "type": "anonymous_method_expression",
1706
1722
  "named": true
@@ -2133,6 +2149,10 @@
2133
2149
  "multiple": false,
2134
2150
  "required": true,
2135
2151
  "types": [
2152
+ {
2153
+ "type": "alias_qualified_name",
2154
+ "named": true
2155
+ },
2136
2156
  {
2137
2157
  "type": "anonymous_method_expression",
2138
2158
  "named": true
@@ -2959,6 +2979,10 @@
2959
2979
  "multiple": false,
2960
2980
  "required": true,
2961
2981
  "types": [
2982
+ {
2983
+ "type": "alias_qualified_name",
2984
+ "named": true
2985
+ },
2962
2986
  {
2963
2987
  "type": "anonymous_method_expression",
2964
2988
  "named": true
@@ -3367,6 +3391,10 @@
3367
3391
  "multiple": false,
3368
3392
  "required": false,
3369
3393
  "types": [
3394
+ {
3395
+ "type": "alias_qualified_name",
3396
+ "named": true
3397
+ },
3370
3398
  {
3371
3399
  "type": "anonymous_method_expression",
3372
3400
  "named": true
@@ -5894,6 +5922,10 @@
5894
5922
  "multiple": false,
5895
5923
  "required": false,
5896
5924
  "types": [
5925
+ {
5926
+ "type": "alias_qualified_name",
5927
+ "named": true
5928
+ },
5897
5929
  {
5898
5930
  "type": "anonymous_method_expression",
5899
5931
  "named": true
@@ -6025,6 +6057,10 @@
6025
6057
  "multiple": false,
6026
6058
  "required": false,
6027
6059
  "types": [
6060
+ {
6061
+ "type": "alias_qualified_name",
6062
+ "named": true
6063
+ },
6028
6064
  {
6029
6065
  "type": "anonymous_method_expression",
6030
6066
  "named": true
Binary file
package/tree-sitter.json CHANGED
@@ -17,6 +17,7 @@
17
17
  ],
18
18
  "injection-regex": "cs",
19
19
  "external-files": [
20
+ "src/genericExpressions.h",
20
21
  "src/identifierCharacters.h",
21
22
  "src/nullableRank.h",
22
23
  "src/nullableTypes.h",
@@ -29,7 +30,7 @@
29
30
  }
30
31
  ],
31
32
  "metadata": {
32
- "version": "11.0.0",
33
+ "version": "13.0.0",
33
34
  "license": "MIT",
34
35
  "description": "C# grammar for tree-sitter",
35
36
  "authors": [