質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2619閲覧

VSCode Alt+Shift+F キーでコードの整形をするとコードが崩れたり削除される

mjk

総合スコア303

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/08/06 06:57

編集2020/08/06 07:03

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mcho71

2020/08/06 08:59

フォーマッタの設定とかは調べられますか?
mjk

2020/08/06 09:55

すみませんよくわからないので何を調べたらよいか教えていただくと助かります。 並行してフォーマッタとは何かを調べてみます。
mcho71

2020/08/07 01:02

C/C++ IntelliSense, debugging, and code browsingのバージョン0.29で試しましたが、うまく動いてくれますね。ちなみにこちらはMacです。 この拡張機能の裏側で動いているclang-formatがWindowsだと不具合を持っているという記事がでてきました、同一の問題ではないのですが、もしかしたら参考になるかもしれません。https://qiita.com/kaityo256/items/72e4c954c091ceaae817 また、時間がかかりすぎるならばフォーマッタを無効にするという手もあると思います。
mjk

2020/08/07 01:30

コメントありがとうございます。 その記事は確認して導入までやってみたのですが結果変わらずでした。 ただ保存時の整形自動実行が走らない時の対処のようです。 関連あるかと思ったのですが導入しても同じ整形になるのでフォーマッターの切り替え?がうまく出来ていないかもしれません。 (どういう仕組みで整形が動作してるのか理解出来ていません) 手探りで対策探し続けてますが一応コード書く時は全角コメントと{}を同時に使わないことで回避してます。
mjk

2020/08/07 01:31

あとv0.30をv0.29にする方法がないかも探していますが見つかりません。
mjk

2020/08/07 01:37

試しにC/C++ IntelliSense, debugging, and code browsingを無効にして、 clang-formatをフォーマッターとして選択してみたら誤動作がなくなりました。 取り急ぎご報告まで。
mcho71

2020/08/07 01:42

vscodeの拡張機能一覧で拡張を右クリック、"別のバージョンをインストール" で以前のバージョンがインストールできます
mcho71

2020/08/07 01:54

仕組みは単純で、フォーマット実行時に裏側(Powershellなど指定されたシェル)で`clang-fomat ...`がトリガーされているだけです。
mjk

2020/08/07 02:03

ありがとうございます。なんとか誤動作を回避出来そうな見通しです。 v0.30とv0.29との比較切り分けや、clang-formatを使う場合などを試してみて最終的な結果を追記しておこうと思います。(時間掛かるかもしれません)
mjk

2020/08/07 02:13

v0.30とv0.29との切り分けでv0.30でのみ誤動作確認しました。 ただしv0.29に戻してもすぐに自動更新されてv0.30に戻ってしまいます。 v0.29に更新してvsc再起動後v0.30に自動更新されてもvsc再起動せずに動作確認で正常動作確認。 何度もすみませんが取り急ぎご報告まで。
mcho71

2020/08/07 02:22

拡張機能の自動更新は"extensions.autoUpdate": falseで止められるようですね
mjk

2020/08/07 02:30

ありがとうございます。それも便利そうですね。 C_Cpp.updateChannel ちなみにこちらの設定から C/C++ IntelliSense, debugging, and code browsing だけの自動更新を止められるようです。
mcho71

2020/08/07 02:38

なるほど、そちらの拡張にも設定があるんですね
mjk

2020/08/07 06:47 編集

何から何までmcho71さんのアドバイスで解決することが出来ましたので自己解決済みとさせていただきます。 mcho71さんへベストアンサーを贈りたいのですがコメントのみでしたのであしからずご了承ください。 ありがとうございました。
guest

回答1

0

自己解決

解決

もうしばらく試行錯誤と様子を見て問題がないようなら無さそうなので解決済みにします。
ありがとうございました。

拡張機能のC/C++ IntelliSense, debugging, and code browsing.を、
最新のv0.30から元のv0.29に戻して動作確認したところ正常動作確認できました。
フォーマッターというキーワードに始まり途中分からないことが増える都度丁寧に教えて頂いたmcho71さん、本当にありがとうございました。

結論は拡張機能のバージョン違いでしたので元に戻すことで慣れている環境のまま使うことが出来そうです。
余談ですが途中教えて頂いたclang-formatもお試しで使ってみて良ければ切り替えも考慮してみようと思います。

拡張機能とバージョン
動作確認

追記

切り分けを続けたところコードの前に全角文字がありその後の構文で**{}**がある時だけ挙動がおかしいようです。
コピペする文字列中にゴミデータがあるかと思い新規ファイルに手打ちし直しても再現しました。

同じような症状出る方やアドバイスあれば教えて下さい。
よろしくお願いします。

整形前
整形後


### 拡張機能の再インストールで解決しました。

再発しましたので未解決です。
解決済み→未解決にする方法が分からないので何か分かったらここで追記します。
申し訳ございません。

画像:C/C++ IntelliSense, debugging, and code browsing.

自動整形やフォーマッターをキーワードに調べる中でこの拡張機能がデフォルトの整形をしていることを知りました。
自環境にもこの拡張機能がインストールされておりバージョンを確認した際にv0.30.0で見覚えがあることに気付き今日更新したのはこの拡張機能だと気付きました。

そこで何かしらの設定がおかしくなっていると仮定してアンインストールと再インストールを行ったところ質問の誤動作は無くなりました。
~~直接の原因までは判明出来ませんでしたがこの拡張機能の更新のタイミングで設定か何かがおかしくなっていたと推察します。
~~
取り急ぎ誤動作は無くなったので自己解決とさせていただきます。
フォーマッターというキーワードを教えて頂いたmcho71さん、ありがとうございました。

投稿2020/08/06 11:33

編集2020/08/07 06:44
mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問