Инструменты для синтаксиса?
Есть ли какие-либо (в идеале GUI) инструменты diff, которые знают о синтаксисе?
В качестве примера того, что я ищу, я все время считаю, что мой текущий пропущенный инструмент выравнивает повторяющийся код:
Foo = { 'hello': 'world', | Foo = { 'hello': 'world',
'goodnight': 'moon' | 'goodnight': 'moon'
} <
<
Bar = { 'picture': 1000, <
} | }
Мне нужен инструмент, который попытался бы сделать соответствующие фигурные скобки с одной стороны выровненными с соответствующими скобками на другом.
Изменить: Я ищу инструмент, который может автоматически определить это условие и исправить его выравнивание.
Ответы
Ответ 1
Не основанный на графическом интерфейсе, но полностью синтаксис: моя компания инструменты Smart Differencer для многих языков (включая Java, С#, С++, PHP, Python, JavaScript, HTML, XML, COBOL,...)
Smart Differencer анализирует исходный текст, как компилятор, поэтому он понимает этот синтаксис языка и структурирует способ компилятора. Он сравнивает эти структуры (используя AST) для определения "минимального расстояния редактирования" с точки зрения действий редактирования (перемещение, копирование, удаление, замена, переименование-идентификатор-в-блоке) в этих структурах и их отчет.
В вашем примере он будет знать, что фигурная скобка справа принадлежит foo, а не bar, и сообщит вам, что весь оператор, содержащий bar, был просто удален.
Стиль вывода является diff-like, если вы хотите передать результат другому инструменту или более читабельному человеку, если вы хотите изучить его напрямую.
Ответ 2
Beyond Compare позволит вам перестроить строки, которые он не соответствует. Обычно мне повезло, что он правильно соответствует линиям.
Ответ 3
Я думаю, что у Beyond Compare есть то, что вы ищете
http://www.scootersoftware.com/index.php
Ответ 4
Мне нравится Source Gear DiffMerge.
Ответ 5
Инструмент Pretty Diff - это синтаксис, который автоматически распознается. Процесс, который он использует, - это минимизировать код, чтобы удалить комментарии, а затем украсить код, чтобы нормализовать форматирование и пробел. Тем не менее, он поддерживает только несколько веб-клиентских языков. Этот инструмент работает на стороне клиента, чтобы вы могли проверить его в своем браузере, и есть примерная страница, содержащая некоторые демонстрации.