#tortoisesvn #whitespace #line-breaks #modelica #dymola
#tortoisesvn #пробелы #разрывы строк #modelica #dymola
Вопрос:
Я открыл библиотеку Modelica в Dymola, изменил одну строку, закрыл Dymola и нажал «Сохранить все», теперь TortoiseSVN показывает несколько сотен измененных файлов вместо одного файла с измененной строкой, которую я намеревался сделать. Все эти изменения являются либо пробелами, либо разрывами строк, введенными Dymola, похоже.
Конечно, теперь я могу быть осторожен, чтобы зафиксировать только тот файл, который я изменил (и отменить остальные), но это делает фиксацию более трудоемкой и подверженной ошибкам, чем это необходимо. Или я могу просто зафиксировать все это, но это затрудняет просмотр изменений моими коллегами. Кроме того, кажется, что он не является детерминированным, поэтому более поздняя фиксация может просто вернуть части обратно. Иногда я даже отменяю все изменения, а затем использую текстовый редактор, чтобы изменить только одну строку. Все это делает управление версиями излишне сложным.
Когда я смотрю на коммиты и различия, например, для стандартной библиотеки Modelica:
https://github.com/modelica/ModelicaStandardLibrary/commits/master
Различия обычно приятные, маленькие и читаемые. Есть ли способ избежать проблемы с пробелами?
Как я могу отключить все автоформатирование с помощью Dymola? Есть ли техническая причина для этого в первую очередь?
Ответ №1:
Вы можете уменьшить (но не полностью предотвратить) это поведение следующим образом:
-
Увеличьте максимальную длину строки, например, до 130
- В графическом интерфейсе: Параметры> Текстовый редактор> Максимальная длина строки
- Из командной строки: Advanced.MaxLineLength=130
-
Позвольте Dymola отформатировать всю вашу библиотеку за один раз
- Откройте текстовое представление пакета верхнего уровня
- Пометьте все с Ctrlпомощью A
- Автоматическое форматирование с Ctrlпомощью ShiftL или щелкните правой кнопкой мыши> Автоматическое форматирование
- Сохраните все с Ctrlпомощью ShiftS
- Теперь просмотрите изменения. Большинство из них будут полезны, но иногда удаляются пробелы, которые вы обычно предпочитаете сохранять (особенно
import
extends
операторы before и . Иногда они перемещаются в самый левый угол) - Зафиксируйте изменения
-
Отныне старайтесь сохранять только отдельные модели, а не пакеты
(при сохранении пакетов Dymola иногда переформатирует вложенные классы)
Комментарии:
1. Спасибо, это полезно. Для всех, кто работает с SVN или git, было бы большим улучшением улучшить значение Dymola по умолчанию здесь. Подход, описанный в sjoelund.se кажется, это очень хорошая отправная точка, это, по крайней мере, ограничило бы изменения пробелов в файлах, в которых я действительно что-то изменил, поэтому вместо 300 файлов мне нужно проверить только 3 файла.
2. Также убедитесь, что вы используете Dymola 2020x или более позднюю версию, поскольку это поведение было уменьшено в них.
3. @user2024223, какие-нибудь подробные примечания к выпуску по этой теме?
4. Одним из обходных путей является использование блокнота для изменения package.mo файлы, чтобы избежать изменения пробелов в файлах, которые не были отредактированы.
Ответ №2:
Есть несколько вещей, которые вы можете сделать, чтобы сделать красивые коммиты git для кода Modelica:
- Используйте текстовый редактор вместо графического редактора. У вас есть абсолютный контроль над тем, что вы изменяете.
- Используйте графический редактор, который не изменяет пробелы. Я не уверен в других альтернативах, но OpenModelica / OMEdit максимально сохранит существующий отступ (его также можно использовать для минимизации различий от изменений в других инструментах, но он работает все менее и менее хорошо, чем больше изменений).
- Используйте средство форматирования в качестве средства предварительной фиксации (отступы во всех файлах в соответствии с некоторыми настройками в средстве форматирования; но тогда вы не сможете вручную изменить пробелы).
- Надеюсь, что у кого-то в stackoverflow есть больше альтернатив, чем это.
Комментарии:
1. «OMEdit сохранит […] как можно больше» — звучит так, как будто это очень сложная задача — но почему? Для обычного текстового редактора это обычный способ работы !?
2. Кажется, в этой статье приводится более подробная информация: modelica.org/events/modelica2008/Proceedings/sessions /…
3. Подход, который сейчас использует OpenModelica, отличается и проще, чем в этой статье. Сложно иметь API для управления программой и сохранения всей информации. Текущий подход сравнивает 2 конкретных синтаксических дерева и сохраняет все одинаковые поддеревья, что приводит только к измененным поддеревьям, потенциально изменяющим форматирование.
4. Вероятно, основной вопрос: насколько велико одно «поддерево», это один класс или меньше? Несколько строк? Один пакет?
5. Это будет целый пакет, компонент, выражение или аннотация. Он довольно мелкозернистый и игнорирует большие части файла, если в нем нет изменений.