0
0

More than 3 years have passed since last update.

vscodeで{}ブロックを自動フォーマットして困った話

Last updated at Posted at 2021-06-22

はじめに

RSpecの勉強中に{}ブロックがdo...endに変換されてしまって困った。その時の対処についてです。

症状

it "does not delete the project" do
   sign_in @user
   expect do   #ココ
   delete :destory, params: { id: @project.id }
   end.to_not change(project, :count) #ココ
end

上記のコードを記述すると、画面遷移時にexpect{}と書いた部分がexpect do...endとなって RSpecを走らせることができなかった。

誤りについて

追記:2021/06/23
@jnchitoさんからコメントを頂きました。
上記の内容でエラーを再現したところ、問題なくRubocopが走ることを確認しました。

よく考えてみれば、rubocop自体は走った上で違反に引っかかっていただけの記憶もあります。となると上記の打ち消し線の表現は正しくありませんでした。

恐らくdo...endの部分で違反が指摘され、それがdo...endに原因があると思い込んでいたためと思います。

ご指摘頂いたように、どちらのブロック記法でも問題なく通ることが分かりましたので、下記の対処方法は今回のシーンにおいて必要ないことが分かりました。

次からは出力結果をもっと注意深く確認して、記事にはコードの詳細に触れていきたいと思います。

下記に関しては、上記との繋がりがなくなってしまいましたが一応残しておきたいと思います。

結論(誤り)

Rubocopのチェック対象から外して、とりあえず解決した。

Rubocopのチェック対象から外す

rubocop.yml
# 下記ファイルはチェックの対象から外す
 Exclude:
   - "Rakefile"
   - "spec/rails_helper.rb"
   - "spec/spec_helper.rb"

Rubocopを導入している前提となる。この設定をしてしまうと、他のフォーマットも動作しなくなるので根本の解決にはなっていないと思う。

Prettierの自動修正をやめる

settinges.json
 "ruby.intellisense": "rubyLocate",
  "ruby.useLanguageServer": true,
  "ruby.lint": {
    "rubocop": true
  },
  "ruby.format": "rubocop",
コード 説明
"ruby.intellisense": "rubyLocate" インテリセンスの設定 (ある程度、補完、定義ジャンプができるようになる)
"ruby.useLanguageServer": true Language Server 使う (構文チェックしてくれるようになる)
"ruby.lint": { "rubocop": true } Linter は rubocop
"ruby.format": "rubocop" format は rubocop

settinges.json
  "editor.formatOnSave": true,

Prettierの導入と上記の記述をしている前提です。
1つの部分を削れば自動修正は行われない。全ファイルを対象にして自動修正したくなければ、"editor.formatOnSave": true,

ただこれもブロックだけを対象としているわけではないので、根本の解決になっていないと思う。

参考元

自動調整ツールRubocopの導入と使い方
VSCode で Ruby 書くための設定

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0