Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 以编程方式将Rubocop格式化程序与stdin/stdout集成_Ruby_Rubocop - Fatal编程技术网

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

Ruby 以编程方式将Rubocop格式化程序与stdin/stdout集成,ruby,rubocop,Ruby,Rubocop,我试图在编辑器中集成Rubocop的格式化程序:给定一些Ruby代码作为输入,返回一个表示等效格式化代码的字符串。我正在考虑Rubocop的帮助建议的-s选项: -s文件-来自STDIN的管道源,使用攻击报告中的文件。这对于编辑器集成非常有用 在终端中,以下命令成功读取输入内容并将格式化输出打印到标准输出: cat some_file.rb | rubocop-a-f fi-s some_file.rb 但是,我无法使用RuboCopAPI以编程方式再现类似的内容。我希望以某种方式将输入提供给R

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

-s文件-来自STDIN的管道源,使用攻击报告中的文件。这对于编辑器集成非常有用

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

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

但是,我无法使用RuboCopAPI以编程方式再现类似的内容。我希望以某种方式将输入提供给
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)

我可以问一下您试图构建集成的编辑器是什么吗?您是否有关于如何实现集成的指南或说明?@lacostenycoder我的目标是Solarograph项目,因此是任何具有语言服务器协议支持的编辑器。我提交了一个使用临时文件()触发格式设置的PR,但我觉得它有点慢和笨重,因此这个问题需要尝试提出一个更好的方法。调用将尝试读取
stdin
,因此您的进程会陷入困境。你为什么不把Rubocop作为另一个进程使用,并把它写进这个进程stdin。谢谢分享你的想法!这是最初的做法,但造成了各种问题。这样做假定“rubocop”可执行文件在用户路径上可用,但不一定如此,并且假定编辑器可以访问该路径,而对于在各自独立环境中运行的某些ide来说,情况并非如此。与直接插入API相比,它的效率更低,并且还有其他缺点,例如错误处理。