]> git.eshelyaron.com Git - emacs.git/commitdiff
Add seq-into as a public function
authorNicolas Petton <nicolas@petton.fr>
Mon, 9 Mar 2015 11:46:29 +0000 (12:46 +0100)
committerNicolas Petton <nicolas@petton.fr>
Mon, 9 Mar 2015 11:50:24 +0000 (12:50 +0100)
* lisp/emacs-lisp/seq.el: Make seq-into a public function (replacing
seq--into)
* test/automated/seq-tests.el: Add tests for seq-into
* doc/lispref/sequences.texi: Add documentation for seq-into

doc/lispref/ChangeLog
doc/lispref/sequences.texi
lisp/ChangeLog
lisp/emacs-lisp/seq.el
test/ChangeLog
test/automated/seq-tests.el

index 42bff7c865ae74968b013559d9c0ee5feed24038..260656c6cf76fff62e8bbd1b4f4c71d26ae391b1 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-09  Nicolas Petton <nicolas@petton.fr>
+
+       * sequences.texi (seq-into): Add documentation for the new
+       seq-into function.
+
 2015-03-03  Eli Zaretskii  <eliz@gnu.org>
 
        * processes.texi (Synchronous Processes): Update documentation of
index 04404f886e0310b25fee3519a585bfaf87fabcef..1af353590cf34f6f1e0a23a117bf70ba4787b956 100644 (file)
@@ -740,6 +740,28 @@ of @var{sequence}.  Keys are compared using @code{equal}.
 @end example
 @end defun
 
+@defun seq-into sequence type
+  This function converts the sequence @var{sequence} into a sequence
+of type @var{type}.  @var{type} can be one of the following symbols:
+@code{vector}, @code{string} or @code{list}.
+
+@example
+@group
+(seq-into [1 2 3] 'list)
+@result{} (1 2 3)
+@end group
+@group
+(seq-into nil 'vector)
+@result{} []
+@end group
+@group
+(seq-into "hello" 'vector)
+@result{} [104 101 108 108 111]
+@end group
+@end example
+@end defun
+
+
 @defmac seq-doseq (var sequence [result]) body@dots{}
 @cindex sequence iteration
   This macro is like @code{dolist}, except that @var{sequence} can be a list,
index b284ef16eafde816bc8cf7923c93e58bf73d2f03..d8330a46c8956acde785ec935fbbbab069f676fb 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-09  Nicolas Petton <nicolas@petton.fr>
+
+       * emacs-lisp/seq.el (seq-into): New function.
+       Bump seq.el version to 1.3.
+
 2015-03-09  Dmitry Gutov  <dgutov@yandex.ru>
 
        * progmodes/ruby-mode.el (ruby-font-lock-keywords): Don't consider
index ad4c3536b448da4d49e1de66be218ab70471ee1c..59b91408d0941f0d8dc554a96cbf82eb96e34ded 100644 (file)
@@ -4,7 +4,8 @@
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
-;; Version: 1.2
+;; Version: 1.3
+;; Package: seq
 
 ;; Maintainer: emacs-devel@gnu.org
 
@@ -171,7 +172,7 @@ The result is a sequence of the same type as SEQ."
   (if (listp seq)
       (sort (seq-copy seq) pred)
     (let ((result (seq-sort pred (append seq nil))))
-      (seq--into result (type-of seq)))))
+      (seq-into result (type-of seq)))))
 
 (defun seq-contains-p (seq elt &optional testfn)
   "Return the first element in SEQ that equals to ELT.
@@ -265,10 +266,11 @@ See also the function `nreverse', which is used more often."
                  seq)
         (if (listp seq)
             result
-          (seq--into result (type-of seq)))))))
+          (seq-into result (type-of seq)))))))
 
-(defun seq--into (seq type)
-  "Convert the sequence SEQ into a sequence of type TYPE."
+(defun seq-into (seq type)
+  "Convert the sequence SEQ into a sequence of type TYPE.
+TYPE can be one of the following symbols: vector, string or list."
   (pcase type
     (`vector (vconcat seq))
     (`string (concat seq))
index 301cc4046e5e97e79035d242dbb406d8e9a44903..876b9462611e6c794e04b40cd0bb7f3397a12974 100644 (file)
@@ -1,3 +1,7 @@
+2015-03-09  Nicolas Petton <nicolas@petton.fr>
+
+       * automated/seq-tests.el (test-seq-into): Add a test for seq-into.
+
 2015-03-08  Dmitry Gutov  <dgutov@yandex.ru>
 
        * indent/ruby.rb: Add an example for bug#20026.
index badb3267f436d975c53d0da10a4a2e54aca7007d..d3536b6f9a6930127c940429abdc1f33ee56e898 100644 (file)
@@ -228,5 +228,27 @@ Evaluate BODY for each created sequence.
     (should (equal (type-of (seq-reverse seq))
                    (type-of seq)))))
 
+(ert-deftest test-seq-into ()
+  (let* ((vector [1 2 3])
+         (list (seq-into vector 'list)))
+    (should (same-contents-p vector list))
+    (should (listp list)))
+  (let* ((list '(hello world))
+         (vector (seq-into list 'vector)))
+    (should (same-contents-p vector list))
+    (should (vectorp vector)))
+  (let* ((string "hello")
+         (list (seq-into string 'list)))
+    (should (same-contents-p string list))
+    (should (stringp string)))
+  (let* ((string "hello")
+         (vector (seq-into string 'vector)))
+    (should (same-contents-p string vector))
+    (should (stringp string)))
+  (let* ((list nil)
+         (vector (seq-into list 'vector)))
+    (should (same-contents-p list vector))
+    (should (vectorp vector))))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here