Lint maybe.el
This change had rippling implications.
This commit is contained in:
parent
1c87082648
commit
a35f723d92
12 changed files with 53 additions and 49 deletions
|
@ -135,7 +135,7 @@ Returns the first occurrence of K in XS since alists support multiple entries."
|
||||||
"Apply F to the value stored at K in XS.
|
"Apply F to the value stored at K in XS.
|
||||||
If `K' is not in `XS', this function errors. Use `alist/upsert' if you're
|
If `K' is not in `XS', this function errors. Use `alist/upsert' if you're
|
||||||
interested in inserting a value when a key doesn't already exist."
|
interested in inserting a value when a key doesn't already exist."
|
||||||
(if (maybe/nil? (alist/get k xs))
|
(if (maybe-nil? (alist/get k xs))
|
||||||
(error "Refusing to update: key does not exist in alist")
|
(error "Refusing to update: key does not exist in alist")
|
||||||
(alist/set k (funcall f (alist/get k xs)) xs)))
|
(alist/set k (funcall f (alist/get k xs)) xs)))
|
||||||
|
|
||||||
|
@ -183,11 +183,11 @@ Mutative variant of `alist/delete'."
|
||||||
|
|
||||||
(defun alist/has-key? (k xs)
|
(defun alist/has-key? (k xs)
|
||||||
"Return t if XS has a key `equal' to K."
|
"Return t if XS has a key `equal' to K."
|
||||||
(maybe/some? (assoc k xs)))
|
(maybe-some? (assoc k xs)))
|
||||||
|
|
||||||
(defun alist/has-value? (v xs)
|
(defun alist/has-value? (v xs)
|
||||||
"Return t if XS has a value of V."
|
"Return t if XS has a value of V."
|
||||||
(maybe/some? (rassoc v xs)))
|
(maybe-some? (rassoc v xs)))
|
||||||
|
|
||||||
(defun alist/count (xs)
|
(defun alist/count (xs)
|
||||||
"Return the number of entries in XS."
|
"Return the number of entries in XS."
|
||||||
|
|
|
@ -90,7 +90,7 @@ This will ignore Emacs-generated buffers, like *Messages*. It will also ignore
|
||||||
|
|
||||||
(defun buffer/exists? (name)
|
(defun buffer/exists? (name)
|
||||||
"Return t if buffer, NAME, exists."
|
"Return t if buffer, NAME, exists."
|
||||||
(maybe/some? (buffer/find name)))
|
(maybe-some? (buffer/find name)))
|
||||||
|
|
||||||
(defun buffer/new (name)
|
(defun buffer/new (name)
|
||||||
"Return a newly created buffer NAME."
|
"Return a newly created buffer NAME."
|
||||||
|
@ -100,7 +100,7 @@ This will ignore Emacs-generated buffers, like *Messages*. It will also ignore
|
||||||
"Find or create buffer, NAME.
|
"Find or create buffer, NAME.
|
||||||
Return a reference to that buffer."
|
Return a reference to that buffer."
|
||||||
(let ((x (buffer/find name)))
|
(let ((x (buffer/find name)))
|
||||||
(if (maybe/some? x)
|
(if (maybe-some? x)
|
||||||
x
|
x
|
||||||
(buffer/new name))))
|
(buffer/new name))))
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ This function ignores Emacs-generated buffers, i.e. the ones that look like
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((xs (buffer/source-code-buffers))
|
(let* ((xs (buffer/source-code-buffers))
|
||||||
(candidate (list/get 1 xs)))
|
(candidate (list/get 1 xs)))
|
||||||
(prelude/assert (maybe/some? candidate))
|
(prelude/assert (maybe-some? candidate))
|
||||||
(switch-to-buffer candidate)))
|
(switch-to-buffer candidate)))
|
||||||
|
|
||||||
(when buffer/install-kbds?
|
(when buffer/install-kbds?
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defconst constants/ci?
|
(defconst constants/ci?
|
||||||
(maybe/some? (getenv "CI"))
|
(maybe-some? (getenv "CI"))
|
||||||
"True when Emacs is running in CI.")
|
"True when Emacs is running in CI.")
|
||||||
|
|
||||||
(defconst constants/briefcase
|
(defconst constants/briefcase
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
(defun cycle/previous-focus (cycle)
|
(defun cycle/previous-focus (cycle)
|
||||||
"Return the previously focused entry in CYCLE."
|
"Return the previously focused entry in CYCLE."
|
||||||
(let ((i (cycle-previous-index cycle)))
|
(let ((i (cycle-previous-index cycle)))
|
||||||
(if (maybe/some? i)
|
(if (maybe-some? i)
|
||||||
(nth i (cycle-xs cycle))
|
(nth i (cycle-xs cycle))
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
This will error when previous-index is nil. This function mutates the
|
This will error when previous-index is nil. This function mutates the
|
||||||
underlying struct."
|
underlying struct."
|
||||||
(let ((i (cycle-previous-index xs)))
|
(let ((i (cycle-previous-index xs)))
|
||||||
(if (maybe/some? i)
|
(if (maybe-some? i)
|
||||||
(progn
|
(progn
|
||||||
(cycle/jump i xs)
|
(cycle/jump i xs)
|
||||||
(cycle/current xs))
|
(cycle/current xs))
|
||||||
|
@ -148,7 +148,7 @@ ITEM is the first item in XS that t for `equal'."
|
||||||
|
|
||||||
(defun cycle/focused? (xs)
|
(defun cycle/focused? (xs)
|
||||||
"Return t if cycle XS has a non-nil value for current-index."
|
"Return t if cycle XS has a non-nil value for current-index."
|
||||||
(maybe/some? (cycle-current-index xs)))
|
(maybe-some? (cycle-current-index xs)))
|
||||||
|
|
||||||
(defun cycle/append (x xs)
|
(defun cycle/append (x xs)
|
||||||
"Add X to the left of the focused element in XS.
|
"Add X to the left of the focused element in XS.
|
||||||
|
@ -196,7 +196,7 @@ If X is the currently focused value, after it's deleted, current-index will be
|
||||||
|
|
||||||
(when cycle/enable-tests?
|
(when cycle/enable-tests?
|
||||||
(let ((xs (cycle/new 1 2 3)))
|
(let ((xs (cycle/new 1 2 3)))
|
||||||
(prelude/assert (maybe/nil? (cycle/previous-focus xs)))
|
(prelude/assert (maybe-nil? (cycle/previous-focus xs)))
|
||||||
(prelude/assert (= 1 (cycle/current xs)))
|
(prelude/assert (= 1 (cycle/current xs)))
|
||||||
(prelude/assert (= 2 (cycle/next xs)))
|
(prelude/assert (= 2 (cycle/next xs)))
|
||||||
(prelude/assert (= 1 (cycle/previous-focus xs)))
|
(prelude/assert (= 1 (cycle/previous-focus xs)))
|
||||||
|
|
|
@ -86,7 +86,7 @@
|
||||||
|
|
||||||
(defun fonts/set (font &optional size)
|
(defun fonts/set (font &optional size)
|
||||||
"Change the font to `FONT' with option integer, SIZE, in pixels."
|
"Change the font to `FONT' with option integer, SIZE, in pixels."
|
||||||
(if (maybe/some? size)
|
(if (maybe-some? size)
|
||||||
(set-frame-font (string/format "%s %s" font size) nil t)
|
(set-frame-font (string/format "%s %s" font size) nil t)
|
||||||
(set-frame-font font nil t)))
|
(set-frame-font font nil t)))
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
"Resolve an IRC server from a given CHANNEL."
|
"Resolve an IRC server from a given CHANNEL."
|
||||||
(let ((result (alist/find (lambda (k v) (cycle/contains? channel v))
|
(let ((result (alist/find (lambda (k v) (cycle/contains? channel v))
|
||||||
server->channels)))
|
server->channels)))
|
||||||
(prelude/assert (maybe/some? result))
|
(prelude/assert (maybe-some? result))
|
||||||
result))
|
result))
|
||||||
|
|
||||||
(defun irc/channel->cycle (server->channels channel)
|
(defun irc/channel->cycle (server->channels channel)
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
(defun laptop-battery/available? ()
|
(defun laptop-battery/available? ()
|
||||||
"Return t if battery information is available."
|
"Return t if battery information is available."
|
||||||
(maybe/some? battery-status-function))
|
(maybe-some? battery-status-function))
|
||||||
|
|
||||||
(defun laptop-battery/percentage ()
|
(defun laptop-battery/percentage ()
|
||||||
"Return the current percentage of the battery."
|
"Return the current percentage of the battery."
|
||||||
|
|
|
@ -28,13 +28,13 @@
|
||||||
(cl-defun math/triangle-of-power (&key base power result)
|
(cl-defun math/triangle-of-power (&key base power result)
|
||||||
;; TODO: Assert two of three are set.
|
;; TODO: Assert two of three are set.
|
||||||
(cond
|
(cond
|
||||||
((maybe/somes? base power result)
|
((maybe-somes? base power result)
|
||||||
(error "All three arguments should not be set"))
|
(error "All three arguments should not be set"))
|
||||||
((maybe/somes? power result)
|
((maybe-somes? power result)
|
||||||
(message "power and result"))
|
(message "power and result"))
|
||||||
((maybe/somes? base result)
|
((maybe-somes? base result)
|
||||||
(log result base))
|
(log result base))
|
||||||
((maybe/somes? base power)
|
((maybe-somes? base power)
|
||||||
(expt base power))
|
(expt base power))
|
||||||
(t
|
(t
|
||||||
(error "Two of the three arguments must be set"))))
|
(error "Two of the three arguments must be set"))))
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
;;; maybe.el --- Library for dealing with nil values -*- lexical-binding: t -*-
|
;;; maybe.el --- Library for dealing with nil values -*- lexical-binding: t -*-
|
||||||
|
|
||||||
;; Author: William Carroll <wpcarro@gmail.com>
|
;; Author: William Carroll <wpcarro@gmail.com>
|
||||||
|
;; Version: 0.0.1
|
||||||
|
;; Package-Requires: ((emacs "24"))
|
||||||
|
;; Homepage: https://user.git.corp.google.com/wpcarro/briefcase
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;; Inspired by Elm's Maybe library.
|
;; Inspired by Elm's Maybe library.
|
||||||
|
@ -39,36 +43,36 @@
|
||||||
;; Constants
|
;; Constants
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defvar maybe/test? t
|
(defvar maybe--run-tests? t
|
||||||
"When t, run the test suite defined herein.")
|
"When t, run the test suite defined herein.")
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Library
|
;; Library
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defun maybe/nil? (x)
|
(defun maybe-nil? (x)
|
||||||
"Return t if X is nil."
|
"Return t if X is nil."
|
||||||
(eq nil x))
|
(eq nil x))
|
||||||
|
|
||||||
(defun maybe/some? (x)
|
(defun maybe-some? (x)
|
||||||
"Return t when X is non-nil."
|
"Return t when X is non-nil."
|
||||||
(not (maybe/nil? x)))
|
(not (maybe-nil? x)))
|
||||||
|
|
||||||
(defun maybe/nils? (&rest xs)
|
(defun maybe-nils? (&rest xs)
|
||||||
"Return t if all XS are nil."
|
"Return t if all XS are nil."
|
||||||
(list/all? #'maybe/nil? xs))
|
(list/all? #'maybe-nil? xs))
|
||||||
|
|
||||||
(defun maybe/somes? (&rest xs)
|
(defun maybe-somes? (&rest xs)
|
||||||
"Return t if all XS are non-nil."
|
"Return t if all XS are non-nil."
|
||||||
(list/all? #'maybe/some? xs))
|
(list/all? #'maybe-some? xs))
|
||||||
|
|
||||||
(defun maybe/default (default x)
|
(defun maybe-default (default x)
|
||||||
"Return DEFAULT when X is nil."
|
"Return DEFAULT when X is nil."
|
||||||
(if (maybe/nil? x) default x))
|
(if (maybe-nil? x) default x))
|
||||||
|
|
||||||
(defun maybe/map (f x)
|
(defun maybe-map (f x)
|
||||||
"Apply F to X if X is not nil."
|
"Apply F to X if X is not nil."
|
||||||
(if (maybe/some? x)
|
(if (maybe-some? x)
|
||||||
(funcall f x)
|
(funcall f x)
|
||||||
x))
|
x))
|
||||||
|
|
||||||
|
@ -76,27 +80,27 @@
|
||||||
;; Tests
|
;; Tests
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(when maybe/test?
|
(when maybe--run-tests?
|
||||||
;; nil?
|
;; nil?
|
||||||
(prelude/assert (maybe/nil? nil))
|
(prelude/assert (maybe-nil? nil))
|
||||||
(prelude/refute (maybe/nil? t))
|
(prelude/refute (maybe-nil? t))
|
||||||
;; some?
|
;; some?
|
||||||
(prelude/assert (maybe/some? 10))
|
(prelude/assert (maybe-some? 10))
|
||||||
(prelude/refute (maybe/some? nil))
|
(prelude/refute (maybe-some? nil))
|
||||||
;; nils?
|
;; nils?
|
||||||
(prelude/assert (maybe/nils? nil nil nil nil))
|
(prelude/assert (maybe-nils? nil nil nil nil))
|
||||||
(prelude/refute (maybe/nils? nil t nil t))
|
(prelude/refute (maybe-nils? nil t nil t))
|
||||||
;; somes?
|
;; somes?
|
||||||
(prelude/assert (maybe/somes? t 10 '(1 2 3) "some"))
|
(prelude/assert (maybe-somes? t 10 '(1 2 3) "some"))
|
||||||
(prelude/refute (maybe/somes? t nil '(1 2 3) "some"))
|
(prelude/refute (maybe-somes? t nil '(1 2 3) "some"))
|
||||||
;; default
|
;; default
|
||||||
(prelude/assert
|
(prelude/assert
|
||||||
(and (= 0 (maybe/default 5 0))
|
(and (= 0 (maybe-default 5 0))
|
||||||
(= 5 (maybe/default 5 nil))))
|
(= 5 (maybe-default 5 nil))))
|
||||||
;; map
|
;; map
|
||||||
(prelude/assert
|
(prelude/assert
|
||||||
(and (= 2 (maybe/map #'1+ 1))
|
(and (= 2 (maybe-map #'1+ 1))
|
||||||
(eq nil (maybe/map #'1+ nil)))))
|
(eq nil (maybe-map #'1+ nil)))))
|
||||||
|
|
||||||
(provide 'maybe)
|
(provide 'maybe)
|
||||||
;;; maybe.el ends here
|
;;; maybe.el ends here
|
||||||
|
|
|
@ -95,7 +95,7 @@ These are strict assertions and purposely do not rely on truthiness."
|
||||||
(add-hook 'linum-mode-hook
|
(add-hook 'linum-mode-hook
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(setq linum/safe? t)
|
(setq linum/safe? t)
|
||||||
(when (maybe/some? linum/mru-color)
|
(when (maybe-some? linum/mru-color)
|
||||||
(set-face-foreground 'linum linum/mru-color))))
|
(set-face-foreground 'linum linum/mru-color))))
|
||||||
|
|
||||||
(defun prelude/set-line-number-color (color)
|
(defun prelude/set-line-number-color (color)
|
||||||
|
@ -137,7 +137,7 @@ This is a wrapper around `start-process' that has an API that resembles
|
||||||
"Return t if CLI tool NAME exists according to `exec-path'."
|
"Return t if CLI tool NAME exists according to `exec-path'."
|
||||||
(let ((file (locate-file name exec-path)))
|
(let ((file (locate-file name exec-path)))
|
||||||
(require 'maybe)
|
(require 'maybe)
|
||||||
(if (maybe/some? file)
|
(if (maybe-some? file)
|
||||||
(f-exists? file)
|
(f-exists? file)
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ Depth-first traversals have the advantage of typically consuming less memory
|
||||||
(cl-labels ((do-reduce-depth
|
(cl-labels ((do-reduce-depth
|
||||||
(acc f node depth)
|
(acc f node depth)
|
||||||
(let ((acc-new (funcall f node acc depth)))
|
(let ((acc-new (funcall f node acc depth)))
|
||||||
(if (or (maybe/nil? node)
|
(if (or (maybe-nil? node)
|
||||||
(tree-leaf? node))
|
(tree-leaf? node))
|
||||||
acc-new
|
acc-new
|
||||||
(list/reduce
|
(list/reduce
|
||||||
|
@ -98,7 +98,7 @@ Depth-first traversals have the advantage of typically consuming less memory
|
||||||
(tree-reduce-depth
|
(tree-reduce-depth
|
||||||
'()
|
'()
|
||||||
(lambda (node acc depth)
|
(lambda (node acc depth)
|
||||||
(if (or (maybe/nil? node)
|
(if (or (maybe-nil? node)
|
||||||
(tree-leaf? node))
|
(tree-leaf? node))
|
||||||
(list/cons depth acc)
|
(list/cons depth acc)
|
||||||
acc))
|
acc))
|
||||||
|
@ -139,7 +139,7 @@ generating test data. Warning this function can overflow the stack."
|
||||||
|
|
||||||
(defun tree-leaf? (node)
|
(defun tree-leaf? (node)
|
||||||
"Return t if NODE has no children."
|
"Return t if NODE has no children."
|
||||||
(maybe/nil? (node-children node)))
|
(maybe-nil? (node-children node)))
|
||||||
|
|
||||||
(defun tree-balanced? (n xs)
|
(defun tree-balanced? (n xs)
|
||||||
"Return t if the tree, XS, is balanced.
|
"Return t if the tree, XS, is balanced.
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
(defun window-find (name)
|
(defun window-find (name)
|
||||||
"Find a window by the NAME of the buffer it's hosting."
|
"Find a window by the NAME of the buffer it's hosting."
|
||||||
(let ((buffer (get-buffer name)))
|
(let ((buffer (get-buffer name)))
|
||||||
(if (maybe/some? buffer)
|
(if (maybe-some? buffer)
|
||||||
(get-buffer-window buffer)
|
(get-buffer-window buffer)
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue