]> git.eshelyaron.com Git - emacs.git/commitdiff
Make octave.el's cache a multiple-entry hash-table scratch/octave-eldoc-fixes
authorJoão Távora <joaotavora@gmail.com>
Mon, 3 Dec 2018 11:45:24 +0000 (11:45 +0000)
committerJoão Távora <joaotavora@gmail.com>
Mon, 3 Dec 2018 11:45:24 +0000 (11:45 +0000)
Provide a way for the user to flush the cache manually.

* lisp/progmodes/octave.el (octave-eldoc-flush-cache): New function.
(octave-eldoc-function-signatures): Use new hash-table cache.
(octave-eldoc-cache): Now a hash-table.

lisp/progmodes/octave.el

index 950c4ca33fa43e1005a78ab26842403fb33c4a12..47e1d017ffde67907fd932402ac542d1ae460a07 100644 (file)
@@ -1606,23 +1606,26 @@ code line."
                  (const :tag "Multi Line" multiline))
   :version "24.4")
 
-;; (FN SIGNATURE1 SIGNATURE2 ...)
-(defvar octave-eldoc-cache nil)
+;; (FN -> (SIGNATURE1 SIGNATURE2 ...))
+(defvar octave-eldoc-cache (make-hash-table :test #'equal))
+
+(defun octave-eldoc-flush-cache ()
+  "Flush the cache of function signatures for Eldoc."
+  (clrhash octave-eldoc-cache))
 
 (defun octave-eldoc-function-signatures (fn)
-  (unless (equal fn (car octave-eldoc-cache))
-    (inferior-octave-send-list-and-digest
-     (list (format "print_usage ('%s');\n" fn)))
-    (let (result)
-      (dolist (line inferior-octave-output-list)
-        (when (string-match
-               "\\s-*\\(?:--[^:]+\\|usage\\):\\s-*\\(.*\\)$"
-               line)
-          (push (match-string 1 line) result)))
-      (setq octave-eldoc-cache
-            (cons (substring-no-properties fn)
-                  (nreverse result)))))
-  (cdr octave-eldoc-cache))
+  (or (gethash fn octave-eldoc-cache)
+      (puthash fn
+               (let (result)
+                 (inferior-octave-send-list-and-digest
+                  (list (format "print_usage ('%s');\n" fn)))
+                 (dolist (line inferior-octave-output-list)
+                   (when (string-match
+                          "\\s-*\\(?:--\\|usage:\\)\\s-*\\(.*\\)$"
+                          line)
+                     (push (match-string 1 line) result)))
+                 (nreverse result))
+               octave-eldoc-cache)))
 
 (defun octave-eldoc-function ()
   "A function for `eldoc-documentation-function' (which see)."