Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Scribble examples fail to use `+` correctly

未关闭
#376 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
30/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
领域
documentation

调研方向

使用 scribble/examples 和 demo 宏重现 Scribble 示例,然后检查 scribble-lib/scribble/racket.rkt 第 1272 行附近的代码及其对 syntax-span 的使用。比较带 quote 和 syntax-quote 的 #%provide 形式,并确定为什么组合会产生 #f;完成的标准是报告中的示例不再引发 + contract violation。

由索引模型根据 Issue 内容生成。

描述

I'm on 8.10 [cs], the latest Debian, and am running my code using racket-mode. I have a #lang scribble/manual document that depends on scribble/examples. I'll start with the error.

; +: contract violation
;   expected: number?
;   given: #f
; Context (plain; to see better errortrace context, re-run with C-u prefix):
;   /home/sage/.racket/share/pkgs/scribble-lib/scribble/racket.rkt:1272:26 loop
;   /home/sage/.racket/share/pkgs/scribble-lib/scribble/racket.rkt:1272:26 loop
;   /home/sage/.racket/share/pkgs/scribble-lib/scribble/racket.rkt:1168:0 do-syntax-ize
;   /home/sage/.racket/share/pkgs/scribble-lib/scribble/racket.rkt:1272:26 loop
;   /home/sage/.racket/share/pkgs/scribble-lib/scribble/racket.rkt:1272:26 loop
[...]

This @-expression from my code that raises the error. Simpler examples do not reproduce, so let's go with this for now. It appears that the (struct term:ksub term (body) #:transparent) instance fails in this exact composition, where term is just (struct term () #:transparent). I'm omitting other structure definitions to keep this at least somewhat brief.

@demo[
(define (ksub-example . xs)
  (with-syntax ([(x ...) xs])
    (term:ksub-parse
     #'(module #%kernel '#%kernel
         (#%module-begin
          (#%require '#%kernel
                     (for-syntax '#%kernel)
                     (prefix : '#%kernel)
                     (for-syntax (prefix : '#%kernel)))
          x ...)))))

(ksub-example '(#%provide (all-from '#%kernel)))
]

I use this demo macro. Let #:eval be hypothetical.

(define-syntax-rule (demo forms ...)
   (examples #:eval (example-evaluator) forms ...))

If you change '(#%provide (all-from '#%kernel))) to #'(#%provide (all-from '#%kernel))), the error goes away. Since scribble-lib/scribble/racket.rkt:1272:26 makes heavy use of syntax-span, I suspect that location information disappears in some nontrivial compositions of quoted code in syntax templates.

主要语言
Racket
星标
250
派生
102
平均合并
11 天 9 小时
30 天内合并 PR
2

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

racket/scribble 的其他 Issue

查看 racket/scribble 的全部 Issue

相似的 Issue

更多 Documentation Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。