GNU bug report logs - #24362
25.1.50; Inconsistent docstring between pcase-let and pcase-let*

Previous Next

Package: emacs;

Reported by: Chunyang Xu <xuchunyang.me <at> gmail.com>

Date: Sun, 4 Sep 2016 04:27:02 UTC

Severity: minor

Found in version 25.1.50

Done: Stefan Kangas <stefan <at> marxist.se>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 24362 <at> debbugs.gnu.org (full text, mbox):

From: Robert Cochran <robert-emacs <at> cochranmail.com>
To: Chunyang Xu <xuchunyang.me <at> gmail.com>
Cc: 24362 <at> debbugs.gnu.org
Subject: Re: bug#24362: 25.1.50;
 Inconsistent docstring between pcase-let and pcase-let*
Date: Wed, 14 Sep 2016 16:06:57 -0700
[Message part 1 (text/plain, inline)]
Chunyang Xu <xuchunyang.me <at> gmail.com> writes:

> It looks like, to me, the structure of the BODY arg of these two should
> be the same (accepting a list froms).
>
> (pcase-let ((a 1))
>   (incf a)
>   a)
>      => 2
>
> (pcase-let* ((a 1))
>   (incf a)
>   a)
>      => 2

It appears to be so. Here's what I did:

(pcase-let* ((a 1)
	     (b 2))
  (message "%d" a)
  (message "%d" b))

and ended up with

1
2

in my *Messages* buffer.

> but the docstrings are using the different words.
>
> (pcase-let BINDINGS &rest BODY)
>
> Like `let' but where you can use `pcase' patterns for bindings.
> BODY should be a list of expressions, and BINDINGS should be a list of bindings
>                ^^^^^^^^^^^^^^^^^^^^^
> of the form (PAT EXP).
>
> (pcase-let* BINDINGS &rest BODY)
>
> Like `let*' but where you can use `pcase' patterns for bindings.
> BODY should be an expression, and BINDINGS should be a list of bindings
>                ^^^^^^^^^^^^^
> of the form (PAT EXP).

This patch changes the pcase-let* docstring to match the pcase-let
docstring, but IMO I don't think that the phrase 'a list of expressions'
is exactly the right term for this. That (to me) implies that we are
wrapping the whole body in a list, which you don't.

For example -

; What that phrase implies to me:
(pcase-let ((a 1))
  ((incf a)
   a))

But I have no idea how to better phrase this. For certain, though, they
ought to match because they both behave the same way.

-----

[0001-Fix-docstring-of-pcase-let.patch (text/x-patch, inline)]
From c41219fcbbb01b5a219733ac54ad2cade438513b Mon Sep 17 00:00:00 2001
From: Robert Cochran <robert-git <at> cochranmail.com>
Date: Wed, 14 Sep 2016 15:52:29 -0700
Subject: [PATCH] Fix docstring of pcase-let*

pcase-let*'s docstring could have been taken to mean that the BODY
parameter can only be a single expression, but it can be any numbers of
expressions.  Fix it to be more accurate.

* lisp/emacs-lisp/pcase.el (pcase-let*): Fix docstring to be more
accurate about what the BODY parameter can be.
---
 lisp/emacs-lisp/pcase.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 0b8dddf..2d61642 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -261,7 +261,7 @@ pcase--let*
 ;;;###autoload
 (defmacro pcase-let* (bindings &rest body)
   "Like `let*' but where you can use `pcase' patterns for bindings.
-BODY should be an expression, and BINDINGS should be a list of bindings
+BODY should be a list of expressions, and BINDINGS should be a list of bindings
 of the form (PAT EXP)."
   (declare (indent 1)
            (debug ((&rest (pcase-PAT &optional form)) body)))
-- 
2.7.4

[Message part 3 (text/plain, inline)]
-----

HTH,
-- 
~Robert Cochran

GPG Fingerprint - E778 2DD4 FEA6 6A68 6F26  AD2D E5C3 EB36 4886 8871

This bug report was last modified 5 years and 258 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.