GNU bug report logs - #56297
Guix style imperfections

Previous Next

Package: guix;

Reported by: Maxime Devos <maximedevos <at> telenet.be>

Date: Wed, 29 Jun 2022 09:34:02 UTC

Severity: normal

To reply to this bug, email your comments to 56297 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 09:34:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Maxime Devos <maximedevos <at> telenet.be>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Wed, 29 Jun 2022 09:34:02 GMT) Full text and rfc822 format available.

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

From: Maxime Devos <maximedevos <at> telenet.be>
To: bug-guix <at> gnu.org
Subject: Guix style imperfections
Date: Wed, 29 Jun 2022 11:33:05 +0200
[Message part 1 (text/plain, inline)]
Hi,

"guix style" occasionally makes some decision that seem a bit
questionable to me.  More concretely, copy the definition of guile-
next, put it in a .scm and rename it, and run
"guix style -L . guile-next-styleme".  I get:

> (define-module (test))
> (use-modules (guix packages) (guix git-download) (gnu packages autotools) (gnu packages guile) (guix utils)
> (define-public guile-next
>  (let ((version "3.0.7") (revision "0")
>        (commit "d70c1dbebf9ac0fd45af4578c23983ec4a7da535"))

Conventionally 'revision' is put on another line -- for these kind of let bindings,
(maybe all?), I would recommend to put all of them on separate lines.

>    (package
>      (inherit guile-3.0)
>      (name "guile-next-styleme")
>      (version (git-version version revision commit))
>      (source [snip, LGTM])
>      (arguments
>       (substitute-keyword-arguments (package-arguments guile-3.0)
>         ((#:phases phases
>           '%standard-phases) `(modify-phases ,phases

Put %standard-phases on the same line ad #:phases phases and `(modify-phases ,phases
on a new lineg 
>                                 (add-before 'check 'skip-failing-tests
>                                   (lambda _
>                                     (substitute* "test-suite/standalone/test-out-of-memory"
>                                       (("!#") "!#
>
>(exit 77)
>"))

I'd prefer the original "!#\n\n(exit 77)\n" here, but I don't know if that's
something 'Guix style' could feasibly do (there might be situations where a
newline might be appropriate, how could "guix style" which is the case?).

>                                     (delete-file
>                                      "test-suite/tests/version.test") #t))))))

(Would be nice if "guix style" could be taught to remove those #t, but that seems
more a feature limitation than a bug to me.)

>      (native-inputs (modify-inputs (package-native-inputs guile-3.0)
>                       (prepend autoconf
>                                automake
>                                libtool
>                                flex
>                                gnu-gettext
>                                texinfo
>                                gperf)))

I'd consider it tidier to put (modify-inputs ...) on a new line

>     (synopsis "Development version of GNU Guile"))))

Question: do people agree with these style choices?

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 10:16:02 GMT) Full text and rfc822 format available.

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

From: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>
To: Maxime Devos <maximedevos <at> telenet.be>, 56297 <at> debbugs.gnu.org
Subject: Re: Guix style imperfections
Date: Wed, 29 Jun 2022 12:15:02 +0200
Am Mittwoch, dem 29.06.2022 um 11:33 +0200 schrieb Maxime Devos:
> Hi,
> 
> "guix style" occasionally makes some decision that seem a bit
> questionable to me.  More concretely, copy the definition of guile-
> next, put it in a .scm and rename it, and run
> "guix style -L . guile-next-styleme".  I get:
Before commenting on the individual points, I do think in general guix
style needs to have a "lax" mode and a "strict" mode where the latter
is enabled via "--strict" and keeps certain snippets as-is.  All
elements that save vertical space at the cost of horizontal space
should be disabled in strict mode, whereas they might be acceptable in
lax mode.

> > (define-module (test))
> > (use-modules (guix packages) (guix git-download) (gnu packages
> > autotools) (gnu packages guile) (guix utils)
> > (define-public guile-next
> >  (let ((version "3.0.7") (revision "0")
> >        (commit "d70c1dbebf9ac0fd45af4578c23983ec4a7da535"))
> 
> Conventionally 'revision' is put on another line -- for these kind of
> let bindings, (maybe all?), I would recommend to put all of them on
> separate lines.
Agree.

> >    (package
> >      (inherit guile-3.0)
> >      (name "guile-next-styleme")
> >      (version (git-version version revision commit))
> >      (source [snip, LGTM])
> >      (arguments
> >       (substitute-keyword-arguments (package-arguments guile-3.0)
> >         ((#:phases phases
> >           '%standard-phases) `(modify-phases ,phases
> 
> Put %standard-phases on the same line ad #:phases phases and `(modify-
> phases ,phases on a new line
Agree.  What's even the point the current style tries to make?

> >                                 (add-before 'check 'skip-failing-
> > tests
> >                                   (lambda _
> >                                     (substitute* "test-
> > suite/standalone/test-out-of-memory"
> >                                       (("!#") "!#
> > 
> > (exit 77)
> > "))
> 
> I'd prefer the original "!#\n\n(exit 77)\n" here, but I don't know if
> that's something 'Guix style' could feasibly do (there might be
> situations where a newline might be appropriate, how could "guix style"
> which is the case?).
I'd prefer if strict mode typed those out, but we can keep strings "as-
is" in lax mode, supposing they don't grow beyond the horizontal limit.

> >                                     (delete-file
> >                                      "test-suite/tests/version.test")
> > #t))))))
> 
> (Would be nice if "guix style" could be taught to remove those #t, but
> that seems more a feature limitation than a bug to me.)
It can still do better by not contracting them imho.

> >      (native-inputs (modify-inputs (package-native-inputs guile-3.0)
> >                       (prepend autoconf
> >                                automake
> >                                libtool
> >                                flex
> >                                gnu-gettext
> >                                texinfo
> >                                gperf)))
> 
> I'd consider it tidier to put (modify-inputs ...) on a new line
Here, it depends.  I think I'd write this as 

     (native-inputs 
       (modify-inputs (package-native-inputs guile-3.0)
         (prepend autoconf automake libtool
                  flex gperf
                  gnu-gettext texinfo)))

> >     (synopsis "Development version of GNU Guile"))))
> 
> Question: do people agree with these style choices?
I think some people might actually be okay with a few or even all of
them (juding by how many submit collapsed lets), but I'd like to point
out that they break with Lisp coding guidelines for no good reason.

Regarding the optimization of vertical space, I do think that guix
lacks semantic information to make meaningful choices and thus ought to
either step back when an "informed" user invokes the tool or strictly
take the "least optimal, but correct" approach in strict mode.

Cheers




Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 10:19:02 GMT) Full text and rfc822 format available.

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

From: Maxime Devos <maximedevos <at> telenet.be>
To: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>, 
 56297 <at> debbugs.gnu.org
Subject: Re: Guix style imperfections
Date: Wed, 29 Jun 2022 12:18:07 +0200
[Message part 1 (text/plain, inline)]
Liliana Marie Prikler schreef op wo 29-06-2022 om 12:15 [+0200]:
> Here, it depends.  I think I'd write this as 
> 
>      (native-inputs 
>        (modify-inputs (package-native-inputs guile-3.0)
>          (prepend autoconf automake libtool
>                   flex gperf
>                   gnu-gettext texinfo)))

FWIW, I was thinking of

   (native-inputs
     (modify-inputs [...]
       (prepend autoconf
                automake
                libtool
                flex gperf
                gnu-gettext
                texinfo)))

, I haven't really thought about putting multiple inputs on a single
line myself.

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 10:20:02 GMT) Full text and rfc822 format available.

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

From: Maxime Devos <maximedevos <at> telenet.be>
To: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>, 
 56297 <at> debbugs.gnu.org
Subject: Re: Guix style imperfections
Date: Wed, 29 Jun 2022 12:19:11 +0200
[Message part 1 (text/plain, inline)]
Liliana Marie Prikler schreef op wo 29-06-2022 om 12:15 [+0200]:
> > >                                     (delete-file
> > >                                      "test-
> > > suite/tests/version.test")
> > > #t))))))
> > 
> > (Would be nice if "guix style" could be taught to remove those #t,
> > but
> > that seems more a feature limitation than a bug to me.)
> It can still do better by not contracting them imho.

TBC, do you mean doing #t -> #true, #f -> #false?

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 10:21:01 GMT) Full text and rfc822 format available.

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

From: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>
To: Maxime Devos <maximedevos <at> telenet.be>, 56297 <at> debbugs.gnu.org
Subject: Re: Guix style imperfections
Date: Wed, 29 Jun 2022 12:20:15 +0200
Am Mittwoch, dem 29.06.2022 um 12:18 +0200 schrieb Maxime Devos:
> Liliana Marie Prikler schreef op wo 29-06-2022 om 12:15 [+0200]:
> > Here, it depends.  I think I'd write this as 
> > 
> >      (native-inputs 
> >        (modify-inputs (package-native-inputs guile-3.0)
> >          (prepend autoconf automake libtool
> >                   flex gperf
> >                   gnu-gettext texinfo)))
> 
> FWIW, I was thinking of
> 
>    (native-inputs
>      (modify-inputs [...]
>        (prepend autoconf
>                 automake
>                 libtool
>                 flex gperf
>                 gnu-gettext
>                 texinfo)))
> 
> , I haven't really thought about putting multiple inputs on a single
> line myself.
That ought to be the strict suggestion; the variant I posted above
should simply be seen as "acceptable" in lax mode for not breaking the
horizontal space limit.




Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Wed, 29 Jun 2022 10:26:02 GMT) Full text and rfc822 format available.

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

From: Liliana Marie Prikler <liliana.prikler <at> ist.tugraz.at>
To: Maxime Devos <maximedevos <at> telenet.be>, 56297 <at> debbugs.gnu.org
Subject: Re: Guix style imperfections
Date: Wed, 29 Jun 2022 12:25:04 +0200
Am Mittwoch, dem 29.06.2022 um 12:19 +0200 schrieb Maxime Devos:
> Liliana Marie Prikler schreef op wo 29-06-2022 om 12:15 [+0200]:
> > > >                                     (delete-file
> > > >                                      "test-
> > > > suite/tests/version.test")
> > > > #t))))))
> > > 
> > > (Would be nice if "guix style" could be taught to remove those
> > > #t,
> > > but
> > > that seems more a feature limitation than a bug to me.)
> > It can still do better by not contracting them imho.
> 
> TBC, do you mean doing #t -> #true, #f -> #false?
I mean leaving them on an extra line.  The current style tool mostly
errs when contracting multiple lines, which imho should not be its
task.

The problem that is solved here, is that people sometimes (particularly
in the uri field of the source) make these contractions for style
reasons.  Guix style, having been taught that, tries to extrapolate
this to all fields.

Cheers





Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Sat, 02 Jul 2022 10:12:01 GMT) Full text and rfc822 format available.

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

From: Ludovic Courtès <ludo <at> gnu.org>
To: Maxime Devos <maximedevos <at> telenet.be>
Cc: 56297 <at> debbugs.gnu.org
Subject: Re: bug#56297: Guix style imperfections
Date: Sat, 02 Jul 2022 12:11:21 +0200
Hi,

Maxime Devos <maximedevos <at> telenet.be> skribis:

> "guix style" occasionally makes some decision that seem a bit
> questionable to me.

Let’s keep in mind that some are bugs/limitations that can be fixed,
while others cannot really be addressed because our tastes vary
depending on context and the pretty printer could hardly be made smart
enough to distinguish all the subtleties.

>> (define-public guile-next
>>  (let ((version "3.0.7") (revision "0")
>>        (commit "d70c1dbebf9ac0fd45af4578c23983ec4a7da535"))
>
> Conventionally 'revision' is put on another line -- for these kind of let bindings,
> (maybe all?), I would recommend to put all of them on separate lines.

This one is a bug IMO: ‘let’ bindings should be treated specially, and
currently they’re not.

>>       (substitute-keyword-arguments (package-arguments guile-3.0)
>>         ((#:phases phases
>>           '%standard-phases) `(modify-phases ,phases
>
> Put %standard-phases on the same line ad #:phases phases and `(modify-phases ,phases
> on a new lineg 

OK.

>>                                 (add-before 'check 'skip-failing-tests
>>                                   (lambda _
>>                                     (substitute* "test-suite/standalone/test-out-of-memory"
>>                                       (("!#") "!#
>>
>>(exit 77)
>>"))
>
> I'd prefer the original "!#\n\n(exit 77)\n" here, but I don't know if that's
> something 'Guix style' could feasibly do (there might be situations where a
> newline might be appropriate, how could "guix style" which is the case?).

Exactly: in synopses/descriptions, we do want to print newlines as-is
(see ‘tests/style.scm’).

Perhaps we could come up with heuristics that make different choices
depending on context, but that sounds tricky.

>>                                     (delete-file
>>                                      "test-suite/tests/version.test") #t))))))
>
> (Would be nice if "guix style" could be taught to remove those #t, but that seems
> more a feature limitation than a bug to me.)

That could be the job of a different style rule (the ‘-S’ option).

>>      (native-inputs (modify-inputs (package-native-inputs guile-3.0)
>>                       (prepend autoconf
>>                                automake
>>                                libtool
>>                                flex
>>                                gnu-gettext
>>                                texinfo
>>                                gperf)))
>
> I'd consider it tidier to put (modify-inputs ...) on a new line

Dunno it’s a matter of taste.  :-)

Ludo’.




Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Mon, 04 Jul 2022 21:42:02 GMT) Full text and rfc822 format available.

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

From: Ludovic Courtès <ludo <at> gnu.org>
To: Maxime Devos <maximedevos <at> telenet.be>
Cc: 56297 <at> debbugs.gnu.org
Subject: Re: bug#56297: Guix style imperfections
Date: Mon, 04 Jul 2022 23:41:40 +0200
Hi,

Ludovic Courtès <ludo <at> gnu.org> skribis:

>>> (define-public guile-next
>>>  (let ((version "3.0.7") (revision "0")
>>>        (commit "d70c1dbebf9ac0fd45af4578c23983ec4a7da535"))
>>
>> Conventionally 'revision' is put on another line -- for these kind of let bindings,
>> (maybe all?), I would recommend to put all of them on separate lines.
>
> This one is a bug IMO: ‘let’ bindings should be treated specially, and
> currently they’re not.

Commit 8d9291bd2c36810be50ea340cefa481a42c60a2b fixes this, and…

>>>       (substitute-keyword-arguments (package-arguments guile-3.0)
>>>         ((#:phases phases
>>>           '%standard-phases) `(modify-phases ,phases
>>
>> Put %standard-phases on the same line ad #:phases phases and `(modify-phases ,phases
>> on a new lineg 

… the second part of this one.

Ludo’.




Information forwarded to bug-guix <at> gnu.org:
bug#56297; Package guix. (Tue, 19 Jul 2022 13:41:01 GMT) Full text and rfc822 format available.

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

From: Maxime Devos <maximedevos <at> telenet.be>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 56297 <at> debbugs.gnu.org
Subject: Re: bug#56297: Guix style imperfections
Date: Tue, 19 Jul 2022 15:40:46 +0200
Ludovic Courtès schreef op ma 04-07-2022 om 23:41 [+0200]:
> 
> Commit 8d9291bd2c36810be50ea340cefa481a42c60a2b fixes this [...]

Some issues remain, but nice!




This bug report was last modified 2 years and 330 days ago.

Previous Next


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