我正试图在编辑器中集成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方便地生成格式化输出?
只需将RuboCop作为外部进程调用,例如使用Open3.capture2
:
stdout_str, status = Open3.capture2("rubocop -a -f fi -s some_file.rb", input)