Skip to content

Commit d8b7b3e

Browse files
authored
Merge pull request #2 from leungbk/nonfold
Limit lsp-origami--parser to modes supporting foldingRangeProvider.
2 parents c765360 + e132298 commit d8b7b3e

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

README.org

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
lsp-origami provides support for ~origami.el~ using language server protocol's
33
~textDocument/foldingRange~ functionality. It can be enabled with
44
#+BEGIN_SRC emacs-lisp
5-
(add-hook 'origami-mode-hook #'lsp-origami-mode)
5+
(add-hook 'lsp-after-open-hook #'lsp-origami-try-enable)
66
#+END_SRC

lsp-origami.el

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
;; protocol's "textDocument/foldingRange" functionality. It can be enabled
2828
;; with
2929
;; (require 'lsp-origami)
30-
;; (add-hook 'origami-mode-hook #'lsp-origami-mode)
30+
;; (add-hook 'lsp-after-open-hook #'lsp-origami-try-enable)
3131

3232
;;; Code:
3333

@@ -36,17 +36,17 @@
3636

3737
(defun lsp-origami--folding-range-to-fold (range create)
3838
(funcall create
39-
(lsp--folding-range-beg range)
40-
(lsp--folding-range-end range)
41-
0
42-
(seq-map
43-
(lambda (range) (lsp-origami--folding-range-to-fold range create))
44-
(seq-remove (lambda (child-range)
45-
(or (eq (lsp--folding-range-beg child-range)
46-
(lsp--folding-range-beg range))
47-
(eq (lsp--folding-range-end child-range)
48-
(lsp--folding-range-end range))))
49-
(lsp--folding-range-children range)))))
39+
(lsp--folding-range-beg range)
40+
(lsp--folding-range-end range)
41+
0
42+
(seq-map
43+
(lambda (range) (lsp-origami--folding-range-to-fold range create))
44+
(seq-remove (lambda (child-range)
45+
(or (eq (lsp--folding-range-beg child-range)
46+
(lsp--folding-range-beg range))
47+
(eq (lsp--folding-range-end child-range)
48+
(lsp--folding-range-end range))))
49+
(lsp--folding-range-children range)))))
5050

5151
(defun lsp-origami--parser (create)
5252
"Get a list of Folding Ranges for the current buffer."
@@ -57,18 +57,30 @@
5757
(lsp-origami--folding-range-to-fold range create))
5858
(lsp--get-nested-folding-ranges))))
5959

60+
;;;###autoload
61+
(defun lsp-origami-try-enable ()
62+
"Turn on `origami-mode' locally and try to enable `lsp-origami-mode'."
63+
(interactive)
64+
(origami-mode 1)
65+
(cond ((lsp--capability "foldingRangeProvider")
66+
(lsp-origami-mode 1))
67+
((called-interactively-p 'any)
68+
(signal 'lsp-capability-not-supported (list "foldingRangeProvider")))
69+
(t
70+
(lsp-log "This server does not support foldingRangeProvider"))))
71+
6072
;;;###autoload
6173
(define-minor-mode lsp-origami-mode
6274
"Toggle code folding support for origami."
6375
:group 'lsp-origami
6476
:global nil
6577
(cond
6678
(lsp-origami-mode
67-
(setq-local origami-fold-style 'lsp-mode))
79+
(setq-local origami-fold-style 'lsp-mode)
80+
(setq-local origami-parser-alist
81+
(cons '(lsp-mode . lsp-origami--parser) origami-parser-alist)))
6882
(t
6983
(setq-local origami-fold-style nil))))
7084

71-
(push '(lsp-mode . lsp-origami--parser) origami-parser-alist)
72-
7385
(provide 'lsp-origami)
7486
;;; lsp-origami.el ends here

0 commit comments

Comments
 (0)