Skip to content

Commit 8e8ba06

Browse files
Improve C# syntax highlighting (#4118)
1 parent d27551d commit 8e8ba06

File tree

2 files changed

+87
-58
lines changed

2 files changed

+87
-58
lines changed

languages.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ language-server = { command = "OmniSharp", args = [ "--languageserver" ] }
235235

236236
[[grammar]]
237237
name = "c-sharp"
238-
source = { git = "https://github.com/tree-sitter/tree-sitter-c-sharp", rev = "9c494a503c8e2044bfffce57f70b480c01a82f03" }
238+
source = { git = "https://github.com/tree-sitter/tree-sitter-c-sharp", rev = "5b60f99545fea00a33bbfae5be956f684c4c69e2" }
239239

240240
[[language]]
241241
name = "go"

runtime/queries/c-sharp/highlights.scm

Lines changed: 86 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,23 @@
99
(member_access_expression
1010
name: (identifier) @function))
1111

12-
(invocation_expression
13-
(member_access_expression
14-
expression: (identifier) @variable))
15-
1612
(invocation_expression
1713
function: (conditional_access_expression
1814
(member_binding_expression
1915
name: (identifier) @function)))
2016

2117
(invocation_expression
22-
[(identifier) (qualified_name)] @function)
18+
[(identifier) (qualified_name)] @function)
19+
20+
(local_function_statement
21+
name: (identifier) @function)
2322

2423
; Generic Method invocation with generic type
2524
(invocation_expression
2625
function: (generic_name
27-
. (identifier) @function))
26+
. (identifier) @function))
2827

2928
;; Namespaces
30-
3129
(namespace_declaration
3230
name: [(identifier) (qualified_name)] @namespace)
3331

@@ -40,8 +38,11 @@
4038
(namespace_declaration name: (identifier) @type)
4139
(using_directive (_) @namespace)
4240
(constructor_declaration name: (identifier) @type)
41+
(destructor_declaration name: (identifier) @type)
4342
(object_creation_expression [(identifier) (qualified_name)] @type)
4443
(type_parameter_list (type_parameter) @type)
44+
(array_type (identifier) @type)
45+
(for_each_statement type: (identifier) @type)
4546

4647
[
4748
(implicit_type)
@@ -66,15 +67,15 @@
6667

6768
(object_creation_expression
6869
(generic_name
69-
(identifier) @type))
70+
(identifier) @type))
7071

7172
(property_declaration
7273
(generic_name
7374
(identifier) @type))
7475

7576
(_
7677
type: (generic_name
77-
(identifier) @type))
78+
(identifier) @type))
7879

7980
;; Enum
8081
(enum_member_declaration (identifier) @variable.other.member)
@@ -91,6 +92,7 @@
9192
(verbatim_string_literal)
9293
(interpolated_string_text)
9394
(interpolated_verbatim_string_text)
95+
(interpolation_format_clause)
9496
"\""
9597
"$\""
9698
"@$\""
@@ -150,6 +152,7 @@
150152
"%"
151153
"%="
152154
":"
155+
"::"
153156
".."
154157
"&="
155158
"->"
@@ -166,50 +169,27 @@
166169
] @punctuation.bracket
167170

168171
;; Keywords
169-
(modifier) @keyword
172+
(modifier) @keyword.storage.modifier
170173
(this_expression) @keyword
171174
(escape_sequence) @constant.character.escape
172175

173176
[
174177
"as"
175178
"base"
176-
"break"
177-
"case"
178179
"catch"
179180
"checked"
180-
"class"
181-
"continue"
182-
"default"
183-
"delegate"
184-
"do"
185-
"else"
186-
"enum"
187-
"event"
188-
"explicit"
189181
"finally"
190-
"for"
191-
"foreach"
192-
"goto"
193-
"if"
194-
"implicit"
195-
"interface"
196182
"is"
197183
"lock"
198-
"namespace"
199184
"operator"
200185
"params"
201-
"return"
202186
"sizeof"
203187
"stackalloc"
204-
"static"
205-
"struct"
206-
"switch"
207188
"throw"
208189
"try"
209190
"typeof"
210191
"unchecked"
211192
"using"
212-
"while"
213193
"new"
214194
"await"
215195
"in"
@@ -222,25 +202,63 @@
222202
"from"
223203
"where"
224204
"select"
225-
"record"
226205
"init"
227206
"with"
228207
"let"
229208
] @keyword
230209

