branch: elpa/typst-ts-mode
commit daf266bd902fae87741a77ef21419f38b6f8a4d5
Author: Meow King <[email protected]>
Commit: Meow King <[email protected]>
refactor!: remove dead code & raw block indentation
---
justfile | 2 +-
test/indentation-test.typ | 2 +-
typst-ts-core.el | 31 ------------------
typst-ts-mode.el | 83 +++--------------------------------------------
4 files changed, 6 insertions(+), 112 deletions(-)
diff --git a/justfile b/justfile
index ecd4e25a01..ec158026da 100644
--- a/justfile
+++ b/justfile
@@ -4,7 +4,7 @@ emacs := env("EMACS", "emacs")
test-file := env("TEST_FILE", "./test/basic-syntax.typ")
eval:
- {{emacs}} -Q --debug-init -L . --eval "(require 'typst-ts-mode)"
{{test-file}}
+ {{emacs}} -Q --debug-init -L . --eval "(progn (require 'typst-ts-mode)
(setq typst-ts-mode-enable-raw-blocks-highlight t))" {{test-file}}
clean:
rm -f ./*.elc
diff --git a/test/indentation-test.typ b/test/indentation-test.typ
index c75b4e4e16..a75fbec0e3 100644
--- a/test/indentation-test.typ
+++ b/test/indentation-test.typ
@@ -50,7 +50,7 @@ fn main() {
fn main() {
}
- ``` // FIXME: should be 0 offset
+```
= Script
#if 1 < 2 [
diff --git a/typst-ts-core.el b/typst-ts-core.el
index bdc6195173..bff7718262 100644
--- a/typst-ts-core.el
+++ b/typst-ts-core.el
@@ -34,20 +34,6 @@
(back-to-indentation)
(point)))
-(defun typst-ts-core-parser-list (&optional buffer language)
- "An comptibility function for Emacs 29's `treesit-parser-list' function.
-BUFFER defaults to the current buffer. If that buffer is an indirect
-buffer, its base buffer is used instead. That is, indirect buffers
-use their base buffer's parsers.
-
-If LANGUAGE is non-nil, only return parsers for that language."
- (if (>= emacs-major-version 30)
- (funcall #'treesit-parser-list buffer language)
- (let ((parsers (treesit-parser-list buffer)))
- (seq-filter
- (lambda (parser)
- (eq (treesit-parser-language parser) language))
- parsers))))
;; code is from treesit.el inside Emacs Source
(defun typst-ts-core-local-parsers-at (&optional pos language with-host)
@@ -66,23 +52,6 @@ POS LANGUAGE WITH-HOST."
(push (if with-host (cons parser host-parser) parser) res))))
(nreverse res))))
-;; code is from treesit.el inside Emacs Source
-(defun typst-ts-core-local-parsers-on (&optional beg end language with-host)
- "Return all the local parsers between BEG END.
-It's a copy of Emacs 30's `treesit-local-parsers-on' function.
-BEG END LANGUAGE WITH-HOST."
- (if (fboundp 'treesit-local-parsers-on)
- (funcall #'treesit-local-parsers-on beg end language with-host)
- (let ((res nil))
- (dolist (ov (overlays-in (or beg (point-min)) (or end (point-max))))
- (when-let ((parser (overlay-get ov 'treesit-parser))
- (host-parser (overlay-get ov 'treesit-host-parser)))
- (when (or (null language)
- (eq (treesit-parser-language parser)
- language))
- (push (if with-host (cons parser host-parser) parser) res))))
- (nreverse res))))
-
(defun typst-ts-core-node-get (node instructions)
"Get things from NODE by INSTRUCTIONS.
It's a copy of Emacs 30's `treesit-node-get' function."
diff --git a/typst-ts-mode.el b/typst-ts-mode.el
index f21ee789f2..5f68676e57 100644
--- a/typst-ts-mode.el
+++ b/typst-ts-mode.el
@@ -461,30 +461,6 @@ NODE, PARENT and BOL see `treesit-simple-indent-rules'."
(string-match-p typst-ts-mode--container-node-types-regexp gp-node-type)
(equal "section" ggp-node-type)))))
-(defun typst-ts-mode-indent--raw-block-blob-anchor (_node parent bol)
- "Get the correct anchor for raw block blob.
-Please make sure the passed in NODE, PARENT and BOL is nil, blob and raw_blck.
-Used in `typst-ts-mode-indent-rules'."
- (let* ((prev-line-bol
- (save-excursion
- (forward-line -1)
- (back-to-indentation)
- (point)))
- (prev-line-node
- (treesit-node-at prev-line-bol))
- (prev-line-node-type (treesit-node-type prev-line-node))
- (bol-col
- (typst-ts-mode-column-at-pos bol))
- (raw-block-bol
- (typst-ts-core-get-node-bol (treesit-node-parent parent)))
- (raw-block-bol-col
- (typst-ts-mode-column-at-pos raw-block-bol)))
- (if (equal "blob" prev-line-node-type)
- (if (> raw-block-bol-col bol-col)
- raw-block-bol
- bol)
- prev-line-bol)))
-
(defvar typst-ts-mode-indent-rules
;; debug tips:
;; use `typst-ts/util/setup-indent-debug-environment' function in
`side/utils.el'
@@ -551,7 +527,10 @@ Used in `typst-ts-mode-indent-rules'."
;; raw block
;; whether normally or in insertion, the current node is always nil...
((n-p-gp nil "blob" "raw_blck")
- typst-ts-mode-indent--raw-block-blob-anchor 0)
+ no-indent 0)
+
+ ((match "```" "raw_blck" nil 2 3 )
+ parent-bol 0)
;; inside container && container is direct child of "section" (headline)
(typst-ts-mode-indent--no-node-section-container-p
@@ -573,35 +552,6 @@ Used in `typst-ts-mode-indent-rules'."
(catch-all prev-line 0)))
"Tree-sitter indent rules for `rust-ts-mode'.")
-(defvar typst-ts-mode-indent-function nil
- "This variable shouldn't be customized by user.
-It should hold the originally value of `treesit-indent-function'.")
-
-(defun typst-ts-mode-indent (node parent bol)
- "Indent function for `treesit-indent-function'.
-This function basically call `typst-ts-mode-indent-function' (i.e. the original
-`treesit-indent-function') to indent, and then it checks whether the current
-line has a local parser (i.e. raw block with highlight on). If it has, we
-add offset to the line to match the indentation of raw block label.
-NODE, PARENT and BOL see `treesit-indent-function'."
- (unless typst-ts-mode-indent-function
- (error "Variable `typst-ts-mode-indent-function' shouldn't be null!"))
- (let ((res (funcall typst-ts-mode-indent-function node parent bol)))
- ;; if it is a highlighted raw block region (i.e. contains at least one
local parser)
- (when (typst-ts-core-local-parsers-at (treesit-node-start node))
- ;; when there is no matching rules
- (unless (car res)
- (setcar res bol)
- (setcdr res 0))
- (let* ((blob_node (treesit-node-at bol 'typst))
- (raw_block_node (treesit-node-parent blob_node))
- (raw_block_bol (typst-ts-core-get-node-bol raw_block_node))
- (raw_block_bol_column (typst-ts-mode-column-at-pos raw_block_bol))
- (res-column (+ (typst-ts-mode-column-at-pos (car res)) (cdr
res))))
- (when (> raw_block_bol_column res-column)
- ;; (message "%s %s %s" res raw_block_bol_column res-column)
- (setcar res raw_block_bol))))
- res))
(defun typst-ts-mode-comment-setup()
"Setup comment related stuffs for `typst-ts-mode'."
@@ -666,26 +616,6 @@ FILE: file path for the result compile file."
(define-key map (kbd "C-c '") #'typst-ts-edit-indirect)
map))
-(defun typst-ts-mode--language-at-point (pos)
- "Get the treesit language should be used at POS.
-See `treesit-language-at-point-function'."
- (let ((lang
- (when-let* ((cur-node (treesit-node-at pos 'typst))
- ((equal (treesit-node-type cur-node) "blob"))
- (parent-node (treesit-node-parent cur-node))
- ((equal (treesit-node-type
- (treesit-node-parent cur-node)) "raw_blck"))
- (lang-node
- (treesit-node-prev-sibling cur-node))
- ((equal (treesit-node-type lang-node) "ident")))
- (gethash
- (downcase (treesit-node-text lang-node))
- typst-ts-els-tag-lang-map))))
- (if lang
- (if (treesit-ready-p lang t) lang nil)
- 'typst)))
-
-
(defun typst-ts-mode-indent-line-function ()
"A simple wrapper of `treesit-indent' for handle indentation edge cases.
It is useful to handle end of buffer situation (please turn on
`whitespace-mode'
@@ -805,9 +735,6 @@ typst tree sitter grammar (at least %s)!"
(current-time-string min-time))
;; `((typst ())))
- (setq-local treesit-language-at-point-function
- 'typst-ts-mode--language-at-point)
-
;; Outline
(if nil ; (>= emacs-major-version 30)
;; FIXME maybe it's a upstream bug. Circle top-level section will cycle
all the content below
@@ -819,8 +746,6 @@ typst tree sitter grammar (at least %s)!"
(current-time-string min-time))
;; TODO add it to after-hook
(outline-minor-mode t)
- (setq-local typst-ts-mode-indent-function treesit-indent-function
- treesit-indent-function 'typst-ts-mode-indent)
(treesit-major-mode-setup)
(setq-local indent-line-function #'typst-ts-mode-indent-line-function))