mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-14 18:10:32 -08:00
Merge from origin/emacs-29
db96b1282f* lisp/help.el: Use 'C-h C-q' to toggle 'help-quick' wind...489865c21e; Improve markup of long key sequencesd42c2668cf; * etc/NEWS: Fix wording of a recently edited entry.7a0eaee198* lisp/isearch.el: Small fixes.b69bffeec0* lisp/vc/diff-mode.el (diff-minor-mode-prefix): Replace ...9263847ab7; * etc/NEWS: Move the paragraph with 'C-u RET' closer to...62fb2dc37d* doc/emacs/display.texi (Text Scale): Improve section ab...70480d3b6b* lisp/repeat.el (repeat-echo-function): Suggest 'add-fun...fd48201ffe* lisp/tab-line.el (tab-line-cache-key-default): More cac...b164660260* etc/package-keyring.gpg: Update with new keyc0be51389e; Yet another declare-function to avoid treesit-related w...8676bec51d; * lisp/treesit.el (treesit--simple-imenu-1): Doc fix; w...2ddc480f44Warn of absent networks module in ERC19d00fab9aAvoid "already compiled" warning in erc-compat2d8f7b66bc; Fix one more treesit byte-compilation warning.2d0a921486; Avoid treesit-related byte-compiler warnings8503b370be(python--treesit-settings): Remove duplicate matcherb464e6c490Make last change of w32 GUI dialogs conditional and rever...eedc9d79aeFix tree-sitter typos248c13dcfeUpdate tree-sitter major modes to use the new Imenu facilityb39dc7ab27Add tree-sitter helper functions for Imenuba1ddea9daFix treesit--things-around (bug#60355)7512b9025a; * lisp/treesit.el (treesit-traverse-parent): Remove alias.5326b04198Improve treesit-node-top-level and treesit-parent-until637f5b164f; Add "src" to the heuristic sub-directory heuristic8ab6df0c9f; * lisp/epa-ks.el (epa-ks-do-key-to-fetch): Fix 'when' u...2b55a48d3e* src/w32menu.c (simple_dialog_show): Use MB_YESNOCANCEL ...8b8b791567; Improve documentation of TAB/SPC indentation624e382211; Improve doc strings of some new faces41f12e1019; * lisp/elide-head.el (elide-head): Doc fix to silence c...e3b4cd0ac1; * lisp/htmlfontify.el (hfy-text-p): Fix whitespace.1b4dc4691cFix htmlfontify.el command injection vulnerability.1fe4b98b4dImprove support for Scheme R6RS and R7RS libraries (bug#5...2347f37f67; * test/src/treesit-tests.el: remove dead store (bytecom...a6d961ae2fAdd a new tree-sitter query predicate 'pred'835a80dcc4; Fix tree-sitter defun testsa14821d615Improve gnutls-min-prime-bits docstringb14bbd108eImprove handling of tab-bar height.669160d47b; * nt/INSTALL.W64: More fixes and updates.26b2ec7cb8Simplify last change (bug#60311)082fc6e308Fix 'json-available-p' on MS-Windows6c86faec29loaddefs-gen: Group results by absolute file named90d7d15f2; Fix vindexes in parsing.texieb26872837Fix imenu for c-ts-mode (bug#60296)8f68b6497eClean up python-ts-mode font-lock features28f26b11a1Add comment indent and filling to other tree-sitter major...c6b0282645; Remove unused function in c-ts-mode6e52a9fcad; * doc/lispref/modes.texi (Parser-based Font Lock): Mino...2bcd1e9a99; * doc/lispref/parsing.texi (Retrieving Nodes): Add notice.7c7950fe00Add maintainer stub for tree-sitter filescf32776622; * doc/lispref/parsing.texi (Using Parser): Remove delet... # Conflicts: # etc/NEWS # lisp/progmodes/c-ts-mode.el # lisp/progmodes/typescript-ts-mode.el # lisp/treesit.el
This commit is contained in:
commit
dce6791e99
50 changed files with 945 additions and 813 deletions
|
|
@ -54,6 +54,7 @@
|
|||
(require 'json)
|
||||
(require 'prog-mode)
|
||||
(require 'treesit)
|
||||
(require 'c-ts-mode) ; For comment indent and filling.
|
||||
|
||||
(eval-when-compile
|
||||
(require 'cl-lib)
|
||||
|
|
@ -3425,9 +3426,9 @@ This function is intended for use in `after-change-functions'."
|
|||
((node-is ")") parent-bol 0)
|
||||
((node-is "]") parent-bol 0)
|
||||
((node-is ">") parent-bol 0)
|
||||
((parent-is "comment") comment-start 0)
|
||||
((and (parent-is "comment") comment-end) comment-start -1)
|
||||
((parent-is "comment") comment-start-skip 0)
|
||||
((and (parent-is "comment") c-ts-mode--looking-at-star)
|
||||
c-ts-mode--comment-start-after-first-star -1)
|
||||
((parent-is "comment") prev-adaptive-prefix 0)
|
||||
((parent-is "ternary_expression") parent-bol js-indent-level)
|
||||
((parent-is "member_expression") parent-bol js-indent-level)
|
||||
((node-is ,switch-case) parent-bol 0)
|
||||
|
|
@ -3669,70 +3670,11 @@ Return nil if there is no name or if NODE is not a defun node."
|
|||
"name")
|
||||
t))
|
||||
|
||||
(defun js--treesit-imenu-1 (node)
|
||||
"Given a sparse tree, create an imenu alist.
|
||||
|
||||
NODE is the root node of the tree returned by
|
||||
`treesit-induce-sparse-tree' (not a tree-sitter node, its car is
|
||||
a tree-sitter node). Walk that tree and return an imenu alist.
|
||||
|
||||
Return a list of ENTRY where
|
||||
|
||||
ENTRY := (NAME . MARKER)
|
||||
| (NAME . ((JUMP-LABEL . MARKER)
|
||||
ENTRY
|
||||
...)
|
||||
|
||||
NAME is the function/class's name, JUMP-LABEL is like \"*function
|
||||
definition*\"."
|
||||
(let* ((ts-node (car node))
|
||||
(children (cdr node))
|
||||
(subtrees (mapcan #'js--treesit-imenu-1
|
||||
children))
|
||||
(type (pcase (treesit-node-type ts-node)
|
||||
("lexical_declaration" 'variable)
|
||||
("class_declaration" 'class)
|
||||
("method_definition" 'method)
|
||||
("function_declaration" 'function)))
|
||||
;; The root of the tree could have a nil ts-node.
|
||||
(name (when ts-node
|
||||
(or (treesit-defun-name ts-node)
|
||||
"Anonymous")))
|
||||
(marker (when ts-node
|
||||
(set-marker (make-marker)
|
||||
(treesit-node-start ts-node)))))
|
||||
(cond
|
||||
((null ts-node)
|
||||
subtrees)
|
||||
;; Don't included non-top-level variable declarations.
|
||||
((and (eq type 'variable)
|
||||
(treesit-node-top-level ts-node))
|
||||
nil)
|
||||
(subtrees
|
||||
`((,name
|
||||
,(cons "" marker)
|
||||
,@subtrees)))
|
||||
(t (list (cons name marker))))))
|
||||
|
||||
(defun js--treesit-imenu ()
|
||||
"Return Imenu alist for the current buffer."
|
||||
(let* ((node (treesit-buffer-root-node))
|
||||
(class-tree (treesit-induce-sparse-tree
|
||||
node (rx (or "class_declaration"
|
||||
"method_definition"))
|
||||
nil 1000))
|
||||
(func-tree (treesit-induce-sparse-tree
|
||||
node "function_declaration" nil 1000))
|
||||
(var-tree (treesit-induce-sparse-tree
|
||||
node "lexical_declaration" nil 1000)))
|
||||
;; When a sub-tree is empty, we should not return that pair at all.
|
||||
(append
|
||||
(and func-tree
|
||||
`(("Function" . ,(js--treesit-imenu-1 func-tree))))
|
||||
(and var-tree
|
||||
`(("Variable" . ,(js--treesit-imenu-1 var-tree))))
|
||||
(and class-tree
|
||||
`(("Class" . ,(js--treesit-imenu-1 class-tree)))))))
|
||||
(defun js--treesit-valid-imenu-entry (node)
|
||||
"Return nil if NODE is a non-top-level \"lexical_declaration\"."
|
||||
(pcase (treesit-node-type node)
|
||||
("lexical_declaration" (treesit-node-top-level node))
|
||||
(_ t)))
|
||||
|
||||
;;; Main Function
|
||||
|
||||
|
|
@ -3845,15 +3787,7 @@ Currently there are `js-mode' and `js-ts-mode'."
|
|||
;; Which-func.
|
||||
(setq-local which-func-imenu-joiner-function #'js--which-func-joiner)
|
||||
;; Comment.
|
||||
(setq-local comment-start "// ")
|
||||
(setq-local comment-end "")
|
||||
(setq-local comment-start-skip (rx (or (seq "/" (+ "/"))
|
||||
(seq "/" (+ "*")))
|
||||
(* (syntax whitespace))))
|
||||
(setq-local comment-end-skip
|
||||
(rx (* (syntax whitespace))
|
||||
(group (or (syntax comment-end)
|
||||
(seq (+ "*") "/")))))
|
||||
(c-ts-mode-comment-setup)
|
||||
(setq-local comment-multi-line t)
|
||||
|
||||
(setq-local treesit-text-type-regexp
|
||||
|
|
@ -3887,10 +3821,14 @@ Currently there are `js-mode' and `js-ts-mode'."
|
|||
identifier jsx number pattern property)
|
||||
( bracket delimiter operator)))
|
||||
;; Imenu
|
||||
(setq-local imenu-create-index-function
|
||||
#'js--treesit-imenu)
|
||||
;; Which-func (use imenu).
|
||||
(setq-local which-func-functions nil)
|
||||
(setq-local treesit-simple-imenu-settings
|
||||
`(("Function" "\\`function_declaration\\'" nil nil)
|
||||
("Variable" "\\`lexical_declaration\\'"
|
||||
js--treesit-valid-imenu-entry nil)
|
||||
("Class" ,(rx bos (or "class_declaration"
|
||||
"method_definition")
|
||||
eos)
|
||||
nil nil)))
|
||||
(treesit-major-mode-setup)))
|
||||
|
||||
;;;###autoload
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue