vscode(vscode-ruby + rubocop)如何在保存时自动更正?

kuk*_*krt 9 ruby rubocop visual-studio-code

环境

  • vscode版本1.19.1(1.19.1)
  • rubocop(0.52.1)
  • Darwin mbp 16.7.0 Darwin内核版本16.7.0:2017年10月4日星期三00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64 x86_64
  • ruby 2.3.5p376(2017-09-14修订版59905)[x86_64-darwin16]

跟着https://github.com/rubyide/vscode-ruby#linters安装了所有宝石,并像这样编辑了settings.json.

{

  "ruby.rubocop.executePath": "/Users/ac/.rbenv/shims/",
  "ruby.rubocop.onSave": true,
  "ruby.lint": {
    "ruby": {
      "unicode": true //Runs ruby -wc -Ku
    },
    "reek": true,
    "rubocop": {
      "lint": true,
      "rails": true
    },
    "fasterer": true,
    "debride": {
      "rails": true //Add some rails call conversions.
    },
    "ruby-lint": true
  },
  "ruby.locate": {
    "include": "**/*.rb",
    "exclude": "{**/@(test|spec|tmp|.*),**/@(test|spec|tmp|.*)/**,**/*_spec.rb}"
  }

}
Run Code Online (Sandbox Code Playgroud)

在vscode上,代码突出显示工作正常.
*只需注意,您会看到已安装的扩展程序以及问题选项卡中的警告.

rubocop工作正常

我受到了压抑,vscode-ruby并且rubocop会自动纠正文件保存中的缩进和警察规则,但显然它没有.
如果我希望它格式化我的代码prettier,我应该如何设置它?

Mat*_*ttD 10

根据vscode-ruby-rubocop GitHub上的此注释,您可以使用以下设置:

{
    "editor.formatOnSave": true,
    "editor.formatOnSaveTimeout": 5000,
    "ruby.rubocop.executePath": "path/where/rubocop/is/located",
    "ruby.format": "rubocop",
}
Run Code Online (Sandbox Code Playgroud)

只需将它们应用到我在本地机器上的用户设置,它就可以正常工作。VS Code针对我的ruby.rubocop.executePath设置抛出了一个错误,说它不是可执行文件,删除该行似乎不会导致该错误显示,并且仍然相应地格式化我的代码。设置较低的超时时间(我尝试设置为2500)似乎也会破坏保存时的自动格式,因此建议将其设置为5000。

  • 对于我的环境,设置`“ editor.formatOnSaveTimeout”:5000`可以解决问题,我将其设置为1500却无法正常工作。另外,“ ruby​​.rubocop.executePath”似乎无法被识别,也许它已经被删除了? (3认同)
  • 这是修复所有问题的神奇设置,并且应该是安装 Visual Studio 时的默认设置:`"editor.formatOnSave": true` (2认同)

小智 10

我已经尝试了其他人共享的所有选项,它为我修复了链接(因此,当我的代码格式不正确时,我会收到警告),但它没有修复保存时的缩进或其他格式。

似乎对我有用的是添加默认格式化程序选项。如果您查看 vscode 的右下角,您应该会看到一个通知图标,它可能会抛出一些警告,帮助您进行配置。对我来说,它添加了:

"[ruby]": {
  "editor.defaultFormatter": "misogi.ruby-rubocop"
}
Run Code Online (Sandbox Code Playgroud)


小智 9

现在,只需添加这些行就足够了:

{
  "ruby.rubocop.onSave": true,
  "editor.formatOnSave": true,
}
Run Code Online (Sandbox Code Playgroud)