C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VS2022でコードのオートフォーマットを無効に


(過去ログ 178 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■102380 / inTopicNo.1)  VS2022でコードのオートフォーマットを無効に
  
□投稿者/ すば (1回)-(2023/09/15(Fri) 15:51:52)

分類:[.NET 全般] 

はじめまして、どなたかご教授のほどよろしくお願いいたします。

・使用環境
Windows11
Visual Studio Community 2022
Visual Basic

・やりたいこと
書いているコード(VB.NET)がオートフォーマット(自動整形)されるのを無効化したいです。

・試したこと
[ツール]>[オプション]>[テキストエディター]>[Visual Basic]>[詳細]>[エディターのヘルプ]>[コードの再フォーマット] を OFF にしました。

・結果
上記設定に一定の効果はあったのですが、フォームのデザイナでレイアウトをいじると、そのフォームのコードがまだ再フォーマットされてしまいます。

完全に無効化する方法をご存じの方がいらっしゃいましたら教えてください。
よろしくお願いいたします。

引用返信 編集キー/
■102382 / inTopicNo.2)  Re[1]: VS2022でコードのオートフォーマットを無効に
□投稿者/ 魔界の仮面弁士 (3692回)-(2023/09/15(Fri) 16:54:01)
No102380 (すば さん) に返信
> 完全に無効化する方法をご存じの方がいらっしゃいましたら教えてください。

[コードの再フォーマット] / [Pretty Listing (reformatting) of code]
以上の設定は恐らく無いと思います。リファレンスによれば、この機能は下記の処理を行うとのこと。

・コードを正しいタブ位置に揃える。(注:連続している空白の除去などを含む模様)
・キーワード、変数、およびオブジェクトの大文字・小文字を補正する。
・If...Then ステートメントで Then 句が省略されていた場合に補う。
・関数呼び出しにかっこを追加する。
・文字列の右引用符が欠けていた場合に補う。(注:最近の VB だと、文字列内改行が許可されたので動作しないことが多い)
・指数表記の書式を正す。
・日付の書式を正す。


> フォームのデザイナでレイアウトをいじると、そのフォームのコードがまだ再フォーマットされてしまいます。
再現させられませんでした。何か具体的な手順を提示できますか?
手元で検証したバージョンは最新版(17.7.4) ではなく、
 Visual Studio Enterprise 2022 バージョン 17.6.5
 Visual Studio Enterprise 2022 バージョン 17.7.3
で、プロジェクトは .NET Framework 版および .NET 版の Windows Form アプリです。


[コードの再フォーマット] を OFF にして、Button1_Click 内にて
 dim a as INTeger =    1__23
というコードを書いておき、フォームをリサイズしたり
Button1 を Button0 にリネームしたり、Button2 を貼ったりしてみましたが、
先のコードが再フォーマットされる様子はありませんでした。


> ・やりたいこと
> 書いているコード(VB.NET)がオートフォーマット(自動整形)されるのを無効化したいです。
具体的には、どういうコードがどういう状態に整形されるのを防ぎたいのでしょうか。

既定の設定が整形 ON である以上、諦めて整形される前提で書いておいた方が平和かもしれません。
他人が同じコードをメンテナンスするとき、自動整形される可能性があるわけですから。


> ・試したこと
> [ツール]>[オプション]>[テキストエディター]>[Visual Basic]>[詳細]>[エディターのヘルプ]>[コードの再フォーマット] を OFF にしました。

…とはいえコードの再フォーマットは、
稀に実行結果に影響を与えてしまうこともあるのですよね。

たとえば OFF の状態で
  dim a as decimal = 1.00d
  dim b as decimal = 1.000d
  Label1.Text = a.ToString()
  Label2.Text = b.ToString()
というコードを実行すると、Label1、Label2 には
 1.00
 1.000
と出力されるものの、コードの再フォーマットが行われると
  Dim a As Decimal = 1D
  Dim b As Decimal = 1D
  Label1.Text = a.ToString()
  Label2.Text = b.ToString()
に変化してしまい、Label1、Label2 への出力結果が
 1
 1
に変化してしまうという罠。
引用返信 編集キー/
■102383 / inTopicNo.3)  Re[2]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (4回)-(2023/09/15(Fri) 18:55:15)
No102382 (魔界の仮面弁士 さん) に返信
> ■No102380 (すば さん) に返信

詳しいご説明と再現テストまでしていただき、ありがとうございます。

以下、当方での再現環境の詳細です。
・Windows11 22H2(OS ビルド 22621.2283)
・Visual Studio Community 2022(64 ビット)Version 17.7.4
・プロジェクト: Windows フォーム アプリ
※「Windows フォーム アプリケーション(.NET Framework)」ではありません。
・フレームワーク: .NET 6.0

※正確にお伝えするため、タブは {tab} として載せます。見づらくてすみません。

当方で Form1 に

Public Class Form1
Private Sub hogehoge() ← インデントさせず、左端にベッタリ
{tab}dim a as INTeger =    1__23 ← イコールの後ろに 半角スペース 全角スペース×3
End Sub
End Class

を書いて、Form1 をデザイナでサイズを変更させると

Public Class Form1
{tab}Private Sub hogehoge() ← インデントされる(a)
{tab}{tab}dim a as INTeger = 1__23 ← スペースが詰まる(b)。大文字小文字はそのまま。
{tab}End Sub
End Class

となりました。やはりオートフォーマットが働いたようです。私の環境だけでしょうか、、、。


>具体的には、どういうコードがどういう状態に整形されるのを防ぎたいのでしょうか。

何もして欲しくないです(笑)、と言っては身も蓋もないですね、、、。
最低限、上記(a)(b)は整形しないで欲しいです。

(a)の理由
Public Class Form1

ここの部分の全行がインデントされると、ディスプレイの可視領域が無駄に圧迫される。
正直なところ、ここは左端から書いてもコードレビューに支障なし。

End Class

(b)の理由
定数の列挙など、桁位置を揃えて見やすくしていたのが崩れる。

といった感じです。


>既定の設定が整形 ON である以上、諦めて整形される前提で書いておいた方が平和かもしれません。
>他人が同じコードをメンテナンスするとき、自動整形される可能性があるわけですから。

それは仰るとおりだと思います。他方、私は一匹狼の個人事業主(年齢高め)でして、自分が一番見やすいスタイルでコードを書いており、実際に誰かに引き継ぐことになったときにはその時点でオートフォーマットすればよいと考えておりました。(オートフォーマットが悪だとは思っておりません)。


>稀に実行結果に影響を与えてしまうこともあるのですよね。

あ、確かにサンプルの通りになりますね。直値のコーディングには注意せねば。
注意喚起ありがとうございます。

引用返信 編集キー/
■102384 / inTopicNo.4)  Re[1]: VS2022でコードのオートフォーマットを無効に
□投稿者/ とっちゃん (791回)-(2023/09/15(Fri) 21:04:17)
No102380 (すば さん) に返信

> ・結果
> 上記設定に一定の効果はあったのですが、フォームのデザイナでレイアウトをいじると、そのフォームのコードがまだ再フォーマットされてしまいます。
>
もしかして、個々の部分は *.Designer.vb を指していますか?
*.Designer.vb は、自動生成コードのため、原則として手で修正をすることを想定していません。
オートフォーマットがされるかどうかはよくわかりませんが(変更内容なんて意識したことすらない)
人が見れるようにはしてるのでオートフォーマットは働いていると思います。
ただし、そこは制御の範囲外(そもそも自動生成なので、触るなというのがデザイナーの言い分)なので
ある程度割り切りは必要だと思います。




引用返信 編集キー/
■102385 / inTopicNo.5)  Re[2]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (5回)-(2023/09/15(Fri) 21:51:44)
No102384 (とっちゃん さん) に返信

ご指南ありがとうございます。

> もしかして、個々の部分は *.Designer.vb を指していますか?

いえいえ、普通に Form1.vb です。

不思議な現象ですよね。ネットで粗方検索したのですが同様の報告を見つけられず、頼みの綱でここに投稿いたした次第です。

困りました。。。
引用返信 編集キー/
■102386 / inTopicNo.6)  Re[2]: VS2022でコードのオートフォーマットを無効に
□投稿者/ くま (12回)-(2023/09/15(Fri) 21:56:34)
せっかくの機能なんでできれば自動整形は使われる方が良いかと思いますが...

方法: コードのセクションを折りたたんで非表示にする (Visual Basic)
https://learn.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/program-structure/how-to-collapse-and-hide-sections-of-code

参考までになりますがコードを任意の位置で折りたためるようにもできますので
こういう機能を使うのも一つの手かもしれません

