From 8989dad5ed88d55e24d5f3047597053232068c11 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Fri, 29 Jul 2022 18:56:06 -0700 Subject: [PATCH] feat(wpcarro/emacs): Package string.el Mostly just a wrapper around s.el (for now?). Eventually I'd like to prune the dependency on dash.el (and maybe s.el). Change-Id: I5c2ba256524bedd93fcd13933fdbd95b1ddff6f8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6002 Reviewed-by: wpcarro Autosubmit: wpcarro Tested-by: BuildkiteCI --- users/wpcarro/emacs/default.nix | 1 + users/wpcarro/emacs/pkgs/string/default.nix | 27 +++++++++++++++++++ .../{.emacs.d/wpc => pkgs/string}/string.el | 26 +++++------------- users/wpcarro/emacs/pkgs/string/tests.el | 22 +++++++++++++++ 4 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 users/wpcarro/emacs/pkgs/string/default.nix rename users/wpcarro/emacs/{.emacs.d/wpc => pkgs/string}/string.el (85%) create mode 100644 users/wpcarro/emacs/pkgs/string/tests.el diff --git a/users/wpcarro/emacs/default.nix b/users/wpcarro/emacs/default.nix index af8198d51..78d3b1b37 100644 --- a/users/wpcarro/emacs/default.nix +++ b/users/wpcarro/emacs/default.nix @@ -29,6 +29,7 @@ let list maybe set + string struct zle ]) ++ diff --git a/users/wpcarro/emacs/pkgs/string/default.nix b/users/wpcarro/emacs/pkgs/string/default.nix new file mode 100644 index 000000000..406cccdfc --- /dev/null +++ b/users/wpcarro/emacs/pkgs/string/default.nix @@ -0,0 +1,27 @@ +{ pkgs, depot, ... }: + +let + string = pkgs.callPackage + ({ emacsPackages }: + emacsPackages.trivialBuild { + pname = "string"; + version = "1.0.0"; + src = ./string.el; + packageRequires = [ + emacsPackages.dash + emacsPackages.s + ]; + }) + { }; + + emacs = (pkgs.emacsPackagesFor pkgs.emacs28).emacsWithPackages (epkgs: [ + string + ]); +in +string.overrideAttrs (_old: { + doCheck = true; + checkPhase = '' + ${emacs}/bin/emacs -batch \ + -l ert -l ${./tests.el} -f ert-run-tests-batch-and-exit + ''; +}) diff --git a/users/wpcarro/emacs/.emacs.d/wpc/string.el b/users/wpcarro/emacs/pkgs/string/string.el similarity index 85% rename from users/wpcarro/emacs/.emacs.d/wpc/string.el rename to users/wpcarro/emacs/pkgs/string/string.el index 7e3f10c75..30da1805e 100644 --- a/users/wpcarro/emacs/.emacs.d/wpc/string.el +++ b/users/wpcarro/emacs/pkgs/string/string.el @@ -5,7 +5,7 @@ ;; Package-Requires: ((emacs "24")) ;;; Commentary: -;; Library for working with string. +;; Library for working with strings. ;;; Code: @@ -15,31 +15,15 @@ (require 's) (require 'dash) -;; TODO: Resolve the circular dependency that this introduces. -;; (require 'prelude) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Library ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun string-contains? (c x) - "Return t if X is in C." - (s-contains? c x)) - -(defun string-hookify (x) - "Append \"-hook\" to X." - (s-append "-hook" x)) - (defun string-split (y x) "Map string X into a list of strings that were separated by Y." (s-split y x)) -(defun string-ensure-hookified (x) - "Ensure that X has \"-hook\" appended to it." - (if (s-ends-with? "-hook" x) - x - (string-hookify x))) - (defun string-format (x &rest args) "Format template string X with ARGS." (apply #'format (cons x args))) @@ -48,11 +32,11 @@ "Joins `STRINGS' into onto string." (apply #'s-concat strings)) -(defun string-->symbol (string) +(defun string-to-symbol (string) "Maps `STRING' to a symbol." (intern string)) -(defun string-<-symbol (symbol) +(defun string-from-symbol (symbol) "Maps `SYMBOL' into a string." (symbol-name symbol)) @@ -106,5 +90,9 @@ "Return t if X is a string." (stringp x)) +(defun string-contains? (c x) + "Return t if X is in C." + (s-contains? c x)) + (provide 'string) ;;; string.el ends here diff --git a/users/wpcarro/emacs/pkgs/string/tests.el b/users/wpcarro/emacs/pkgs/string/tests.el new file mode 100644 index 000000000..92290c6db --- /dev/null +++ b/users/wpcarro/emacs/pkgs/string/tests.el @@ -0,0 +1,22 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Dependencies +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'ert) +(require 'string) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(ert-deftest string-caps->kebab () + (string= "foo-bar-baz" (string-caps->kebab "FOO_BAR_BAZ"))) + +(ert-deftest string-kebab->caps () + (string= "FOO_BAR_BAZ" (string-kebab->caps "foo-bar-baz"))) + +(ert-deftest string-lower->caps () + (string= "FOO_BAR_BAZ" (string-lower->caps "foo bar baz"))) + +(ert-deftest string-lower->kebab () + (string= "foo-bar-baz" (string-lower->kebab "foo bar baz")))