231-
(nullable_directive) @keyword.directive
232-
(define_directive) @keyword.directive
233-
(undef_directive) @keyword.directive
234-
(if_directive) @keyword.directive
235-
(else_directive) @keyword.directive
236-
(elif_directive) @keyword.directive
237-
(endif_directive) @keyword.directive
238-
(region_directive) @keyword.directive
239-
(endregion_directive) @keyword.directive
240-
(error_directive) @keyword.directive
241-
(warning_directive) @keyword.directive
242-
(line_directive) @keyword.directive
243-
(pragma_directive) @keyword.directive
210+
[
211+
"class"
212+
"delegate"
213+
"enum"
214+
"event"
215+
"interface"
216+
"namespace"
217+
"struct"
218+
"record"
219+
] @keyword.storage.type
220+
221+
[
222+
"explicit"
223+
"implicit"
224+
"static"
225+
] @keyword.storage.modifier
226+
227+
[
228+
"for"
229+
"foreach"
230+
"do"
231+
"while"
232+
"break"
233+
"continue"
234+
] @keyword.control.repeat
235+
236+
[
237+
"goto"
238+
"if"
239+
"else"
240+
"switch"
241+
"case"
242+
"default"
243+
] @keyword.control.conditional
244+
245+
"return" @keyword.control.return
246+
247+
[
248+
(nullable_directive)
249+
(define_directive)
250+
(undef_directive)
251+
(if_directive)
252+
(else_directive)
253+
(elif_directive)
254+
(endif_directive)
255+
(region_directive)
256+
(endregion_directive)
257+
(error_directive)
258+
(warning_directive)
259+
(line_directive)
260+
(pragma_directive)
261+
] @keyword.directive
244262

245263
;; Linq
246264
(from_clause (identifier) @variable)
@@ -259,10 +277,16 @@
259277
(binary_expression [(identifier) (qualified_name)] @variable [(identifier) (qualified_name)] @variable)
260278
(binary_expression [(identifier) (qualified_name)]* @variable)
261279
(conditional_expression [(identifier) (qualified_name)] @variable)
280+
(conditional_access_expression [(identifier) (qualified_name)] @variable)
262281
(prefix_unary_expression [(identifier) (qualified_name)] @variable)
263282
(postfix_unary_expression [(identifier) (qualified_name)]* @variable)
264283
(assignment_expression [(identifier) (qualified_name)] @variable)
265284
(cast_expression [(identifier) (qualified_name)] @type [(identifier) (qualified_name)] @variable)
285+
(element_access_expression (identifier) @variable)
286+
(member_access_expression
287+
expression: ([(identifier) (qualified_name)] @type
288+
(#match? @type "^[A-Z]")))
289+
(member_access_expression [(identifier) (qualified_name)] @variable)
266290

267291
;; Class
268292
(base_list (identifier) @type)
@@ -278,7 +302,6 @@
278302
name: (identifier) @variable)
279303

280304
;; Delegate
281-
282305
(delegate_declaration (identifier) @type)
283306

284307
;; Lambda
@@ -296,11 +319,11 @@
296319

297320
(parameter_list
298321
(parameter
299-
name: (identifier) @parameter))
322+
name: (identifier) @parameter))
300323

301324
(parameter_list
302325
(parameter
303-
type: [(identifier) (qualified_name)] @type))
326+
type: [(identifier) (qualified_name)] @type))
304327

305328
;; Typeof
306329
(type_of_expression [(identifier) (qualified_name)] @type)
@@ -315,7 +338,7 @@
315338

316339
;; Type
317340
(generic_name (identifier) @type)
318-
(type_parameter [(identifier) (qualified_name)] @variable.parameter)
341+
(type_parameter [(identifier) (qualified_name)] @type)
319342
(type_argument_list [(identifier) (qualified_name)] @type)
320343

321344
;; Type constraints
@@ -333,15 +356,21 @@
333356
;; Lock statement
334357
(lock_statement (identifier) @variable)
335358

359+
;; Declaration expression
360+
(declaration_expression
361+
type: (identifier) @type
362+
name: (identifier) @variable)
363+
336364
;; Rest
337-
(member_access_expression) @variable
338-
(element_access_expression (identifier) @variable)
339365
(argument (identifier) @variable)
366+
(name_colon (identifier) @variable)
367+
(if_statement (identifier) @variable)
340368
(for_statement (identifier) @variable)
341369
(for_each_statement (identifier) @variable)
342370
(expression_statement (identifier) @variable)
343-
(member_access_expression expression: (identifier) @variable)
344-
(member_access_expression name: (identifier) @variable)
345-
(conditional_access_expression [(identifier) (qualified_name)] @variable)
371+
(array_rank_specifier (identifier) @variable)
372+
(equals_value_clause (identifier) @variable)
373+
(interpolation (identifier) @variable)
374+
(cast_expression (identifier) @variable)
346375
((identifier) @comment.unused
347-
(#eq? @comment.unused "_"))
376+
(#eq? @comment.unused "_"))

0 commit comments

Comments
 (0)