-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Description
I can live without electric-indent-mode but it would be nice if we could figure out what causing this slowdown.
Here's CPU profile:
6215 94% - command-execute
5276 80% - funcall-interactively
5274 80% - newline
5265 80% - electric-indent-post-self-insert-function
5255 80% - indent-according-to-mode
5255 80% - treesit-indent
5237 80% - treesit--indent-1
2624 40% - treesit-language-at
2624 40% - svelte-ts-mode--treesit-language-at-point
2619 40% - treesit-ready-p
2619 40% treesit-language-available-p
3 0% + treesit-node-at
1303 19% - treesit-simple-indent
1302 19% - treesit--simple-indent-eval
1301 19% - svelte-ts-mode--script-style-tag-bol
1301 19% - treesit-language-at
1301 19% - svelte-ts-mode--treesit-language-at-point
1299 19% - treesit-ready-p
1299 19% treesit-language-available-p
2 0% + treesit-node-at
1 0% + #<byte-code-function 744>
1 0% alist-get
1299 19% - treesit-node-on
1297 19% - treesit-language-at
1297 19% - svelte-ts-mode--treesit-language-at-point
1296 19% - treesit-ready-p
1296 19% treesit-language-available-p
1 0% treesit-buffer-root-node
8 0% + treesit-node-at
10 0% - treesit-update-ranges
9 0% treesit-query-range
8 0% + indent-line-to
10 0% + delete-horizontal-space
3 0% + lsp-on-change
1 0% + electric-pair-post-self-insert-function
1 0% + #:newline-postproc
1 0% + #:newline-postproc
2 0% + execute-extended-command
939 14% + byte-code
259 3% + redisplay_internal (C function)
29 0% + timer-event-handler
21 0% + ...
10 0% + #<byte-code-function BCF>
5 0% + flycheck-perform-deferred-syntax-check
2 0% + goggles--post-command
1 0% + keyfreq-pre-command-hook
1 0% + corfu--auto-post-command
1 0% + winner-save-old-configurations
1 0% pulsar--post-command-pulse
I did couple of new lines and it seems like treesit-language-available-p
is slow? Also do we need to call treesit-ready-p
that often? I made a change here:
(defvar-local svelte-ts-mode-ready-javascript nil "Saved value for treesit-ready-p for javascript lang")
(defvar-local svelte-ts-mode-ready-typescript "Saved value for treesit-ready-p for typescript lang")
(defvar-local svelte-ts-mode-ready-css nil "Saved value for treesit-ready-p for css lang")
(defun svelte-ts-mode--treesit-language-at-point (pos)
(let* ((node (treesit-node-at pos 'svelte))
(parent (treesit-node-parent node))
(js-ready (or svelte-ts-mode-ready-javascript (treesit-ready-p 'javascript)))
(ts-ready (or svelte-ts-mode-ready-typescript (treesit-ready-p 'typescript)))
(css-ready (or svelte-ts-mode-ready-css (treesit-ready-p 'css))))
(cond
((and node parent
(equal (treesit-node-type node) "raw_text")
(equal (treesit-node-type parent) "script_element"))
(if (and js-ready ts-ready)
(if (null (treesit-query-capture
parent svelte-ts-mode--query-get-script-element-attrs))
'javascript
'typescript)
(if ts-ready
'typescrpt
(if js-ready
'javscript
'svelte))))
((and node parent
(equal (treesit-node-type node) "raw_text")
(equal (treesit-node-type parent) "style_element"))
(if css-ready
'css
'svelte))
(t 'svelte))))
And it seems to be faster but I'm that great at elisp. We could probably have a hashmap here instead so nils won't allow treesit-ready-p
to be called again. Also not sure if we can set it once and forget about it, can tree sitter become unavailable suddenly?
Metadata
Metadata
Assignees
Labels
No labels