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 <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									7410928b5b
								
							
						
					
					
						commit
						8989dad5ed
					
				
					 4 changed files with 57 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -29,6 +29,7 @@ let
 | 
			
		|||
      list
 | 
			
		||||
      maybe
 | 
			
		||||
      set
 | 
			
		||||
      string
 | 
			
		||||
      struct
 | 
			
		||||
      zle
 | 
			
		||||
    ]) ++
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								users/wpcarro/emacs/pkgs/string/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								users/wpcarro/emacs/pkgs/string/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
  '';
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
							
								
								
									
										22
									
								
								users/wpcarro/emacs/pkgs/string/tests.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								users/wpcarro/emacs/pkgs/string/tests.el
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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")))
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue