racket - 重命名 DrRacket 中派生名称的支持

标签 racket rename automated-refactoring

当宏使用派生名称生成绑定(bind)时,这些不会被视为对原始名称的引用(这是预期的行为)。但是,重命名不适用于派生名称。

这是一个简单的宏示例:

(define-syntax (my-syntax stx)
  (syntax-case stx ()
    [(_ name)
     (with-syntax ([get-name (format-id #'name "get-~a" #'name)])
       #'(begin
           (define name 42)
           (define (get-name) name)))]))

在下面的代码中,通过 右键单击 → Rename foo 将第一行的 foo 重命名为 bar 正确地重命名了第二行的 foo行,但未能在第三行重命名 get-foo

(my-syntax foo)
foo
(get-foo)

例如,是否有某种语法属性可以附加到 fooget-foo 以提供重命名助手(可以生成原始列表/重命名对)?

作为最后的手段,我可​​以使用一个固定的约定,并使用阅读器扩展在早期将 get-foo 实际扩展为 (get foo),尽管我我不确定这是否可行。

最佳答案

这是一个很好的问题。

我从 DrRacket 的作者那里得到了提示。 'sub-range-binders 属性应该可以解决问题:

http://docs.racket-lang.org/tools/Check_Syntax.html?q=sub-binder#%28idx._%28gentag.28.%28lib._scribblings%2Ftools%2Ftools..scrbl%29%29%29

关于racket - 重命名 DrRacket 中派生名称的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844741/

相关文章:

macros - Define 和 let w.r.t. 之间的区别语法规则关键字

c++ - 如何使具有许多全局可重入的旧 C 代码库

java - 改变JAVA中对象的声明和构造

java - 将代码分离到不同的类 [Java]

scheme - 在 Racket 中使用 stop-when

pattern-matching - 如何使用 Racket 匹配从堆栈顶部解析 - 关闭贪婪 '...'

scheme - 有没有办法在方案中使用 cons 来制作 lat?

bash - 如何将重命名命令的结果分配给变量?

sharepoint - 如何重命名 SharePoint 虚拟机

xcode - 重命名 xcode 4 项目和实际文件夹