Le 04/11/2022 à 15:20, David Kastrup a écrit :
Ok, I'll give the doc text another try, but the documentation block in the manual starts with:Macro: make-relative … which is missing the input arguments from (define-syntax-rule-public (make-relative (variables ...) reference music) Is that fixable in some manner? If necessary, creating a LilyPond-specific version of define-syntax-rule-public ?
Guile doesn't give us the arguments from the header of a define-syntax-rule, at least not in the same way it does for procedures. $ ~/lilies/2.23.80/bin/lilypond scheme-sandbox GNU LilyPond 2.23.80 (running Guile 2.2) [...] scheme@(#{ g101}#)> (use-modules (ice-9 session))scheme@(#{ g101}#)> (procedure-arguments (macro-transformer (module-ref (current-module) 'make-relative))) $1 = ((required x) (optional) (keyword) (allow-other-keys? . #f) (rest . #f))
It says there is a single argument "x" to the syntax transformer, which is indeed true considering that it is a procedure taking a single syntax object. Essentially, (define-syntax-rule (name <args>) <body>) expands to (define-syntax name (lambda (x) (syntax-case x () ((_ <args>) (syntax <body>))))) The lambda ends up having "x" as its only argument. I don't believe Guile retains the info of what <args> is as some sort of metadata on the lambda. Of course, you could change the definition of define-syntax-rule-public in lily.scm from (define-syntax-rule (define-syntax-rule-public (name . args) . rest) (begin (define-syntax-rule (name . args) . rest) (export name))) to (define single-rule-macro-signature (make-object-property)) (define-syntax-rule (define-syntax-rule-public (name . args) . rest) (begin (define-syntax-rule (name . args) . rest) (set! (single-rule-macro-signature (module-ref (current-module) 'name)) 'args) (export name))) and then use that in the doc autogeneration. That being said ... a quick git grep shows only one site, make-relative, where this could be somewhat useful. In your shoes, I would not bother doing this and just mention the signature in the docstring itself in plain English. Jean
OpenPGP_signature
Description: OpenPGP digital signature