我正在尝试将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方便地生成格式化输出?
答案 0 :(得分:0)
只需将RuboCop称为外部进程,例如使用Open3.capture2
:
stdout_str, status = Open3.capture2("rubocop -a -f fi -s some_file.rb", input)