From 07b78dc92515f42e6660d893e53230a51b3ac20f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jostein=20Kj=C3=B8nigsen?= Date: Tue, 29 Apr 2025 14:23:56 +0200 Subject: [PATCH] Improve csharp-ts-mode fontification (bug#78130) Improves: - fontification of generic types with namespace-prefixes - function-call parameters - variable use in string interpolation - implicitly typed parameters in lambda-expressions - index-expressions - variables used in return-statements - variables used in binary expressions * lisp/progmodes/csharp-mode.el: (csharp-ts-mode--font-lock-settings): Improve queries. (cherry picked from commit 6c35ae082770c1bb875e870f83c3eff4a3197283) --- lisp/progmodes/csharp-mode.el | 62 +++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index bba7cf681e9..bec94eed35c 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -777,15 +777,49 @@ compilation and evaluation time conflicts." :feature 'expression '((conditional_expression (identifier) @font-lock-variable-use-face) (postfix_unary_expression (identifier)* @font-lock-variable-use-face) - (initializer_expression (assignment_expression left: (identifier) @font-lock-variable-use-face)) + (initializer_expression (assignment_expression left: (identifier) @font-lock-property-use-face)) (interpolated_string_expression (interpolation (identifier) @font-lock-variable-use-face)) (interpolated_string_expression (interpolation (member_access_expression - expression: (identifier) @font-lock-variable-use-face - name: (identifier) @font-lock-property-use-face)))) + name: (identifier) @font-lock-property-use-face))) + ((interpolated_string_expression + (interpolation + (member_access_expression + expression: (identifier) @font-lock-variable-use-face))) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((element_access_expression (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((element_access_expression (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((return_statement (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((return_statement (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((is_pattern_expression + expression: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((is_pattern_expression + expression: (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (is_pattern_expression + expression: (member_access_expression + name: (identifier) @font-lock-property-use-face)) + (is_pattern_expression + pattern: (constant_pattern (identifier) @font-lock-type-face)) + (is_pattern_expression + pattern: (constant_pattern (member_access_expression + name: (identifier) @font-lock-type-face))) + ((binary_expression + left: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((binary_expression + right: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face))) :language 'c-sharp :feature 'bracket @@ -869,6 +903,8 @@ compilation and evaluation time conflicts." (identifier) @font-lock-type-face)) (array_type (identifier) @font-lock-type-face) + (qualified_name + name: (generic_name (identifier) @font-lock-type-face)) (cast_expression (identifier) @font-lock-type-face) (cast_expression (generic_name (identifier) @font-lock-type-face)) ["operator"] @font-lock-type-face @@ -941,6 +977,8 @@ compilation and evaluation time conflicts." (identifier) @font-lock-variable-name-face)) (variable_declaration (identifier) @font-lock-type-face) + (variable_declaration (qualified_name + name: (generic_name (identifier) @font-lock-type-face))) (variable_declaration (generic_name (identifier) @font-lock-type-face)) (variable_declarator (identifier) @font-lock-variable-name-face) @@ -949,6 +987,8 @@ compilation and evaluation time conflicts." (parameter name: (identifier) @font-lock-variable-name-face) (lambda_expression (identifier) @font-lock-variable-name-face) + (lambda_expression + parameters: (implicit_parameter) @font-lock-variable-name-face) (declaration_expression type: (identifier) @font-lock-type-face) (declaration_expression name: (identifier) @font-lock-variable-name-face)) @@ -956,15 +996,25 @@ compilation and evaluation time conflicts." :language 'c-sharp :feature 'function '((invocation_expression + function: (identifier) @font-lock-function-call-face) + (invocation_expression function: (member_access_expression name: (identifier) @font-lock-function-call-face)) - (invocation_expression - function: (identifier) @font-lock-function-call-face) (invocation_expression function: (member_access_expression name: (generic_name (identifier) @font-lock-function-call-face))) (invocation_expression - function: (generic_name (identifier) @font-lock-function-call-face))) + function: (generic_name (identifier) @font-lock-function-call-face)) + ((invocation_expression + function: (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (argument (identifier) @font-lock-variable-use-face) + ((argument (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (argument (member_access_expression + name: (identifier) @font-lock-property-use-face))) :language 'c-sharp :feature 'escape-sequence -- 2.39.5