Есть инструмент для рефакторинга скриптов? Я сомневаюсь.
Однако вы можете построить его, используя общий program transformation system (PTS).
Это инструменты, которые принимают описания языков (вам понадобится грамматика для скриптов оболочки POSIX), будет анализировать упомянутые конструкторы ASTM, а затем разрешить применять преобразования к этим AST, наконец, отпечатать AST до действительного источника текст.
Хорошие PTSes позволяют выражать изменения кода с использованием шаблонов исходного кода (Cocinelle - это не цель для PGG, поскольку он работает только для C, но попадает в эту категорию управляемых исходным кодом), а не записывает код процедуры для изменения деревья.
Проблема с большинством из них заключается в том, что они не выходят за рамки сопоставления (без контекста) AST, в то время как реальные ограничения требуют, чтобы инструмент понимал «контекст» (например, как информация издалека в исходном тексте влияет на смысл конкретной точки в тексте). Cocinelle также делает это, поэтому он интересный инструмент; этот вид возможностей необходим для преобразования традиционных языков программирования.
Наш DMS Software Reengineering Toolkit - это общая PTS, которая обеспечивает поддержку контекстного анализа (таблицы символов, анализ управления и потока данных, ...). Я думаю, что (Unix) shell-скриптинг langauge, такой как Posix, все имеют различные макроподобные возможности, которые делают их намного сложнее, чем макро-бесплатные langauges, такие как Java. DMS обеспечивает встроенную поддержку для захвата и обработки условных препроцессоров и макросов; он в настоящее время использует их для обработки C и C++.
Но трансформация Posix не из коробки. Вы должны определить его грамматику и поддержку контекстного анализа для DMS. В этот момент вы можете начать писать контекстно-зависимые преобразования с использованием шаблонов источника. Эта работа выполнима с DMS, но не является уикендом. Так что реальный вопрос:
сколько автоматических исправлений вы намерены делать; достаточно ли обосновать настройку PTS?