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

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

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

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

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012

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

если вам не подходит инструмент рефакторинга для консоли.

0 голосов
/ 23 февраля 2012

Только для Windows, но не для FOSS, но вы сказали «в любом направлении ...»

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

Одним из главных камней преткновения остается препроцессор. DMS может преобразовывать код, имеющий директивы препроцессора в типичных местах (вокруг операторов, выражений, заголовков цикла if / for / while, объявлений и т. Д.), Но другие «неструктурированные условия»Это может вызвать проблемы. Вы можете запустить DMS, расширив директивы препроцессора из существования, или, что еще важнее, расширив те, которые доставляют ему проблемы, но в основном людям это не нравится, потому что они предпочитают хранить свои директивы препроцессора.не совершенны.

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

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

0 голосов
/ 23 февраля 2012

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

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

...