引用返信 編集キー/
■102387 / inTopicNo.7)  Re[3]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (6回)-(2023/09/16(Sat) 00:35:18)
No102386 (くま さん) に返信

ご指南ありがとうございます。

> せっかくの機能なんでできれば自動整形は使われる方が良いかと思いますが...

そうですね、そのような考えもアリかと思います。

余談ですが、ここにいらっしゃる皆さんは開発に造詣が深い方やベテランが多いと思われますが、皆さんはご自分の書いたかわいいコード達(笑)が勝手にフォーマットし直されることにイライラしたりしませんでしょうか? 私はとてもストレスを感じます。勝手なことをしてくれるなと、、、。
引用返信 編集キー/
■102388 / inTopicNo.8)  Re[4]: VS2022でコードのオートフォーマットを無効に
□投稿者/ ビール呑み (1回)-(2023/09/16(Sat) 15:42:23)
No102387 (すば さん) に返信

> 余談ですが、ここにいらっしゃる皆さんは開発に造詣が深い方やベテランが多いと思われますが、皆さんはご自分の書いたかわいいコード達(笑)が勝手にフォーマットし直されることにイライラしたりしませんでしょうか? 私はとてもストレスを感じます。勝手なことをしてくれるなと、、、。

お気持ちよくわかります。私も以前ここで似たような質問をさせてもらったことがありますが、
結局思い通りにはいかず、そういうもんかと自分を無理やり納得させました。

便利は便利なんですけどね…。
引用返信 編集キー/
■102389 / inTopicNo.9)  Re[4]: VS2022でコードのオートフォーマットを無効に
□投稿者/ furu (215回)-(2023/09/16(Sat) 20:23:53)
No102387 (すば さん) に返信
> 皆さんはご自分の書いたかわいいコード達(笑)が勝手にフォーマットし直されることにイライラしたりしませんでしょうか?
イライラというよりも自分のコーディングスタイルで書けないので
自動整形はOFFにしています。

switch (チャンネル)
{
    case  1:    局名 = "NHK総合";            種別 = "公共放送";    break;
    case 12:    局名 = "東京12チャンネル";   種別 = "民放";        break;
    default:
        throw null;
}

switch (チャンネル)
{
    case 1: 局名 = "NHK総合"; 種別 = "公共放送"; break;
    case 12: 局名 = "東京12チャンネル"; 種別 = "民放"; break;
    default:
        throw null;
}

実際にはスペースでなくTABで区切っています。

自動整形使わないのは半角カナの変数名使うぐらい少数派かもしれませんが
禁止されていなければ使ってかまわないと思います。

私は見やすければ何でもやるタチです。

  var @old = "東京12チャンネル";
  var @new = "テレビ東京";

引用返信 編集キー/
■102390 / inTopicNo.10)  Re[4]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (7回)-(2023/09/16(Sat) 20:58:21)
No102388 (ビール呑み さん) に返信
No102389 (furu さん) に返信

マルチレスで失礼いたします。

貴重なご意見をお聞かせいただきありがとうございます。
将来的には何れオートフォーマットを受け入れざるを得ないかもしれませんが、単独開発している間は自分のスタイルで進めたいものですね。

話は投稿の当初の目的に戻りますが、フォームをいじるとオートフォーマットが働いてしまうという現象は、どなたも再現されていないのでしょうか。私だけの特有の現象なら、OS ごとクリーンインストールしてやり直してみるしかないと思っています。トホホ、、、
引用返信 編集キー/
■102391 / inTopicNo.11)  Re[5]: VS2022でコードのオートフォーマットを無効に
□投稿者/ Azulean (1283回)-(2023/09/17(Sun) 08:33:37)
2023/09/17(Sun) 08:48:39 編集(投稿者)

No102390 (すば さん) に返信
> 話は投稿の当初の目的に戻りますが、フォームをいじるとオートフォーマットが働いてしまうという現象は、どなたも再現されていないのでしょうか。私だけの特有の現象なら、OS ごとクリーンインストールしてやり直してみるしかないと思っています。トホホ、、、

私は C# メインですが、試しに VB.NET で手順を試したら、手元では再現しました。
再現の有無が分かれるということは何か他に効くものがあるのかもしれませんね?

なお、.NET Framework では再現せず、.NET 6.0 では再現しました。(VS2022 17.7.4)
新型のアウトプロセスデザイナー(.NET 6向け)の割り切りなのかな?と思いつつも、魔界の仮面弁士さんと再現有無が異なる点で不明瞭ではあります。

