Commit 1013e039 authored by Basil L. Contovounesios's avatar Basil L. Contovounesios Committed by Stefan Monnier

Tweak subr-x.el substring functions

* lisp/emacs-lisp/subr-x.el (string-join): #'-quote function symbol.
(string-trim-left, string-trim-right):
Make better use of substring for minor speedup.
* test/lisp/emacs-lisp/subr-x-tests.el
(subr-x-test-string-trim-left, subr-x-test-string-trim-right)
(subr-x-test-string-remove-prefix)
(subr-x-test-string-remove-suffix): New tests.
parent 34eba3e3
......@@ -211,7 +211,7 @@ The variable list SPEC is the same as in `if-let'."
(defsubst string-join (strings &optional separator)
"Join all STRINGS using SEPARATOR."
(mapconcat 'identity strings separator))
(mapconcat #'identity strings separator))
(define-obsolete-function-alias 'string-reverse 'reverse "25.1")
......@@ -219,17 +219,17 @@ The variable list SPEC is the same as in `if-let'."
"Trim STRING of leading string matching REGEXP.
REGEXP defaults to \"[ \\t\\n\\r]+\"."
(if (string-match (concat "\\`\\(?:" (or regexp "[ \t\n\r]+")"\\)") string)
(replace-match "" t t string)
(if (string-match (concat "\\`\\(?:" (or regexp "[ \t\n\r]+") "\\)") string)
(substring string (match-end 0))
string))
(defsubst string-trim-right (string &optional regexp)
"Trim STRING of trailing string matching REGEXP.
REGEXP defaults to \"[ \\t\\n\\r]+\"."
(if (string-match (concat "\\(?:" (or regexp "[ \t\n\r]+") "\\)\\'") string)
(replace-match "" t t string)
string))
(let ((i (string-match-p (concat "\\(?:" (or regexp "[ \t\n\r]+") "\\)\\'")
string)))
(if i (substring string 0 i) string)))
(defsubst string-trim (string &optional trim-left trim-right)
"Trim STRING of leading and trailing strings matching TRIM-LEFT and TRIM-RIGHT.
......
......@@ -532,6 +532,53 @@
(format "abs sum is: %s"))
"abs sum is: 15")))
;; Substring tests
(ert-deftest subr-x-test-string-trim-left ()
"Test `string-trim-left' behavior."
(should (equal (string-trim-left "") ""))
(should (equal (string-trim-left " \t\n\r") ""))
(should (equal (string-trim-left " \t\n\ra") "a"))
(should (equal (string-trim-left "a \t\n\r") "a \t\n\r"))
(should (equal (string-trim-left "" "") ""))
(should (equal (string-trim-left "a" "") "a"))
(should (equal (string-trim-left "aa" "a*") ""))
(should (equal (string-trim-left "ba" "a*") "ba"))
(should (equal (string-trim-left "aa" "a*?") "aa"))
(should (equal (string-trim-left "aa" "a+?") "a")))
(ert-deftest subr-x-test-string-trim-right ()
"Test `string-trim-right' behavior."
(should (equal (string-trim-right "") ""))
(should (equal (string-trim-right " \t\n\r") ""))
(should (equal (string-trim-right " \t\n\ra") " \t\n\ra"))
(should (equal (string-trim-right "a \t\n\r") "a"))
(should (equal (string-trim-right "" "") ""))
(should (equal (string-trim-right "a" "") "a"))
(should (equal (string-trim-right "aa" "a*") ""))
(should (equal (string-trim-right "ab" "a*") "ab"))
(should (equal (string-trim-right "aa" "a*?") "")))
(ert-deftest subr-x-test-string-remove-prefix ()
"Test `string-remove-prefix' behavior."
(should (equal (string-remove-prefix "" "") ""))
(should (equal (string-remove-prefix "" "a") "a"))
(should (equal (string-remove-prefix "a" "") ""))
(should (equal (string-remove-prefix "a" "b") "b"))
(should (equal (string-remove-prefix "a" "a") ""))
(should (equal (string-remove-prefix "a" "aa") "a"))
(should (equal (string-remove-prefix "a" "ab") "b")))
(ert-deftest subr-x-test-string-remove-suffix ()
"Test `string-remove-suffix' behavior."
(should (equal (string-remove-suffix "" "") ""))
(should (equal (string-remove-suffix "" "a") "a"))
(should (equal (string-remove-suffix "a" "") ""))
(should (equal (string-remove-suffix "a" "b") "b"))
(should (equal (string-remove-suffix "a" "a") ""))
(should (equal (string-remove-suffix "a" "aa") "a"))
(should (equal (string-remove-suffix "a" "ba") "b")))
(provide 'subr-x-tests)
;;; subr-x-tests.el ends here
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment