aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-09-28 15:27:55 +1000
committerYuchen Pei <hi@ypei.me>2022-09-28 15:27:55 +1000
commit3cd88744e08431268052eeab5f0c8f53439eee17 (patch)
tree7118f59221f5bbfc076f16706fa2a61180c0385b
parentabb88a89b50b241a4492114c6fbce364af56f48e (diff)
allow toggle display of exported ids in hcel-outline mode
-rw-r--r--hcel-outline.el19
-rw-r--r--hcel-source.el26
2 files changed, 32 insertions, 13 deletions
diff --git a/hcel-outline.el b/hcel-outline.el
index a192e07..ea8f919 100644
--- a/hcel-outline.el
+++ b/hcel-outline.el
@@ -27,8 +27,8 @@
(defvar hcel-outline-mode-map
(let ((kmap (make-sparse-keymap)))
- (define-key kmap "n" #'outline-next-visible-heading)
- (define-key kmap "p" #'outline-previous-visible-heading)
+ (define-key kmap "n" #'next-logical-line)
+ (define-key kmap "p" #'previous-logical-line)
(define-key kmap "f" #'outline-forward-same-level)
(define-key kmap "F" #'hcel-outline-follow-mode)
(define-key kmap "b" #'outline-backward-same-level)
@@ -140,6 +140,12 @@ update in the outline mode too."
((eq thing 'module) (hcel-outline-load-identifiers-at-point))
(t nil))))
+(defun hcel-outline-toggle-exported ()
+ (interactive)
+ (if (memq 'hcel-unexported buffer-invisibility-spec)
+ (remove-from-invisibility-spec 'hcel-unexported)
+ (add-to-invisibility-spec 'hcel-unexported)))
+
(defun hcel-outline-load-identifiers-at-point ()
(interactive)
(unless (eq (get-text-property (point) 'thing) 'module)
@@ -158,7 +164,9 @@ update in the outline mode too."
(y-or-n-p "Open module source?"))
(with-current-buffer
(hcel-load-module-source package-id module-path)
- (setq imenu-index (save-excursion (hcel-imenu-create-index))))
+ (setq imenu-index
+ (save-excursion
+ (hcel-imenu-create-index))))
(beginning-of-line 2)
(mapc
(lambda (pair)
@@ -170,7 +178,10 @@ update in the outline mode too."
'thing 'identifier
'package-id package-id
'module-path module-path
- 'position (cdr pair))))
+ 'position (cdr pair)
+ 'invisible (unless
+ (get-text-property 1 'exported (car pair))
+ 'hcel-unexported))))
imenu-index))))))
(defun hcel-outline-open-module-source-at-point (&optional other-window)
diff --git a/hcel-source.el b/hcel-source.el
index 4151f63..e2158d1 100644
--- a/hcel-source.el
+++ b/hcel-source.el
@@ -21,6 +21,7 @@
(require 'dom)
(require 'hcel-client)
(require 'text-property-search)
+(require 'json)
(require 'xref)
(defvar-local hcel-identifiers nil)
@@ -373,19 +374,26 @@ the location with pulsing.
;; imenu
(defun hcel-imenu-create-index ()
+ (hcel-imenu-create-index-internal))
+
+(defun hcel-imenu-create-index-internal (&optional exported-only)
(unless (derived-mode-p 'hcel-mode)
(error "Not in hcel-mode!"))
(goto-char (point-min))
- (let ((index) (match))
+ (let ((index) (match) (exported))
(while (setq match (text-property-search-forward 'declaration))
- (push (cons
- (hcel-render-components
- (alist-get 'components
- (alist-get 'declType (prop-match-value match)))
- (alist-get 'name (prop-match-value match)))
- (1- (point)))
- index))
- index))
+ (setq exported (eq (alist-get 'isExported (prop-match-value match)) t))
+ (unless (and exported-only (not exported))
+ (push (cons
+ (propertize
+ (hcel-render-components
+ (alist-get 'components
+ (alist-get 'declType (prop-match-value match)))
+ (alist-get 'name (prop-match-value match)))
+ 'exported exported)
+ (1- (point)))
+ index)))
+ (reverse index)))
(define-key hcel-mode-map "j" #'imenu)
;; xref