https://azulean.me/wp-content/uploads/2023/09/VS2022_VbDesigner.gif
※.NET Framework 側は Copilot の提案が見えていますが、この有無は再現性には影響しません。
引用返信 編集キー/
■102392 / inTopicNo.12)  Re[6]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (8回)-(2023/09/17(Sun) 09:25:18)
No102391 (Azulean さん) に返信

再現テストをしていただきありがとうございます。しかも検証動画まで掲載していただいて、貴重なお時間を割いていただき重ねて御礼申し上げます。

Azulean さんの環境でも再現したのですね、何かうれしいような、残念なような、、、。

動画を拝見したところ、私がお伝えしたかった現象そのものです。なお、.NET Framework ではオートフォーマットこそ発生しなかったようですが、動画ではデザイナをいじった時点で [Form1.vb]タブが[Form1.vb*]のようにアスタリスクがついて、やはり何かしらの自動変更処理が走ったことがうかがえます。気持ち悪いですね、、。


>魔界の仮面弁士さんと再現有無が異なる点で不明瞭ではあります。

そうですね、何が違うのかな? Community と Enterprise の差? まさかですけど。

引用返信 編集キー/
■102393 / inTopicNo.13)  Re[5]: VS2022でコードのオートフォーマットを無効に
□投稿者/ furu (216回)-(2023/09/17(Sun) 11:54:12)
No102390 (すば さん) に返信
> 話は投稿の当初の目的に戻りますが、フォームをいじるとオートフォーマットが働いてしまうという現象は、どなたも再現されていないのでしょうか。
フォームは関係ない話ですが
テンプレートのエクスポートを行い
項目の追加でそのテンプレートを使うと
オートフォーマットが働いてしまいます。

テンプレート(*.zip)はオートフォーマットされていませんので
項目の追加でオートフォーマットが働いているようです。

オートフォーマットをON/OFFは
テキストエディターのオプションなので
テキストエディター以外のオートフォーマットはOFFにできないかのもしれません。

すばさんの現象はフォームのデザイナでのレイアウト変更で
不具合か仕様でコードの更新が必要と判断され
オートフォーマットが働いてしまったように思われます。
引用返信 編集キー/
■102395 / inTopicNo.14)  Re[6]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (9回)-(2023/09/18(Mon) 14:33:11)
No102393 (furu さん) に返信

貴重な具体例を挙げていただきありがとうございます。

> オートフォーマットをON/OFFは
> テキストエディターのオプションなので
> テキストエディター以外のオートフォーマットはOFFにできないかのもしれません。

うーむ、こうして色々な例があるのをみると、こういう結論になってしまのでしょうか、ガッカリです。

幸い、多くの閲覧者が情報をくださるので、今しばらく「解決済み(してないけど)」は先送りにして、有用な情報を待ってみます。
引用返信 編集キー/
■102397 / inTopicNo.15)  Re[4]: VS2022でコードのオートフォーマットを無効に
□投稿者/ radian (147回)-(2023/09/20(Wed) 13:45:53)
2023/09/20(Wed) 14:26:56 編集(投稿者)

No102387 (すば さん) に返信
> 余談ですが、ここにいらっしゃる皆さんは開発に造詣が深い方やベテランが多いと思われますが、皆さんはご自分の書いたかわいいコード達(笑)が勝手にフォーマットし直されることにイライラしたりしませんでしょうか? 私はとてもストレスを感じます。勝手なことをしてくれるなと、、、。

VB6の頃よりは開発体験はずっと良くなっているので、そこまで気になったことはないですね。
そもそも、チーム開発だとIDEのデフォルト設定を変える事は殆どないので。
(全員にデフォルト以外の設定を統一させるのは面倒くさい)
個人ごとのクセをある程度フォーマットが吸収してくれるので、むしろありがたいとすら思っています。
まあ、言語指定のない新規案件や個人開発ではもうC#に移行していますが…

一応こちらでもコードの再フォーマットOFFにして試してみましたが、
インデントが消えたりといった現象は再現できませんでした。(VS2022 Community)
何故か、ソースが更新された * マークはつきますが。

改善されるかどうかは判りませんが、エディタのバグっぽい挙動なら、
とりあえずVisualStudioからフィードバックの送信を送ってみたらどうでしょう?

引用返信 編集キー/
■102398 / inTopicNo.16)  Re[5]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (10回)-(2023/09/20(Wed) 15:39:58)
No102397 (radian さん) に返信

