Visual Studio CodeでのRubyのAutoCompleteについて調べました。

Windows上でRailsのコードを書くのにAtomを利用していたのですが、 起動や終了があまり速くないので…

Windows上でRailsのコードを書くのにAtomを利用していたのですが、
起動や終了があまり速くないので、MicrosoftのVisual Studio Codeを
試してみました。試しているうちに、RubyのAutoComplete(Intellisense)が
動作しないのに気がついたので、状況を調査しました。

  • 提供されるはずの機能

 拡張機能”vscode-ruby”が提供するAtoCompleteは”rcodetools”というGemの
インストールが必須です。

例として

[1, 2, 3].e

と入力して”CTRL-Space”を押下すると起動すると書いてあります。

vscode-rubyのAutoComplete
https://github.com/rubyide/vscode-ruby/blob/master/readme.md#autocomplete

  • 環境

 OS:        Windows10
VisualStudioCode: 1.13.0
拡張機能Ruby:   0.12.1

・解析

(1) rct-completeのエラー

AutoCompleteを利用するためにはVisual Studio Codeの設定ファイル”settings.json”へ
以下の記述をします。


"ruby.rctComplete.commandPath": "C:\\Ruby23\\bin\\rct-complete.bat --dev "

このことからAutoCompleteにrcodetoolsのrct-completeを使用している事がわかります。

Windowsのコマンドプロンプトから

C:\\Ruby23\\bin\\rct-complete.bat --dev なんちゃら.rb

の様にrct-completeを実行してみると、

-e:1:in `reopen': Permission denied @ rb_io_reopen - R:/workspace/TestProject/app/controllers/xmpfilter.tmpfile_15204-2.rb (Errno::EACCES)
from -e:1:in `<main>'

こんな感じでエラーになります。

C:\Ruby23\lib\ruby\gems\2.3.0\gems\rcodetools-0.8.5.0\lib\rcodetools\xmpfilter.rb

の31~33行を以下の様に修正することでエラーが出なくなりました。

def windows?
/win|mingw/ =~ RUBY_PLATFORM && /darwin/ !~ RUBY_PLATFORM
end



def windows?
false
end

ひとまず、例にある”[1, 2, 3].e” CTRL-Spaceはこれで動作するようになりました。

 

(2) メソッドのなかでAutoCompleteが効かない

ひとつ前の(1)の対処でAutoCompleteが効き、問題がないように見えましたが、
少し使ってみると、メソッドのdef~endの間でAutoCompleteが効かないのに気が付きました。

調べてみてもよくわからなかったのですが、vscode-rubyのIssesに答えがありました。

autocomplete not working inside methods
https://github.com/rubyide/vscode-ruby/issues/72

これもrct-completeの問題で、現状、未対処の様です。

 

  • 結果

他にも調べてみましたが、”vscode-ruby”のAutoCompleteを安定して動作させる方法は
見つかりませんでした。更に進展があれば、別の記事で報告します。