从基于Ruby的源文件中提取代码片段
我最近一直在玩,这是个不错的游戏 用于生成ruby应用程序代码复杂性报告的工具。由于跑步从基于Ruby的源文件中提取代码片段,ruby,parsing,abstract-syntax-tree,code-complexity,Ruby,Parsing,Abstract Syntax Tree,Code Complexity,我最近一直在玩,这是个不错的游戏 用于生成ruby应用程序代码复杂性报告的工具。由于跑步 flog在项目代码库上,您会得到一个类似以下内容的输出: 1272.3: flog total 7.3: flog/method average 62.2: MyClass#foobar lib/myclass#foobar:123 ... more similar lines ... 上面的示例提供了方法的分数,并引用了 定义该方法的源代码。这可能是一个常规实例/类 方法
flog
在项目代码库上,您会得到一个类似以下内容的输出:
1272.3: flog total
7.3: flog/method average
62.2: MyClass#foobar lib/myclass#foobar:123
... more similar lines ...
上面的示例提供了方法的分数,并引用了
定义该方法的源代码。这可能是一个常规实例/类
方法或任何其他“动态”方法,如rake任务等
所以目标是从源代码中提取一段代码(很可能是一个方法)
以flog输出中定义的行号开头的文件。那一段话就可以了
可以在某些web UI中使用,以显示各种代码度量(基于其他工具,如flay
)
和/或存储在数据库中。据我所知,这项任务涉及解析ruby
将代码转换成AST,然后遍历树以找到相应的起始行和
算出终点线号码。我已经用这个库做了一些实验-,大部分时间都有效,但要想实现它有点困难
得到正确的结果
有没有其他解决方案可以从编写的源文件中快速提取方法代码
在ruby?中,您可以实现按名称或行号查找方法的功能 此示例代码显示如何按名称查找方法代码。它是脏的,但可以工作(在Ruby 2.1.2上)。这将使用
解析器
(gem安装解析器
)
您可以像下面这样使用MethodFinder
mf = MethodFinder.new("./method_finder.rb")
puts mf.find("find")
=> def find(method_name)
=> recursive_search_ast(@ast, method_name)
=> return @method_source
=> end
您可以实现按名称或行号查找方法的功能 此示例代码显示如何按名称查找方法代码。它是脏的,但可以工作(在Ruby 2.1.2上)。这将使用
解析器
(gem安装解析器
)
您可以像下面这样使用MethodFinder
mf = MethodFinder.new("./method_finder.rb")
puts mf.find("find")
=> def find(method_name)
=> recursive_search_ast(@ast, method_name)
=> return @method_source
=> end
谢谢,我实现了一个非常类似的解决方案,除了我按行号匹配块,而不是方法名。谢谢,我实现了一个非常类似的解决方案,除了我按行号匹配块,而不是方法名。