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



我正试图在编辑器中集成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)

最新更新