GNU bug report logs - #59256
Emacs-guix tab-completion returns gexp error

Previous Next

Package: guix;

Reported by: Joshua Hecker <joshua0609 <at> mailbox.org>

Date: Mon, 14 Nov 2022 09:13:02 UTC

Severity: normal

Full log


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

From: Maxime Devos <maximedevos <at> telenet.be>
To: Joshua Hecker <joshua0609 <at> mailbox.org>, 59256 <at> debbugs.gnu.org
Subject: Re: bug#59256: Emacs-guix tab-completion returns gexp error
Date: Tue, 3 Jan 2023 23:25:46 +0100
[Message part 1 (text/plain, inline)]
I've heard about something about Guile sockets and REPLs, so I've 
investigated a bit and I think I found a Guix bug instead of a Guile bug 
(and is unrelated to sockets or REPLs):

In the error message, there is a mention of "#~". Perhaps somehow, no 
hash extension (not sure about terminology) for G-exps installed?
This is confirmed by:

scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 0)
$24 = ((#\. . #<procedure 7fbac9e323d0 at ice-9/boot-9.scm:2251:18 (c 
port)>))

It's also not a matter of some parametrisation:

scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 1)
$25 = ()
scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 2)
$26 = ()

How does this happen? (after all, (guix scripts deploy) imports (guix gexp))

Going by the backtrace I get:

[...]
In guix/ui.scm:
   2263:7 17 (run-guix . _)
In ice-9/boot-9.scm:
  1747:15 16 (with-exception-handler #<procedure 7fbac4ead6c0 at 
ice-9/boot-9.scm:1831:7 (exn)> _ #:unwind? _ #:unwind-for-type _)
In guix/ui.scm:
  2184:20 15 (show-guix-help)
In srfi/srfi-1.scm:
   691:23 14 (filter-map #<procedure source-file-command (file)> _ . _)
In ice-9/ports.scm:
   433:17 13 (call-with-input-file _ _ #:binary _ #:encoding _ 
#:guess-encoding _)
In guix/ui.scm:
  2109:16 12 (_ #<input: 
/home/antipode/.config/guix/current/share/guile/site/3.0/guix/scripts/deploy.scm 
22>)
In ice-9/read.scm:
   734:20 11 (%read #<input: 
/home/antipode/.config/guix/current/share/guile/site/3.0/guix/scripts/deploy.scm 
22> #<procedure 7fbac42c5280 at ice-9/read.scm:862:8 (line column datum)> _)
    210:5 10 (read-parenthesized #\))
[...]

That is, one of the earliest things that happen, is that (guix ui) reads 
the file "(guix scripts deploy)" -- it doesn't do the reflection 
equivalent of (use-module ...) which will run the imports before reading 
the rest of the code.

As such, the hash extension isn't installed even though it is required 
to read the file and even though the required module (guix gexp) is 
listed in the imports!

To fix this, I propose modifying 'source-file-command' in (guix ui), by 
adding a clause to

        (match (read port)
          (('define-command _ ('synopsis synopsis)
             _ ...)
           (command command-name synopsis 'main))
          (('define-command _
             ('category category) ('synopsis synopsis)
             _ ...)
           (command command-name synopsis category))
          ((? eof-object?)
           #f)
          (_
           (loop)))))))

which recognises (define-module [...] #:use-module MODULE ...),
and if MODULE is (guix gexp) or (srfi srfi-88), then does 
(resolve-module 'MODULE #:ensure #false) before continuing with (loop).

(Untested!)

Greetings,
Maxime.
[OpenPGP_0x49E3EE22191725EE.asc (application/pgp-keys, attachment)]
[OpenPGP_signature (application/pgp-signature, attachment)]

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

Previous Next


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