summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2015-08-16 06:46:52 +0300
committerAlex Kost <alezost@gmail.com>2015-08-30 18:26:01 +0300
commit6543601fa05b629b387d1da0b5fc5fe81ecaf24c (patch)
tree9dc42e1bb6cbe2849aa075c997c0e83d7159b10e
parente767752c79975d30341f71d7f9de88edeb192d59 (diff)
downloadguix-6543601fa05b629b387d1da0b5fc5fe81ecaf24c.tar.gz
emacs: Add 'guix-memoized-defalias' macro.
* emacs/guix-utils.el (guix-memoized-defalias): New macro.
  (guix-memoized-font-lock-keywords): New variable.
-rw-r--r--emacs/guix-utils.el21
1 files changed, 21 insertions, 0 deletions
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el
index fb1ca60654..0b8a760af8 100644
--- a/emacs/guix-utils.el
+++ b/emacs/guix-utils.el
@@ -262,6 +262,27 @@ See `defun' for the meaning of arguments."
               (mapconcat #'symbol-name arglist " ")
               docstring)))
 
+(defmacro guix-memoized-defalias (symbol definition &optional docstring)
+  "Set SYMBOL's function definition to memoized version of DEFINITION."
+  (declare (doc-string 3) (indent 1))
+  `(defalias ',symbol
+     (guix-memoize #',definition)
+     ,(or docstring
+          (format "Memoized version of `%S'." definition))))
+
+(defvar guix-memoized-font-lock-keywords
+  (eval-when-compile
+    `((,(rx "("
+            (group "guix-memoized-" (or "defun" "defalias"))
+            symbol-end
+            (zero-or-more blank)
+            (zero-or-one
+             (group (one-or-more (or (syntax word) (syntax symbol))))))
+       (1 font-lock-keyword-face)
+       (2 font-lock-function-name-face nil t)))))
+
+(font-lock-add-keywords 'emacs-lisp-mode guix-memoized-font-lock-keywords)
+
 (provide 'guix-utils)
 
 ;;; guix-utils.el ends here