>インデントが消えたりといった現象は再現できませんでした。(VS2022 Community)
>何故か、ソースが更新された * マークはつきますが。

お時間を割いていただき恐縮です。

これはおそらく、No.102391 Azulean さんの下記ご報告にありますように、

>なお、.NET Framework では再現せず、.NET 6.0 では再現しました。(VS2022 17.7.4)

.NET Framework でテストされたのではないかと思われます。ご興味がありましたら是非 .NET 6.0 でもお試しいただければ幸いです。

※プロジェクトの新規作成時に、
・Windows フォーム アプリ ‥‥ .NET 6.0
・Windows フォーム アプリケーション(.NET Framework)‥‥ .NET Framework

引用返信 編集キー/
■102399 / inTopicNo.17)  Re[6]: VS2022でコードのオートフォーマットを無効に
□投稿者/ radian (148回)-(2023/09/20(Wed) 16:04:38)
2023/09/20(Wed) 16:06:37 編集(投稿者)

No102398 (すば さん) に返信
> ■No102397 (radian さん) に返信
>
> >インデントが消えたりといった現象は再現できませんでした。(VS2022 Community)
> >何故か、ソースが更新された * マークはつきますが。
>
> お時間を割いていただき恐縮です。
>
> これはおそらく、No.102391 Azulean さんの下記ご報告にありますように、
>
> >なお、.NET Framework では再現せず、.NET 6.0 では再現しました。(VS2022 17.7.4)
>
> .NET Framework でテストされたのではないかと思われます。ご興味がありましたら是非 .NET 6.0 でもお試しいただければ幸いです。
>
> ※プロジェクトの新規作成時に、
> ・Windows フォーム アプリ ‥‥ .NET 6.0
> ・Windows フォーム アプリケーション(.NET Framework)‥‥ .NET Framework

書き忘れましたが、.NET6 で新規作成したプロジェクトです。
IDEのバージョンは17.4.5です。
引用返信 編集キー/
■102400 / inTopicNo.18)  Re[7]: VS2022でコードのオートフォーマットを無効に
□投稿者/ すば (11回)-(2023/09/20(Wed) 16:34:46)
No102399 (radian さん) に返信

> 書き忘れましたが、.NET6 で新規作成したプロジェクトです。

そうでしたか。大変失礼いたしました。


環境毎に「何か」が違うんでしょうね、、きっと。その「何か」は何だろう、、。

そろそろ詰んだか。>自分
引用返信 編集キー/
■102401 / inTopicNo.19)  Re[4]: VS2022でコードのオートフォーマットを無効に
□投稿者/ Azulean (1284回)-(2023/09/20(Wed) 23:15:35)
2023/09/20(Wed) 23:16:26 編集(投稿者)

No102387 (すば さん) に返信
> 余談ですが、ここにいらっしゃる皆さんは開発に造詣が深い方やベテランが多いと思われますが、皆さんはご自分の書いたかわいいコード達(笑)が勝手にフォーマットし直されることにイライラしたりしませんでしょうか? 私はとてもストレスを感じます。勝手なことをしてくれるなと、、、。

趣味や一匹狼タイプであれば自由だと思います。
個人的には、業務としてとか、チームとしてとかであれば、変なレイアウトのこだわりを持つ方が悪だと考えていますね。

レイアウトを指定のルールに沿ってそろえるためにスペースで調整する、桁数が増えたから周りも合わせてスペースで調整するということは、生産性を落とすし、ソース管理システム的に意味の薄い無駄な差分を生じさせ、レビューアの負担も増やします。
ビジネス的にはマイナスになる場面が多い印象です。

また、これから GitHub Copilot による提案で生産性を上げていく時代において、スペースレイアウトのこだわりを持っていると、提案のスペースがイマイチで修正する分、相殺されて、狙っていたことが実現できなくなってしまいます。

そういう意味でも、オートフォーマットでそろえるは、宗教論争も避けられて良いと思っています。


-----
余談ですが、VB.NET に新しい言語拡張は今後入れることがないと宣言されているとおり、投資優先度は低いです。
このため、こういった細かな割り切り or 不具合は放置される可能性が高いです。
この機会に、こだわりを捨てることも検討してはいかがでしょうか。

スペース調整しないと読みづらいのであれば、そもそも別の可読性を上げるコーディングを模索するなど…。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -