web-dev-qa-db-ja.com

Visual Basic6によるケーシングの変更を停止します

適切な答えを見つけるのは明らかに不可能な非常に単純な質問:Visual Basic6で^ @#* ing変数ケーシングの変更を停止するにはどうすればよいですか!?!

非常に多くのVBユーザーの一般的な意見は、この「機能」は実際には非常に役立つということですが、どのソース管理システムでも多く使用されているとは思えません。これは絶対に腹立たしいことです。かなりの規模のプロジェクトで他の複数の開発者と共同作業しようとしている場合。無視すると、ファイルに何千もの誤検知の「変更」が発生し(実際のコード変更がない場合でも!)、リビジョン履歴が汚染され、場合によっては、実際に行われた変更を見つけることがほぼ不可能になります。

それを無視しないと(「不要なケース変更なし」ポリシーの実装を余儀なくされた私のオフィスのように)、VBの「修正」を慎重に元に戻す必要があるため、各コミットに通常の5倍の時間を費やします。 "すべてのファイルで、数百行を元に戻して1行の変更を加えることがあります。

確かに、この不要な「機能」を削除できる設定、プラグイン、ハックなどが必要ですか?ファントムデフの山を拾う必要がない限り、私はできる限りの方法をとることをいとわない。そして、いくつかの苦情を前もってつぶすために:いいえ、diffツールでケース検出をオフにすることはできません。それは重要ではありません。いいえ、ケースをグローバルに変更することはできません。私たちは、長年の開発にまたがる複数の開発者によって取り組んでいる数十万のLOCと協力しています。これを同期することは、ビジネスの観点からは不可能です。そして最後に:いいえ、VB.netにアップグレードしたり、別の言語に移植したりすることはできません(私が望む限り)。

(はい、私は現時点でほんの少しおしっこしています。わかりますか?申し訳ありませんが、これは私に時間と会社のお金を費やしており、それは受け入れられません。)

60
Toji

これが実際のシナリオと、350k LOCVB6プロジェクトでそれをどのように解決したかです。

Janus Gridを使用しており、ある時点で、JSColumnのDefaultValueプロパティを参照するすべてのコード行がdefaultValueに変わりました。これは、全体のIDE迷惑をデバッグする機会でした。

私が見つけたのは、MSXMLへの参照が追加されたばかりで、IDEはJanusGridtypelibの前にISchemaAttributesのdefaultValueプロパティを取得することです。

いくつかの実験の結果、IDEは「登録済み」の識別子を次の順序で収集することがわかりました。

  • [プロジェクト]-> [参照]からリストされている順序で参照されているライブラリ/プロジェクト

  • プロジェクト->コンポーネントからのコントロール(順序不明)

  • ソースコード

したがって、私たちが行った簡単な修正は、適切なケーシングを保持するメソッドを使用してダミーのクラス/インターフェースを作成することでした。他のtypelibの前に、すべてのプロジェクトから参照したプロジェクト全体のtypelibがすでにあるので、これを行うのは簡単でした。

IUcsVbIntellisenseFixインターフェースのIDLの一部は次のとおりです。

[
  odl,
  uuid(<<guid_here>>),
  version(1.0),
  dual,
  nonextensible,
  oleautomation
]
interface IUcsVbIntellisenseFix : IDispatch {
    [id(1)] HRESULT DefaultValue();
    [id(2)] HRESULT Selector();
    [id(3)] HRESULT Standalone();
    ...
}

IUcsVbIntellisenseFixに多くのメソッドを追加しました。そのうちのいくつかは、スペルミスに使用した列挙型アイテムや修正したいものにちなんで名付けられました。すべてのプロジェクトから参照される共通ライブラリ(ActiveX DLL)の単純なVBクラス)でも同じことができます。

このようにして、チェックアウト時にIDE実際には修正済み IUcsVbIntellisenseFixケーシングに従ってケーシングが作成されるため、ソースコードはある時点で適切なケーシングに収束しました。スペルを間違えることはありません。列挙型、メソッド、またはプロパティ。

21
wqw

状況に応じて追加

#If False Then
    Dim CorrectCase
#End If

役立つかもしれません。

18
Simon D

簡単な方法:Dim必要に応じて各変数。それ以外の場合、VBAは理解できない方法で変更します。

Dim x, X1, X2, y, Yy  as variant

サブルーチン内では、すべてのケースがDimステートメント内のケースに変更されます

4
UserX

私は同情することができます。幸い、バージョン管理の差分ツールで大文字と小文字の区別をオフにすることができます。

VB6 IDE自動大文字小文字修正は、おそらくVBPファイルにリストされているモジュールの順序に応じて、変数宣言と参照の大文字と小文字を変更することがありますか?しかしIDEは、ファイルを保存する必要があることを示していないため、別の編集のためにファイルを保存した場合にのみ問題が発生します。プロジェクト内のすべてのファイルをチェックアウトして設定することにより、これを簡単に防止しようとしました。ケースは慎重に、しかしそれは消えませんでした。

影響を受ける変数名をリストできると思います。通常の容疑者は、「I」、「X」、「Y」などの1文字の名前です。おそらく、MouseDownなどの標準のイベントハンドラーで使用されているためです。次に、すべての宣言「As」を検索し、大文字と小文字を区別するアドインを作成します。モジュールをチェックインする前に、モジュールでアドインを実行します。VB6に保存すると、アドインが自動的に実行されるようにトリガーできる場合があります。

編集:私が今考えた何か:適応 フレッドの答え 。これ以降、ファイルをチェックインするたびに、上部にブロックを追加して、通常の容疑者の正規のケースを確立します。手作業で数百行を元に戻すよりも簡単です。最終的には、すべてのファイルにこのブロックが含まれるようになり、問題が発生しなくなる可能性があります。

#If False Then
  Dim I, X, Y ' etc '
#End If
1
MarkJ

通常は上記の例を使用して、コードベース全体でケースを標準化しました(Dim CorrectCase)、そしてそれを再び削除します。次に、VBをトリガーして、大文字と小文字を区別して「End」を「End」に検索/置換しました(機能の変更はありませんが、VB再保存します)それが完了すると、ケースを標準化するために1回のコミットを実行できるため、後日、大文字と小文字を区別しやすくなります。

1
Deanna

特に列挙値のケースを制御するために、VB6 IDEアドインが役立つ場合があります。列挙型この問題のわずかにユニークなバージョンがあるようです。

以下のリンクで説明されているように:

VB6 IDEは、列挙型メンバーの場合に厄介な癖があります。他の識別子とは異なり、IDEは、列挙型の場合を強制しません。 Enumブロックで宣言された列挙型メンバー。コーダーが十分に注意深く入力しない限り、手動で記述された列挙型メンバーが元の大文字小文字を失うことがあります。

ただし、プロジェクトに多数の列挙型が含まれている場合や、特定の列挙型に多数のメンバーがある場合は、各列挙型のメンバーを再宣言するのは非常に面倒です。 .。

参照: http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums

...必要に応じて、[アドインマネージャ]ダイアログボックスからアドインをロードおよびアンロードします。使用法は、Enumブロック全体を選択し、右クリックして、「LockEnumCase」コンテキストメニュー項目を選択するのと同じくらい簡単です。

0
DaveInCaz