[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/devdocs 51a3ceaf66 3/4: Use cache for document indexes
From: |
ELPA Syncer |
Subject: |
[elpa] externals/devdocs 51a3ceaf66 3/4: Use cache for document indexes |
Date: |
Thu, 24 Feb 2022 12:57:29 -0500 (EST) |
branch: externals/devdocs
commit 51a3ceaf66236addefe374ebb0aeba2965b56b30
Author: Augusto Stoffel <arstoffel@gmail.com>
Commit: Augusto Stoffel <arstoffel@gmail.com>
Use cache for document indexes
---
devdocs.el | 42 ++++++++++++++++++++----------------------
1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/devdocs.el b/devdocs.el
index 1a26de7920..d01c565f35 100644
--- a/devdocs.el
+++ b/devdocs.el
@@ -246,22 +246,20 @@ DOC is a document metadata alist."
;;; Document indexes
-(defun devdocs--index (doc)
- "Return the index of document DOC.
-This is an alist containing `entries', `pages' and `types'."
- (let* ((docid (cons 'doc doc))
- (idx (with-temp-buffer
- (insert-file-contents (expand-file-name
- (concat (alist-get 'slug doc) "/index")
- devdocs-data-dir))
- (read (current-buffer))))
- (entries (alist-get 'entries idx)))
- (prog1 idx
- (seq-do-indexed (lambda (entry i)
- (push docid entry)
- (push `(index . ,i) entry)
- (aset entries i entry))
- entries))))
+(defun devdocs--index (doc kind)
+ "Return an index of document DOC, where KIND is `entries', `pages' or
`types'."
+ (if kind
+ (alist-get kind (devdocs--with-cache (devdocs--index doc nil)))
+ (let* ((docmeta (cons 'doc doc))
+ (indexes (with-temp-buffer
+ (insert-file-contents (expand-file-name
+ (concat (alist-get 'slug doc)
"/index")
+ devdocs-data-dir))
+ (read (current-buffer))))
+ (entries (alist-get 'entries indexes)))
+ (prog1 indexes
+ (seq-do-indexed (lambda (entry i) (aset entries i (cons docmeta
entry)))
+ entries)))))
;;; Documentation viewer
@@ -316,7 +314,7 @@ Note that this refers to the index order, which may not
coincide
with the order of appearance in the text."
(interactive "p")
(let-alist (car devdocs--stack)
- (let* ((entries (alist-get 'entries (devdocs--index .doc)))
+ (let* ((entries (devdocs--index .doc 'entries))
(pred (lambda (entry _) (string= (alist-get 'path entry) .path)))
(current (seq-position entries nil pred)))
(unless current (user-error "No current entry"))
@@ -333,12 +331,12 @@ with the order of appearance in the text."
"Go forward COUNT pages in this document."
(interactive "p")
(let-alist (car devdocs--stack)
- (let* ((pages (alist-get 'pages (devdocs--index .doc)))
+ (let* ((pages (devdocs--index .doc 'pages))
(target (+ count (seq-position pages (devdocs--path-file .path))))
(path (or (ignore-error 'args-out-of-range (elt pages target))
(user-error "No %s page" (if (< count 0) "previous"
"next"))))
(entry (or (seq-find (lambda (entry) (string= (alist-get 'path
entry) path))
- (alist-get 'entries (devdocs--index .doc)))
+ (devdocs--index .doc 'entries))
`((doc . ,.doc) (path . ,path)))))
(devdocs--render entry))))
@@ -452,7 +450,7 @@ ARGS is passed as is to `browse-url'."
(let-alist it
(or (string= .path dest)
(string= .path file))))
- (alist-get 'entries (devdocs--index .doc)))))
+ (devdocs--index .doc 'entries))))
(unless entry (error "Can't find `%s'" dest))
(when frag (push `(fragment . ,frag) entry))
(devdocs--render entry)))))
@@ -469,7 +467,7 @@ ARGS is passed as is to `browse-url'."
`(,name ,count . ,it))))
(entries (mapcan (lambda (doc)
(mapcar mkentry
- (alist-get 'entries (devdocs--index doc))))
+ (devdocs--index doc 'entries)))
documents)))
(mapcar (pcase-lambda (`(,name ,count . ,it))
(propertize (if (= 1 (gethash name counts))
@@ -542,7 +540,7 @@ If INITIAL-INPUT is not nil, insert it into the minibuffer."
(defun devdocs-peruse (doc)
"Read a document from the first page."
(interactive (list (devdocs--read-document "Peruse documentation: ")))
- (let ((pages (alist-get 'pages (devdocs--index doc))))
+ (let ((pages (devdocs--index doc 'pages)))
(pop-to-buffer
(devdocs--render `((doc . ,doc) (path . ,(seq-first pages)))))))