Подтвердить что ты не робот

Остановить Visual Basic 6 от замены моего корпуса

Очень простой вопрос, который, по-видимому, невозможно найти достойный ответ: как я могу заставить Visual Basic 6 перестать менять свой переменный корпус ^ @# *!!!

Я знаю, что общее мнение большого числа пользователей VB заключается в том, что эта "функция" на самом деле весьма полезна, но я сомневаюсь, что они много используют ее с любой системой управления версиями. Это абсолютно ИНФУРИАНТИРОВАНИЕ, когда вы пытаетесь сотрудничать с проектом любого значительного размера с несколькими другими разработчиками. Если вы проигнорируете, вы произведете тысячи ложноположительных "изменений" ваших файлов (даже те, у которых нет фактических изменений кода!), Которые загрязняют историю изменений и делают невозможным в некоторых случаях найти фактическое изменение, которое имело место.

Если вы не игнорируете его (например, мой офис, где мы были вынуждены реализовать политику "без ненужного изменения случая" ), вы тратите 5 раз на время, которое обычно было бы на каждую фиксацию, потому что вы должны тщательно отменить VB "исправления" по каждому файлу, иногда возвращая сотни строк, чтобы внести изменения в одну строку.

Конечно, там должна быть настройка, плагин, хак и т.д., которые могут удалить эту нежелательную "функцию"? Я готов принять любой метод, который я могу получить, если он не требует, чтобы я просматривал груды phantom diff. И раздавить пару жалоб: Нет, я не могу отключить обнаружение случаев в моем инструменте diff, это не главное. Нет, мы не можем просто изменить ситуацию в глобальном масштабе. Мы работаем с сотнями тысяч LOC, над которыми работают несколько разработчиков, охватывающих многолетнюю разработку. Синхронизация невозможна с бизнес-точки зрения. И, наконец: Нет, мы не можем перейти на VB.net или порт на другой язык (насколько мне бы хотелось).

(И да, я сейчас немного расстроен. Можете ли вы сказать? Мои извинения, но это требует времени и денег моей компании, и я не считаю это приемлемым.)

4b9b3361

Ответ 1

Вот сценарий реального мира и то, как мы решили его для нашего проекта 350 LOC VB6.

Мы используем Janus Grid, и в какой-то момент все строки кода, на которые ссылается свойство DefaultValue JSColumn, превратились в defaultValue. Это была возможность отладить всю неприятность IDE.

Я обнаружил, что ссылка на MSXML только что была добавлена, и теперь среда IDE берет свойство defaultValue ISchemaAttributes до символьной строки Janus Grid.

После некоторых экспериментов я узнал, что IDE собирает "зарегистрированные" идентификаторы в следующем порядке:

  • Связанные библиотеки/проекты из Project- > References в том порядке, в котором они перечислены

  • Элементы управления из Project- > Components (в неизвестном порядке)

  • Исходный код

Итак, простое исправление, которое мы сделали, это создать фиктивный класс/интерфейс с методами, которые содержат наш собственный корпус. Поскольку у нас уже был проектлибельный typelib, на который мы ссылались от каждого проекта до любого другого typelib, это было безболезненно.

Вот часть IDL для нашего интерфейса IUcsVbIntellisenseFix:

