Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中提取源代码注释_Scala - Fatal编程技术网

在Scala中提取源代码注释

在Scala中提取源代码注释,scala,Scala,在Scala代码中,我们有许多用户可能需要理解的跟踪语句,因此我们自然希望对它们进行记录。理想情况下,我们应该能够在代码本身中记录它们,并从源代码自动创建文档 跟踪字符串不需要本地化,因此我更愿意将它们嵌入源代码本身,而不是首先将它们放在资源文件中 目前,一个典型的行可能是: trace("value for x is %s" format x) 我希望它是这样的(尽管这是一个简单的例子) 然后使用工具自动生成文档,方法是解析源文件并输出跟踪信息以及文档 我想这可以通过使用注释和在源代码上运行

在Scala代码中,我们有许多用户可能需要理解的跟踪语句,因此我们自然希望对它们进行记录。理想情况下,我们应该能够在代码本身中记录它们,并从源代码自动创建文档

跟踪字符串不需要本地化,因此我更愿意将它们嵌入源代码本身,而不是首先将它们放在资源文件中

目前,一个典型的行可能是:

trace("value for x is %s" format x)
我希望它是这样的(尽管这是一个简单的例子)

然后使用工具自动生成文档,方法是解析源文件并输出跟踪信息以及文档


我想这可以通过使用注释和在源代码上运行自定义工具来实现,但我以前从未做过类似的事情,希望您能提出建议。

我认为没有任何工具可以做到这一点,但您可以编写一个:

val TRACE = "[ \t]*trace *\\((.*)\\) *//(.*)".r

case class Trace(expression: String, comment: String)

def documentFile(file: String): List[Trace] = {
  io.Source.fromFile(file).lines.flatMap{
    case TRACE(e,c) => Some(Trace(e,c))
    case _          => None
  }.toList
}
您已经遍历了所有源文件,然后可以将
Trace
实例转换为所需的任何输出格式

当然,它假定
trace
表达式位于它们自己的行上,并且不进行任何后处理,但这应该是一个良好的开端

val TRACE = "[ \t]*trace *\\((.*)\\) *//(.*)".r

case class Trace(expression: String, comment: String)

def documentFile(file: String): List[Trace] = {
  io.Source.fromFile(file).lines.flatMap{
    case TRACE(e,c) => Some(Trace(e,c))
    case _          => None
  }.toList
}