访问 Smalltalk 中的消息文档

Access message documentation in Smalltalk

当你在 Smalltalk 中定义一个 class 时,你可以像这样访问文档注释:

st> Integer comment
'I am the abstract integer class of the GNU Smalltalk system.  My
subclasses'' instances can represent signed integers of various
sizes (a subclass is picked according to the size), with varying
efficiency.'

但也许,我是 Smalltalk 的新手,但我找不到如何访问 method/message 文档。即

让我们考虑以下方法

SomeClass >> #msg: arg
  "This is a comment"
  ^self doThisTo: arg

实施提取评论的服务很诱人,例如:

commentOf: aCompiledMethod
  ^method sourceCode readStream upTo: $"; upTo: $"

事实上,在上面的例子中,我们会得到字符串'This is a comment'。然而,问题是双引号字符并不总是注释分隔符。例如考虑以下方法

String >> #doubleQuoted
  ^'"', self , '"'

如果我们尝试使用上面的方法 #commentOf: 从该方法中提取评论,我们将得到

' , self, '

这没有任何意义。

这意味着我们的解析应该不那么天真了。因此,我们应该问自己的问题是,使用我们环境的 Smalltalk Parser 是否更好。我不知道如何在 gnu-smalltalk 中执行此操作,所以让我在这里(作为示例)展示我们如何在 Pharo 中进行:

aCompiledMethod ast comments

#ast消息用方法的抽象句法树回答,也称为解析树,它公开了方法源代码的句法结构。特别是,它检测所有 CommentNode 对象形式的评论,这就是为什么 #comments 方法只是在收集评论时枚举所有解析节点。