Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

VSCodeで最低限のRuby環境構築、2021年版-検証編

RubyVSCode拡張の更新に伴い、その設定方法も更新されていることに気付いた。その要点は、

  • Language serverを使え。
    • まだ開発中ではあるものの使用推奨。
  • これまでの設定はLegacy Configuration。
    • 今後の更改見込みはなく、Ver 1.0到達時点で排除。

It is highly recommended that you enable the Ruby language server (via the Use Language Server setting or ruby.useLanguageServer config option). The server does not default to enabled while it is under development but it provides a significantly better experience than the legacy extension functionality. See docs/language-server.md for more information on the language server.

Legacy functionality will most likely not receive additional improvements and will be fully removed when the extension hits v1.0

Ruby - Visual Studio Marketplace

2018年に投稿した「VSCodeで最低限のRuby環境構築*1」での設定が、まさにLegacy Configurationだ。その内容を2021年版的なものへ更新したのが前回の投稿だ。

impsbl.hatenablog.jp

今回の投稿では、一連の機能が動作しているかを検証する。

初期設定、前提

VSCodeを次の状態にしておく。

  • Terminalを表示しておく。
  • Workspaceをテスト用に作成しておく。
    • 以後、このWorkspaceを「テスト・フォルダ」と呼ぶ。

今回はAutocomplete、IntelliSenseの検証をしない。それらの検証手順は、2018年に投稿したものと変わらない。手順を知りたい人は、2018年版の該当箇所を参照してほしい。
impsbl.hatenablog.jp

settings.jsonの関連個所は、次のようになっている。

"ruby.format":"rubocop",

"ruby.lint":{
    "reek": true,
    "rubocop": false,
    "standard": false,
}

Format、Lintのテスト

テスト・フォルダに「main.rb」を作成し、次のテスト・コードをコピーする。
このテスト・コードは意図的にインデントを「していない」。加えて、シングル・クォーテーション、ダブル・クォーテーションを混在させている。

テスト・コード

def printHello
puts "hello"
end

def print_bye
puts 'bye'
end

puts "stop after here"
printHello
print_bye


コピーしたら、次のキーを押下する。

Alt + Shift + F

"rubocop"が定義するルールに従って、コードが成形された。自動的にインデントが挿入され、シングル・クォーテーションに統一されている。Terminalの”PROBLEMS”にも”reek”が警告を1件、報告している。

rubocop + reekの場合
f:id:espio999:20210429160057p:plain

settings.jsonを次のように変更して、同じ操作を実施する。

    "ruby.format":"rufo",

    "ruby.lint":{
        "reek": false,
        "rubocop": true,
        "standard": false,
    }

自動的にインデントが挿入され、ダブル・クォーテーションに統一されると同時に、Terminalでは”rubocop”が6件の情報を報告している。

rufo + rubocopの場合
f:id:espio999:20210429160111p:plain

Format、Lintで指定したGemが適切に機能していることが分かる。

デバッグの検証

”Run and Debug”から”create a lanunch.json"をクリックし、テスト・フォルダを選択する。ここでは”testflight”となっている。
f:id:espio999:20210429160154p:plain
表示された”launch.json”のコード中に、”null”と表示されている。ここを適切な値で置き換える。今回は次のようにした。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug testflight",
      "type":"Ruby",
      "request":"launch",
      "program":"${workspaceRoot}/main.rb",
    }
  ]
}

f:id:espio999:20210429160227p:plain
10行目にブレーク・ポイントを配置し、デバッグを開始する。まずTerminalの”DEBUG CONSOLE”に最初の出力が現れる。”Step Over”(あるいはF10キー)で処理が1行進み、新たな出力が追加される。デバッグも機能していることが分かる。

必要な一連の機能が動作していることが確認できた。