Commit 5986c52d authored by João Távora's avatar João Távora

Make octave.el's cache a multiple-entry hash-table

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.
parent 1ad08262
Pipeline #195 passed with stage
in 22 minutes
......@@ -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)."
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment