以编程方式将Rubocop格式化程序与stdin / stdout

时间:2019-11-09 13:33:58

标签: ruby rubocop

我正在尝试将Rubocop的格式化程序集成到编辑器中:给定一些Ruby代码作为输入,返回代表等效格式代码的字符串。我正在考虑Rubocop的帮助建议的-s选项:

  

-s FILE-来自STDIN的管道源,在攻击报告中使用FILE。这对于编辑器集成很有用。

在终端中,以下命令成功读取输入内容并将已格式化的输出打印到stdout:

cat some_file.rb | rubocop -a -f fi -s some_file.rb

但是,我无法使用Rubocop API以编程方式复制类似内容。我希望以某种方式将输入提供给RuboCop::Runner,但是,在到达这一点之前,只需解析选项已挂起:

require 'rubocop'

input = "some_var    = 'hello'"
options, paths = RuboCop::Options.new.parse(['-a', '-f', 'fi', '-s', 'some_file.rb'])
runner = RuboCop::Runner.new(options, RuboCop::ConfigStore.new)
...

当然,一种选择是删除-s并在临时文件上进行操作,但这会增加复杂性并且效率较低。

如何使用API​​方便地生成格式化输出?

1 个答案:

答案 0 :(得分:0)

只需将RuboCop称为外部进程,例如使用Open3.capture2

stdout_str, status = Open3.capture2("rubocop -a -f fi -s some_file.rb", input)