[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#33309: Add flatten-list?
From: |
Michael Albinus |
Subject: |
bug#33309: Add flatten-list? |
Date: |
Tue, 11 Dec 2018 09:21:14 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
Alex Branham <alex.branham@gmail.com> writes:
Hi Alex,
> Yes, that does seem better, updated patch attached. I also updated the
> docstring to explicitly state how it handles nil values and dotted
> pairs.
The docstring doesn't say what happens if TREE isn't a list. Something like
(flatten-tree 42) => (42)
I'm wondering also, whether we shall make removing nil elements optional:
(defun flatten-tree (tree &optional omit-nil)
...
Or, if we expect that removing nil elements shall be default:
(defun flatten-tree (tree &optional keep-nil)
...
> lisp/eshell/em-basic.el | 2 +-
> lisp/eshell/em-dirs.el | 4 ++--
> lisp/eshell/em-term.el | 2 +-
> lisp/eshell/em-tramp.el | 4 ++--
> lisp/eshell/em-unix.el | 22 +++++++++++-----------
> lisp/eshell/em-xtra.el | 2 +-
> lisp/eshell/esh-ext.el | 2 +-
> lisp/eshell/esh-opt.el | 4 ++--
> lisp/eshell/esh-util.el | 12 ++----------
> lisp/gnus/gnus-sum.el | 10 +++++-----
> lisp/gnus/message.el | 12 ++----------
> lisp/gnus/nnimap.el | 2 +-
> lisp/lpr.el | 20 ++------------------
> lisp/net/tramp-compat.el | 13 +------------
> lisp/printing.el | 2 +-
> lisp/progmodes/js.el | 8 ++------
> lisp/subr.el | 20 ++++++++++++++++++++
> test/lisp/subr-tests.el | 13 +++++++++++++
I suppose we need also an entry in etc/NEWS and doc/lispref/lists.texi.
> diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
> index 046966e019..4f99a31e54 100644
> --- a/lisp/net/tramp-compat.el
> +++ b/lisp/net/tramp-compat.el
> @@ -270,18 +270,7 @@ tramp-compat-use-url-tramp-p
> (unload-feature 'tramp-loaddefs 'force)
> (unload-feature 'tramp-compat 'force)))
>
> -;; There does not exist a common `flatten-list' yet, this is discussed
> -;; in Bug#33309. For the time being we implement our own version,
> -;; derived from `eshell-flatten-list'.
> -(defun tramp-compat-flatten-list (args)
> - "Flatten any lists within ARGS, so that there are no sublists."
> - (let ((new-list (list t)))
> - (dolist (a args)
> - (if (and (listp a)
> - (listp (cdr a)))
> - (nconc new-list (tramp-compat-flatten-list a))
> - (nconc new-list (list a))))
> - (cdr new-list)))
> +(define-obsolete-function-alias 'tramp-compat-flatten-list #'flatten-tree
> "27.1")
>
> (provide 'tramp-compat)
Please don't do this. Tramp must support Emacs back to version 24. Once
flatten-tree has hit the git repository, I'll modify tramp-compat.el
accordingly.
> --- a/test/lisp/subr-tests.el
> +++ b/test/lisp/subr-tests.el
> @@ -372,5 +372,18 @@ subr-test--frames-1
> (shell-quote-argument "%ca%")))
> "without-caret %ca%"))))
>
> +(ert-deftest subr-tests-flatten-tree ()
> + "Test `flatten-tree' behavior."
> + (should (equal (flatten-tree '(1 (2 . 3) nil (4 5 (6)) 7))
> + '(1 2 3 4 5 6 7)))
> + (should (equal (flatten-tree '((1 . 2)))
> + '(1 2)))
> + (should (equal (flatten-tree '(1 nil 2))
> + '(1 2)))
> + (should (equal (flatten-tree 42)
> + '(42)))
> + (should (equal (flatten-tree '(1 ("foo" "bar") 2))
> + '(1 "foo" "bar" 2))))
> +
> (provide 'subr-tests)
> ;;; subr-tests.el ends here
I would also add
(should (equal (flatten-tree t)
'(t)))
(should (equal (flatten-tree nil)
nil))
> Alex
Best regards, Michael.
- bug#33309: Add flatten-list?, Michael Albinus, 2018/12/10
- bug#33309: Add flatten-list?, Stefan Monnier, 2018/12/10
- bug#33309: Add flatten-list?, Basil L. Contovounesios, 2018/12/10
- bug#33309: Add flatten-list?, Alex Branham, 2018/12/10
- bug#33309: Add flatten-list?, Basil L. Contovounesios, 2018/12/10
- bug#33309: Add flatten-list?, Stephen Berman, 2018/12/10
- bug#33309: Add flatten-list?,
Michael Albinus <=
- bug#33309: Add flatten-list?, martin rudalics, 2018/12/11