diff options
author | William Carroll <wpcarro@gmail.com> | 2020-08-31T22·28+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-08-31T22·33+0100 |
commit | a638e15c0dd14a25e6f032b08de5ee1575677497 (patch) | |
tree | 3c4bdda33fc80a52242c7016c11be4e981d7d2ac /emacs/.emacs.d/wpc/struct.el | |
parent | 158f810981fa0a77de76f0f7e07b60482a9ba10e (diff) |
Lint string, macros.el
More of the same type of linting... basically preferring `namespace-` instead of `namespace/`.
Diffstat (limited to 'emacs/.emacs.d/wpc/struct.el')
-rw-r--r-- | emacs/.emacs.d/wpc/struct.el | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/emacs/.emacs.d/wpc/struct.el b/emacs/.emacs.d/wpc/struct.el index dd1bcd00ef59..35957e834449 100644 --- a/emacs/.emacs.d/wpc/struct.el +++ b/emacs/.emacs.d/wpc/struct.el @@ -1,5 +1,9 @@ ;;; struct.el --- Helpers for working with structs -*- lexical-binding: t -*- + ;; Author: William Carroll <wpcarro@gmail.com> +;; Version: 0.0.1 +;; URL: https://git.wpcarro.dev/wpcarro/briefcase +;; Package-Requires: ((emacs "24.3")) ;;; Commentary: ;; Provides new macros for working with structs. Also provides adapter @@ -11,12 +15,6 @@ ;;; Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Wish list -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; - TODO: Replace `symbol-name' and `intern' calls with isomorphism. - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Dependencies ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -27,44 +25,44 @@ ;; Library ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defvar struct/enable-tests? t +(defvar struct--enable-tests? t "When t, run the test suite defined herein.") -(defmacro struct/update (type field f xs) +(defmacro struct-update (type field f xs) "Apply F to FIELD in XS, which is a struct of TYPE. This is immutable." (let ((copier (->> type symbol-name - (string/prepend "copy-") + (string-prepend "copy-") intern)) (accessor (->> field symbol-name - (string/prepend (string/concat (symbol-name type) "-")) + (string-prepend (string-concat (symbol-name type) "-")) intern))) `(let ((copy (,copier ,xs))) (setf (,accessor copy) (funcall ,f (,accessor copy))) copy))) -(defmacro struct/set (type field x xs) +(defmacro struct-set (type field x xs) "Immutably set FIELD in XS (struct TYPE) to X." (let ((copier (->> type symbol-name - (string/prepend "copy-") + (string-prepend "copy-") intern)) (accessor (->> field symbol-name - (string/prepend (string/concat (symbol-name type) "-")) + (string-prepend (string-concat (symbol-name type) "-")) intern))) `(let ((copy (,copier ,xs))) (setf (,accessor copy) ,x) copy))) -(defmacro struct/set! (type field x xs) +(defmacro struct-set! (type field x xs) "Set FIELD in XS (struct TYPE) to X mutably. This is an adapter interface to `setf'." (let ((accessor (->> field symbol-name - (string/prepend (string/concat (symbol-name type) "-")) + (string-prepend (string-concat (symbol-name type) "-")) intern))) `(progn (setf (,accessor ,xs) ,x) @@ -74,14 +72,14 @@ This is an adapter interface to `setf'." ;; Tests ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(when struct/enable-tests? +(when struct--enable-tests? (cl-defstruct dummy name age) - (defvar test-dummy (make-dummy :name "Roofus" :age 19)) - (struct/set! dummy name "Doofus" test-dummy) - (prelude-assert (string= "Doofus" (dummy-name test-dummy))) - (let ((result (struct/set dummy name "Shoofus" test-dummy))) - ;; Test the immutability of `struct/set' - (prelude-assert (string= "Doofus" (dummy-name test-dummy))) + (defvar struct--test-dummy (make-dummy :name "Roofus" :age 19)) + (struct-set! dummy name "Doofus" struct--test-dummy) + (prelude-assert (string= "Doofus" (dummy-name struct--test-dummy))) + (let ((result (struct-set dummy name "Shoofus" struct--test-dummy))) + ;; Test the immutability of `struct-set' + (prelude-assert (string= "Doofus" (dummy-name struct--test-dummy))) (prelude-assert (string= "Shoofus" (dummy-name result))))) (provide 'struct) |