From d474d7247ec7c51d761ea629ca107464a0fa7a2f Mon Sep 17 00:00:00 2001 From: Randy Taylor Date: Sun, 13 Nov 2022 22:06:33 -0500 Subject: [PATCH] Utilize new font-lock faces for C/C++ and Python tree-sitter use * lisp/progmodes/c-ts-mode.el (c-ts-mode--font-lock-settings): Use new escape, number, property, operator, bracket, and delimiter font-lock faces. Simplify type matching. (c-ts-mode--base-mode): Add them to the feature list. (c-ts-mode): Fix typo. * lisp/progmodes/python.el (python--treesit-settings): Use new number, property, operator, bracket, and delimiter font-lock faces. (python-mode): Add them to the feature list. --- lisp/progmodes/c-ts-mode.el | 72 ++++++++++++++++--------------------- lisp/progmodes/python.el | 41 +++++++++++++++++---- 2 files changed, 65 insertions(+), 48 deletions(-) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index bb0db0e1e7..1ee5f45d35 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -231,18 +231,17 @@ c-ts-mode--font-lock-settings :language mode :override t :feature 'operator - `([,@c-ts-mode--operators] @font-lock-builtin-face) + `([,@c-ts-mode--operators] @font-lock-operator-face) :language mode :override t :feature 'string `((string_literal) @font-lock-string-face ((string_literal)) @contextual - (system_lib_string) @font-lock-string-face - (escape_sequence) @font-lock-string-face) + (system_lib_string) @font-lock-string-face) :language mode :override t :feature 'literal - `((number_literal) @font-lock-constant-face + `((number_literal) @font-lock-number-face (char_literal) @font-lock-constant-face) :language mode :override t @@ -252,30 +251,13 @@ c-ts-mode--font-lock-settings '((type_qualifier) @font-lock-type-face (qualified_identifier - scope: (namespace_identifier) @font-lock-type-face) - - (operator_cast) type: (type_identifier) @font-lock-type-face))) + scope: (namespace_identifier) @font-lock-type-face)))) :language mode :override t :feature 'definition `((declaration declarator: (identifier) @font-lock-variable-name-face) - (declaration - type: (type_identifier) @font-lock-type-face) - - (field_declaration - declarator: (field_identifier) @font-lock-variable-name-face) - - (field_declaration - type: (type_identifier) @font-lock-type-face) - - (parameter_declaration - type: (type_identifier) @font-lock-type-face) - - (function_definition - type: (type_identifier) @font-lock-type-face) - (function_declarator declarator: (identifier) @font-lock-function-name-face) @@ -285,17 +267,8 @@ c-ts-mode--font-lock-settings (init_declarator declarator: (identifier) @font-lock-variable-name-face) - (struct_specifier - name: (type_identifier) @font-lock-type-face) - (sized_type_specifier) @font-lock-type-face - (enum_specifier - name: (type_identifier) @font-lock-type-face) - - (enumerator - name: (identifier) @font-lock-variable-name-face) - (parameter_declaration type: (_) @font-lock-type-face declarator: (identifier) @font-lock-variable-name-face) @@ -303,8 +276,7 @@ c-ts-mode--font-lock-settings (pointer_declarator declarator: (identifier) @font-lock-variable-name-face) - (pointer_declarator - declarator: (field_identifier) @font-lock-variable-name-face)) + ((type_identifier) @font-lock-type-face)) :language mode :override t :feature 'expression @@ -315,11 +287,7 @@ c-ts-mode--font-lock-settings function: (identifier) @font-lock-function-name-face) (field_expression - field: (field_identifier) @font-lock-variable-name-face) - - (field_expression - argument: (identifier) @font-lock-variable-name-face - field: (field_identifier) @font-lock-variable-name-face) + argument: (identifier) @font-lock-variable-name-face) (pointer_expression argument: (identifier) @font-lock-variable-name-face)) @@ -332,7 +300,26 @@ c-ts-mode--font-lock-settings :language mode :override t :feature 'error - '((ERROR) @font-lock-warning-face))) + '((ERROR) @font-lock-warning-face) + :feature 'escape-sequence + :language mode + :override t + '((escape_sequence) @font-lock-escape-face) + :language mode + :override t + :feature 'property + '((field_identifier) @font-lock-property-face + (enumerator + name: (identifier) @font-lock-property-face)) + :language mode + :override t + :feature 'bracket + '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) + :language mode + :override t + :feature 'delimiter + '((["," ":" ";"]) @font-lock-delimiter-face) + )) (defun c-ts-mode--imenu-1 (node) "Helper for `c-ts-mode--imenu'. @@ -418,8 +405,9 @@ c-ts-mode--base-mode (setq-local which-func-functions nil) (setq-local treesit-font-lock-feature-list - '((comment preprocessor operator constant string literal keyword) - (type definition expression statement) + '(( comment preprocessor operator constant string literal keyword) + ( type definition expression statement property bracket + delimiter escape-sequence) ()))) ;;;###autoload @@ -447,7 +435,7 @@ c-ts-mode ;;;###autoload (define-derived-mode c++-ts-mode c-ts-mode--base-mode "C++" - "Major mode for editing C, powered by tree-sitter." + "Major mode for editing C++, powered by tree-sitter." :group 'c++ (unless (treesit-ready-p nil 'cpp) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index a5d02d0fcb..88dc31b50e 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -975,11 +975,8 @@ python--treesit-constants "copyright" "credits" "exit" "license" "quit")) (defvar python--treesit-operators - ;; This is not used. And and, or, not, is, in are fontified as - ;; keywords. '("-" "-=" "!=" "*" "**" "**=" "*=" "/" "//" "//=" "/=" "&" "%" "%=" - "^" "+" "+=" "<" "<<" "<=" "<>" "=" "==" ">" ">=" ">>" "|" "~" - "and" "in" "is" "not" "or")) + "^" "+" "+=" "<" "<<" "<=" "<>" "=" "==" ">" ">=" ">>" "|" "~")) (defvar python--treesit-special-attributes '("__annotations__" "__closure__" "__code__" @@ -1118,7 +1115,38 @@ python--treesit-settings :feature 'escape-sequence :language 'python :override t - '((escape_sequence) @font-lock-escape-face)) + '((escape_sequence) @font-lock-escape-face) + + :feature 'number + :language 'python + :override t + '([(integer) (float)] @font-lock-number-face) + + :feature 'property + :language 'python + :override t + '((attribute + attribute: (identifier) @font-lock-property-face) + (class_definition + body: (block + (expression_statement + (assignment left: + (identifier) @font-lock-property-face))))) + + :feature 'operator + :language 'python + :override t + `([,@python--treesit-operators] @font-lock-operator-face) + + :feature 'bracket + :language 'python + :override t + '(["(" ")" "[" "]" "{" "}"] @font-lock-bracket-face) + + :feature 'delimiter + :language 'python + :override t + '(["," "." ":" ";" (ellipsis)] @font-lock-delimiter-face)) "Tree-sitter font-lock settings.") @@ -6553,7 +6581,8 @@ python-mode '(( comment string function-name class-name) ( keyword builtin constant type) ( assignment decorator escape-sequence - string-interpolation))) + string-interpolation number property + operator bracket delimiter))) (setq-local treesit-font-lock-settings python--treesit-settings) (setq-local imenu-create-index-function #'python-imenu-treesit-create-index) -- 2.38.1