Инструменты рефакторинга кода для C, используемые в GNU / Linux? FOSS предпочтительнее

варианты этого вопроса были заданы, но не специфичны для GNU/Linux и C. я использую Komodo Edit как мой обычный редактор, но я бы предпочел что-то, что можно использовать из CLI. Мне не нужна поддержка C++; это нормально, если инструмент может обрабатывать только простые С.

Я действительно ценю любое направление, так как я ничего не смог найти. Надеюсь, мне самому не придется что-то "катать".

Примечание: пожалуйста, воздержитесь от упоминания vim; Я знаю, что он существует и что его возможности. Я целенаправленно выбираю избегать vim, поэтому я использую Komodo (или nano на серверах).

3 ответов


Я не думаю, что чистый инструмент рефакторинга консоли было бы неплохо использовать.
Я использую Eclipse CDT в linux для записи и рефакторинга C-кода.
Существует также Xrefactory для Emacs http://www.xref.sk/xrefactory/main.html

Если не консольный инструмент рефакторинга o.и для тебя тоже.


вы можете рассмотреть возможность кодирования плагина GCC или расплавить расширение (MELT-это доменный язык для расширения GCC) для ваших нужд.

однако такой подход займет некоторое время, потому что вам нужно будет понять некоторые внутренние компоненты GCC.


только для окон, а не Фосс, но вы сказали "в любом направлении..."

наши программное обеспечение DMS реинжиниринга инструментарий" С C Передний Конец можно применить преобразования к исходному коду C. DMS можно настроить для выполнения пользовательских, сложных надежный преобразования, хотя конфигурация не так проста, как ввод только команды, такой как "refactor frazzle by doobaz".

один из главных камней преткновения все еще препроцессор. DMS может преобразовывать код, который имеет директивы препроцессора в типичных местах (вокруг операторов, выражений, головок циклов if/for/while, деклараций и т. д. но другие "неструктурированные условности" создают ему проблемы. Вы можете запустить DMS, расширив директивы препроцессора из существования или более imporantly, расширив те, которые дают ему проблемы, но в основном людям это не нравится, потому что они предпочитают держать свои директивы препроцессора. Так что это не идеальный.

[другой ответ предложил Concinelle, который выглядит довольно хорошо с моей точки зрения. Насколько я знаю, он вообще не обрабатывает директивы препроцессора; я могу ошибаться, и он может обрабатывать некоторые случаи, как DMS, но я уверен, что он не может обрабатывать все случаи].

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