Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Multi-id defform: hidden ids inflate whitespace

Aperta
#574 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
74/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Ambito
documentation

Direzione di ricerca

Esegui raco scribble --html mve.scrbl usando la riproduzione fornita con things.rkt e mve.scrbl, quindi traccia il rendering e il comportamento dell'indentazione di defform. Controlla entrambe le modalità di destinazione dei link. Il lavoro è completato quando gli identificatori nascosti non influiscono più sull'indentazione delle righe di continuazione, mentre gli identificatori aggiuntivi visibili sono separati correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

defform was updated in 1b40fc8 to allow a single defform to serve as the link target for multiple identifiers, allowing it to document new forms that might create multiple bindings, similar to defstruct.

When a defform's #:id [(id ...) ids-expr] lists identifiers that do not appear in the form datum, they are attached to the first defining instance in the datum. Two visible effects follow:

  1. With link targets on, the extra ids are not displayed, but their width is still counted when the following lines of a multi-line form are positioned. Every continuation line is pushed right by the combined length of the hidden ids.

  2. With #:link-target? #f, the extra ids are typeset visibly, they all get run together after the first id with no separators.

The single-id mode, and the multi-id mode where every listed id appears in the datum, render correctly.

Given a things.rkt…

#lang racket/base

(provide point point? point-x point-y)
(define-syntax-rule (point . _) (void))
(define (point? v) #t)
(define (point-x p) 0)
(define (point-y p) 0)

…The following mve.scrbl file:

#lang scribble/manual
@(require (for-label racket/base "things.rkt"))

@defmodule["things.rkt" #:packages ()]

@defform[#:link-target? #f
         #:id [(point) (list #'point)]
         (define-thing point (x
                              y))]{
Control: every listed id appears in the form. Continuation line is indented
correctly.
}

@defform[#:id [(point point? point-x point-y) (list #'point #'point? #'point-x #'point-y)]
         (define-thing point (x
                              y))]{
Continuation line is indented by an extra 20 characters, the combined length
of @racket[point?], @racket[point-x] and @racket[point-y].
}

@defform[#:link-target? #f
         #:id [(point point? point-x point-y) (list #'point #'point? #'point-x #'point-y)]
         (define-thing point (x
                              y))]{
Same as above with @racket[#:link-target? #f]: the ids that do not appear in
the form are typeset visibly, concatenated after the first one.
}

…renders with raco scribble --html mve.scrbl as:

Image

In the first box, y is indented 21 columns. In the second and third boxes it is indented 41. The difference of 20 is point? (6) + point-x (7) + point-y (7).

Racket v9.3, scribble-lib 1.65.

Lingua principale
Racket
Stelle
250
Fork
102
Merge medio
13g 16h
PR unite (30g)
2

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di racket/scribble

Tutte le issue di racket/scribble

Issue simili

Altre issue su Documentation

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.