branch: elpa/treesit-fold commit fef90261f5f31d5f7cac201c48a954e2d2ea0d5b Author: Jen-Chieh Shen <jcs090...@gmail.com> Commit: Jen-Chieh Shen <jcs090...@gmail.com>
Apply offset --- tree-sitter-fold-parsers.el | 4 ++++ tree-sitter-fold.el | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tree-sitter-fold-parsers.el b/tree-sitter-fold-parsers.el index f8504eba0d..5cb5420fa4 100644 --- a/tree-sitter-fold-parsers.el +++ b/tree-sitter-fold-parsers.el @@ -121,6 +121,10 @@ "Rule sets for R." '((brace_list . tree-sitter-fold-range-seq))) +(defun tree-sitter-fold-parsers-ruby () + "Rule sets for Ruby." + '(())) + (defun tree-sitter-fold-parsers-rust () "Rule sets for Rust." '((declaration_list . tree-sitter-fold-range-seq) diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el index 3f374f049e..69224a2ac1 100644 --- a/tree-sitter-fold.el +++ b/tree-sitter-fold.el @@ -75,6 +75,7 @@ (nix-mode . ,(tree-sitter-fold-parsers-nix)) (python-mode . ,(tree-sitter-fold-parsers-python)) (rjsx-mode . ,(tree-sitter-fold-parsers-javascript)) + (ruby-mode . ,(tree-sitter-fold-parsers-ruby)) (rust-mode . ,(tree-sitter-fold-parsers-rust)) (rustic-mode . ,(tree-sitter-fold-parsers-rust)) (typescript-mode . ,(tree-sitter-fold-parsers-typescript))) @@ -323,13 +324,13 @@ If the current syntax node is not foldable, do nothing." (defun tree-sitter-fold-range-seq (node offset) "Return the fold range in sequence." - (let ((beg (+ (tsc-node-start-position node) 1 (car offset))) - (end (+ (tsc-node-end-position node) -1 (cdr offset)))) + (let ((beg (1+ (tsc-node-start-position node))) + (end (1- (tsc-node-end-position node)))) + (setq beg (+ beg (car offset)) end (+ end (cdr offset))) (cons beg end))) -(defun tree-sitter-fold-range-python (node _offset) - "Return the fold range for `function_definition' and `class_definition' -NODE in Python." +(defun tree-sitter-fold-range-python (node offset) + "Return the fold range for `function_definition' and `class_definition'." (let* ((named-node (or (tsc-get-child-by-field node :superclasses) (tsc-get-child-by-field node :return_type) (tsc-get-child-by-field node :parameters) @@ -337,18 +338,20 @@ NODE in Python." ;; the colon is an anonymous node after return_type or parameters node (beg (tsc-node-end-position (tsc-get-next-sibling named-node))) (end (tsc-node-end-position node))) + (setq beg (+ beg (car offset)) end (+ end (cdr offset))) (cons beg end))) -(defun tree-sitter-fold-range-nix-function (node _offset) +(defun tree-sitter-fold-range-nix-function (node offset) "Return the fold range for `function' NODE in Nix express language." (let ((beg (thread-first node (tsc-get-child-by-field :formals) (tsc-get-next-sibling) (tsc-node-end-position))) (end (tsc-node-end-position node))) + (setq beg (+ beg (car offset)) end (+ end (cdr offset))) (cons beg end))) -(defun tree-sitter-fold-range-go-type-declaration (node _offset) +(defun tree-sitter-fold-range-go-type-declaration (node offset) "Return the fold range for `type_declaration' NODE in Go language. Only `struct_type' and `interface_type' nodes can be folded." (when-let* ((type-spec-node (tsc-get-nth-child node 1)) @@ -364,15 +367,17 @@ Only `struct_type' and `interface_type' nodes can be folded." ;; find the end of the "struct" or "interface" keyword (let ((beg (1+ (tsc-node-end-position (tsc-get-nth-child type-node 0)))) (end (tsc-node-end-position node))) + (setq beg (+ beg (car offset)) end (+ end (cdr offset))) (cons beg end))) (t nil)))) -(defun tree-sitter-fold-range-go-method (node _offset) +(defun tree-sitter-fold-range-go-method (node offset) "Return the fold range for `method_declaration' NODE in Go language." (let* ((named-node (or (tsc-get-child-by-field node :result) (tsc-get-child-by-field node :parameters))) (beg (1+ (tsc-node-end-position named-node))) (end (tsc-node-end-position node))) + (setq beg (+ beg (car offset)) end (+ end (cdr offset))) (cons beg end))) (provide 'tree-sitter-fold)