Improve treesit settings for python-ts-mode (bug#73404).

* lisp/progmodes/python.el (python--thing-settings):
For the 'sexp' thing use all nodes except top-level
grouping nodes, comments and parens.  Add the 'list' thing.
(python-ts-mode): Use setq-local for treesit-thing-settings.
Modify 'forward-sexp-function' and 'treesit-sexp-thing'
after calling 'treesit-major-mode-setup'.
This commit is contained in:
Juri Linkov 2025-06-25 19:57:05 +03:00
parent 789a6b9693
commit f3c755129f

View file

@ -6123,13 +6123,34 @@ tree-sitter."
(defvar python--thing-settings
`((python
(defun ,(rx (or "function" "class") "_definition"))
(sexp ,(rx (or "expression"
"string"
"call"
"operator"
"identifier"
"integer"
"float")))
(sexp (not (or (and named
,(rx bos (or "module"
"block"
"comment")
eos))
(and anonymous
,(rx bos (or "(" ")" "[" "]" "{" "}" ",")
eos)))))
(list ,(rx bos (or "parameters"
"type_parameter"
"parenthesized_list_splat"
"argument_list"
"_list_pattern"
"_tuple_pattern"
"dict_pattern"
"tuple_pattern"
"list_pattern"
"list"
"set"
"tuple"
"dictionary"
"list_comprehension"
"dictionary_comprehension"
"set_comprehension"
"generator_expression"
"parenthesized_expression"
"interpolation")
eos))
(sentence ,(rx (or "statement"
"clause")))
(text ,(rx (or "string" "comment")))))
@ -7355,8 +7376,11 @@ implementations: `python-mode' and `python-ts-mode'."
(setq-local treesit-defun-name-function
#'python--treesit-defun-name)
(setq treesit-thing-settings python--thing-settings)
(setq-local treesit-thing-settings python--thing-settings)
(treesit-major-mode-setup)
;; Enable the `sexp' navigation by default
(setq-local forward-sexp-function #'treesit-forward-sexp
treesit-sexp-thing 'sexp)
(setq-local syntax-propertize-function #'python--treesit-syntax-propertize)