前提・実現したいこと
VSCodeでAlt+Shift+Fキーでコードの整形をしたい。
昨日までは正常に動作していた。
もしかすると今日何かの機能更新の通知があり無意識で更新させたのでそのせいなのかもしれません。
ただ何をどう更新したのか覚えていないのでどのように対処すれば良いか見当がつかないのでアドバイスが欲しいです。
既知のバグなのか、設定で直るものなのか、無意識で更新したログの調べ方など分かることがあれば教えてください。
分かりづらい質問ですみませんがよろしくお願いします。
発生している問題
VSCode Alt+Shift+F キーでコードの整形をするとコードが崩れたり削除される。
試したこと
どのようなコードがあると崩れたり削除されるか切り分けを行いました。
今確実に崩れたり削除されると思われるコード例を提示しておきます。
どのように崩れたり削除されるかの推移を画像で提示しておきます。
1行で括弧**{}**が閉じている状態で整形させると壊れるようです。
※追記
整形誤動作でコードが崩れたり削除されてもCTRL+Zで複数回でもちゃんと元に戻ります。
整形が正常動作するコード例
C++
1template <typename T> 2void prt(const T &arg) 3{ 4 std::cout << arg << std::endl; 5}
整形が誤動作するコード例
C++
1template <typename T> 2void prt(const T &arg){std::cout << arg << std::endl;}
補足情報(FW/ツールのバージョンなど)
Win10
VSC1.47.3
C++14
フォーマッタの設定とかは調べられますか?
すみませんよくわからないので何を調べたらよいか教えていただくと助かります。
並行してフォーマッタとは何かを調べてみます。
取り急ぎこれのことでしょうか?
https://gyazo.com/a7a98613da5c27e12d11024bfea891e5
C/C++ IntelliSense, debugging, and code browsingのバージョン0.29で試しましたが、うまく動いてくれますね。ちなみにこちらはMacです。
この拡張機能の裏側で動いているclang-formatがWindowsだと不具合を持っているという記事がでてきました、同一の問題ではないのですが、もしかしたら参考になるかもしれません。https://qiita.com/kaityo256/items/72e4c954c091ceaae817
また、時間がかかりすぎるならばフォーマッタを無効にするという手もあると思います。
コメントありがとうございます。
その記事は確認して導入までやってみたのですが結果変わらずでした。
ただ保存時の整形自動実行が走らない時の対処のようです。
関連あるかと思ったのですが導入しても同じ整形になるのでフォーマッターの切り替え?がうまく出来ていないかもしれません。
(どういう仕組みで整形が動作してるのか理解出来ていません)
手探りで対策探し続けてますが一応コード書く時は全角コメントと{}を同時に使わないことで回避してます。
あとv0.30をv0.29にする方法がないかも探していますが見つかりません。
試しにC/C++ IntelliSense, debugging, and code browsingを無効にして、
clang-formatをフォーマッターとして選択してみたら誤動作がなくなりました。
取り急ぎご報告まで。
vscodeの拡張機能一覧で拡張を右クリック、"別のバージョンをインストール" で以前のバージョンがインストールできます
仕組みは単純で、フォーマット実行時に裏側(Powershellなど指定されたシェル)で`clang-fomat ...`がトリガーされているだけです。
ありがとうございます。なんとか誤動作を回避出来そうな見通しです。
v0.30とv0.29との比較切り分けや、clang-formatを使う場合などを試してみて最終的な結果を追記しておこうと思います。(時間掛かるかもしれません)
v0.30とv0.29との切り分けでv0.30でのみ誤動作確認しました。
ただしv0.29に戻してもすぐに自動更新されてv0.30に戻ってしまいます。
v0.29に更新してvsc再起動後v0.30に自動更新されてもvsc再起動せずに動作確認で正常動作確認。
何度もすみませんが取り急ぎご報告まで。
拡張機能の自動更新は"extensions.autoUpdate": falseで止められるようですね
ありがとうございます。それも便利そうですね。
C_Cpp.updateChannel
ちなみにこちらの設定から
C/C++ IntelliSense, debugging, and code browsing
だけの自動更新を止められるようです。
なるほど、そちらの拡張にも設定があるんですね
何から何までmcho71さんのアドバイスで解決することが出来ましたので自己解決済みとさせていただきます。
mcho71さんへベストアンサーを贈りたいのですがコメントのみでしたのであしからずご了承ください。
ありがとうございました。
回答1件
あなたの回答
tips
プレビュー