[
  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, некоторые из них названы в списке элементов перечисления, которые мы использовали для орфографии, и что бы мы ни хотели исправить. То же самое можно сделать с помощью простого класса VB в общей библиотеке (ActiveX DLL), которая ссылается на каждый проект.

Таким образом, наш исходный код в какой-то момент сходился к надлежащему корпусу, потому что при проверке IDE фактически фиксировал корпус в соответствии с корпусом IUcsVbIntellisenseFix. Теперь мы не можем пропускать перечисления, методы или свойства, даже если мы пытаемся.

Ответ 2

В зависимости от вашей ситуации добавление

#If False Then
    Dim CorrectCase
#End If

может помочь.

Ответ 3

ПРОСТОЙ ПУТЬ: Dim каждая переменная в том случае, если вы хотите. В противном случае VBA изменит его таким образом, что это не понятно.

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

в подпрограмме изменит ВСЕ случаи на те, что содержатся в операторе Dim

Ответ 4

Я могу сочувствовать. К счастью, нам разрешено отключить чувствительность к регистру в нашем инструменте контроля версий!

Кажется, автоматическая коррекция случая VB6 IDE иногда меняет регистр в объявлениях и ссылках переменных, возможно, в зависимости от порядка, в котором модули перечислены в файле VBP? Но IDE не говорит вам, что файл нужно сохранить. Таким образом, проблема возникает только при сохранении файла из-за другого редактирования. Мы кратко попытались предотвратить это, проверив все файлы в проекте и тщательно установив дело, но оно не исчезло.

Я предполагаю, что вы могли бы указать имена переменных, которые затронуты - обычные подозреваемые - это однобуквенные имена, такие как "I", "X" и "Y", возможно, потому, что они используются в стандартных обработчиках событий, таких как MouseDown. Затем напишите надстройку, которая будет искать все объявления "As" и принудительно верните регистр. Запустите надстройку над своими модулями, прежде чем вы их проверите. Возможно, вы сможете запускать надстройку для автоматического запуска при сохранении в VB6.

EDIT: что-то, о чем я только подумал: ответить Fred. С этого момента каждый раз, когда вы проверяете файл, добавьте блок вверху, чтобы установить канонический случай для обычных подозреваемых. Если ничего другого, это проще, чем возврат сотен строк вручную. В конце концов, у вас будет этот блок в каждом файле, и, возможно, проблема перестанет происходить.

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

Ответ 5

Я стандартизовал случай через кодовую базу, как правило, используя приведенные выше примеры (Dim CorrectCase) и снова удаляя его. Затем я запустил VB для сохранения КАЖДОГО файла, выполнив чувствительный к регистру поиск/замену "Конец" на "Конец" (никаких функциональных изменений, но достаточно, чтобы получить VB для сохранения). Как только это будет сделано, я смогу выполнить одно обязательство по стандартизации дела, что делает его намного легче поддерживать на нем позже.

Ответ 6

В частности, для управления случаем значений enum существует надстройка VB6 IDE, которая может быть полезна. Кажется, что перечисления имеют немного уникальную версию этой проблемы.

Как описано в ссылке ниже:

У VB6 IDE есть раздражающая причуда, когда дело доходит до случая Enum члены. В отличие от других идентификаторов, среда IDE не обеспечивает случай члена Enum, как он был объявлен в блоке Enum. Что иногда вызывает член Enum, который был написан вручную, чтобы проиграть его первоначальный случай, если кодер не набрал его достаточно тщательно....

Однако, если проект содержит много Enums и/или конкретного Enum имеет много членов, переодевание членов в каждом из них может получить довольно утомительно....

Ссылка: http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums

... загружать и выгружать надстройку по мере необходимости через диспетчер надстроек диалоговое окно. Использование так же просто, как выбор всего блока Enum, щелкните правой кнопкой мыши, а затем выберите контекстное меню "Заблокировать событие" пункт.

Ответ 7

Я не думаю, что это можно сделать. IDE изменит случай имени переменной на все, что будет, когда будет объявлено. Но, честно говоря, еще в тот день, когда я работал над несколькими крупными проектами VB6 и никогда не обнаружил, что это проблема. Почему люди в вашей команде разработчиков постоянно меняют объявления переменных? Похоже, что вы не установили четкую политику именования переменных, которую вы применяете. Я знаю, что вы расстроены, поэтому не обижайтесь, но это может быть ваша политика, которой не хватает в этом отношении.

К сожалению, в соответствии с этим потоком SO, чередующиеся VB6 IDE трудно найти. Итак, ваш лучший выбор - решить эту проблему с помощью политики. Или перейдите на VB.NET.:)

Ответ 8

Ого. Я потратил много времени на программирование в VB6, и я понятия не имею, о чем вы. Единственное, на что я могу думать, что вы говорите, это то, что intellisense изменит капитализацию имен переменных в соответствии с их объявлениями. Если вы жалуетесь на это, мне придется задаться вопросом, почему, черт возьми, они были введены каким-либо другим способом для начала. И если это ваша проблема, нет, нет способа отключить ее, о которой я знаю. Я бы посоветовал вам, за один раз, проверить каждый файл, убедитесь, что колпачки на объявлениях и использования переменных все совпадают и проверяются.