Dymola, пробелы и контроль версий

#tortoisesvn #whitespace #line-breaks #modelica #dymola

#tortoisesvn #пробелы #разрывы строк #modelica #dymola

Вопрос:

Я открыл библиотеку Modelica в Dymola, изменил одну строку, закрыл Dymola и нажал «Сохранить все», теперь TortoiseSVN показывает несколько сотен измененных файлов вместо одного файла с измененной строкой, которую я намеревался сделать. Все эти изменения являются либо пробелами, либо разрывами строк, введенными Dymola, похоже.

Конечно, теперь я могу быть осторожен, чтобы зафиксировать только тот файл, который я изменил (и отменить остальные), но это делает фиксацию более трудоемкой и подверженной ошибкам, чем это необходимо. Или я могу просто зафиксировать все это, но это затрудняет просмотр изменений моими коллегами. Кроме того, кажется, что он не является детерминированным, поэтому более поздняя фиксация может просто вернуть части обратно. Иногда я даже отменяю все изменения, а затем использую текстовый редактор, чтобы изменить только одну строку. Все это делает управление версиями излишне сложным.

Когда я смотрю на коммиты и различия, например, для стандартной библиотеки Modelica:
https://github.com/modelica/ModelicaStandardLibrary/commits/master
Различия обычно приятные, маленькие и читаемые. Есть ли способ избежать проблемы с пробелами?
Как я могу отключить все автоформатирование с помощью Dymola? Есть ли техническая причина для этого в первую очередь?

Ответ №1:

Вы можете уменьшить (но не полностью предотвратить) это поведение следующим образом:

  1. Увеличьте максимальную длину строки, например, до 130

    • В графическом интерфейсе: Параметры> Текстовый редактор> Максимальная длина строки
    • Из командной строки: Advanced.MaxLineLength=130
  2. Позвольте Dymola отформатировать всю вашу библиотеку за один раз

    • Откройте текстовое представление пакета верхнего уровня
    • Пометьте все с Ctrlпомощью A
    • Автоматическое форматирование с Ctrlпомощью ShiftL или щелкните правой кнопкой мыши> Автоматическое форматирование
    • Сохраните все с Ctrlпомощью ShiftS
    • Теперь просмотрите изменения. Большинство из них будут полезны, но иногда удаляются пробелы, которые вы обычно предпочитаете сохранять (особенно import extends операторы before и . Иногда они перемещаются в самый левый угол)
    • Зафиксируйте изменения
  3. Отныне старайтесь сохранять только отдельные модели, а не пакеты
    (при сохранении пакетов Dymola иногда переформатирует вложенные классы)

Комментарии:

1. Спасибо, это полезно. Для всех, кто работает с SVN или git, было бы большим улучшением улучшить значение Dymola по умолчанию здесь. Подход, описанный в sjoelund.se кажется, это очень хорошая отправная точка, это, по крайней мере, ограничило бы изменения пробелов в файлах, в которых я действительно что-то изменил, поэтому вместо 300 файлов мне нужно проверить только 3 файла.

2. Также убедитесь, что вы используете Dymola 2020x или более позднюю версию, поскольку это поведение было уменьшено в них.

3. @user2024223, какие-нибудь подробные примечания к выпуску по этой теме?

4. Одним из обходных путей является использование блокнота для изменения package.mo файлы, чтобы избежать изменения пробелов в файлах, которые не были отредактированы.

Ответ №2:

Есть несколько вещей, которые вы можете сделать, чтобы сделать красивые коммиты git для кода Modelica:

  1. Используйте текстовый редактор вместо графического редактора. У вас есть абсолютный контроль над тем, что вы изменяете.
  2. Используйте графический редактор, который не изменяет пробелы. Я не уверен в других альтернативах, но OpenModelica / OMEdit максимально сохранит существующий отступ (его также можно использовать для минимизации различий от изменений в других инструментах, но он работает все менее и менее хорошо, чем больше изменений).
  3. Используйте средство форматирования в качестве средства предварительной фиксации (отступы во всех файлах в соответствии с некоторыми настройками в средстве форматирования; но тогда вы не сможете вручную изменить пробелы).
  4. Надеюсь, что у кого-то в stackoverflow есть больше альтернатив, чем это.

Комментарии:

1. «OMEdit сохранит […] как можно больше» — звучит так, как будто это очень сложная задача — но почему? Для обычного текстового редактора это обычный способ работы !?

2. Кажется, в этой статье приводится более подробная информация: modelica.org/events/modelica2008/Proceedings/sessions /…

3. Подход, который сейчас использует OpenModelica, отличается и проще, чем в этой статье. Сложно иметь API для управления программой и сохранения всей информации. Текущий подход сравнивает 2 конкретных синтаксических дерева и сохраняет все одинаковые поддеревья, что приводит только к измененным поддеревьям, потенциально изменяющим форматирование.

4. Вероятно, основной вопрос: насколько велико одно «поддерево», это один класс или меньше? Несколько строк? Один пакет?

5. Это будет целый пакет, компонент, выражение или аннотация. Он довольно мелкозернистый и игнорирует большие части файла, если в нем нет изменений.