Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > автоматический рефакторинг кода


Автор: _hunter 12.11.2007, 12:41
Добрый день.

Есть ли какие-то утилиты, которые могут выполнять рефакторинг автоматически? Нужно в куче исходников вызов одной функции заменить вызовом другой функции...
Хотелось бы чтобы эта утилита не требовала создание проекта и не зависела от МС Студии...

Так же я в Эклипсе присмотрел учень удобную фичу -- автоматическое форматирование кода. Хотелось бы и такое заиметь. -- Нужно чтобы между именем функции и скобкой в definition-е гарантированно был пробел. И чтобы его гарантированно небыло в reference-е...

С уважением..

Автор: virtual09 12.11.2007, 12:54
 smile 

_hunter, почему у вас Регистрация: 1.8.2007, а репутации есть и в 2006

Автор: dumb 12.11.2007, 12:58
Цитата(_hunter @  12.11.2007,  12:41 Найти цитируемый пост)
Нужно в куче исходников вызов одной функции заменить вызовом другой функции...
а обычный поиск-замена с регулярками не канает? много-файловую обработку умеет делать например uedit. и он точно не одинок.

Цитата(_hunter @  12.11.2007,  12:41 Найти цитируемый пост)
автоматическое форматирование кода
http://www.ochre.com?

Цитата(virtual09 @  12.11.2007,  12:54 Найти цитируемый пост)
_hunter, почему у вас Регистрация: 1.8.2007, а репутации есть и в 2006
почему тебя это так интересует, что ты готов оффтопить в тематической ветке форума? smile

Автор: virtual09 12.11.2007, 13:01
Цитата(dumb @  12.11.2007,  12:58 Найти цитируемый пост)
почему тебя это так интересует

может это глюк на vingrad'e 
Цитата(dumb @  12.11.2007,  12:58 Найти цитируемый пост)
что ты готов оффтопить в тематической ветке форума? 

нет, извиняюсь, если администрация прочитала мои посты, то можете их удалить

Автор: _hunter 12.11.2007, 14:36
проблема в том, что некоторые имена содержатся в других. т.е. нужно заменить open не заменяя fopen...

Автор: DjoNIK 12.11.2007, 15:08
Цитата(_hunter @  12.11.2007,  14:36 Найти цитируемый пост)
проблема в том, что некоторые имена содержатся в других. т.е. нужно заменить open не заменяя fopen...

А замена слова целиком (Match whole word)?

Автор: maxim1000 12.11.2007, 15:19
хм... пришло в голову: изменяем имя функции как-нибудь (например open -> open1)
компилируем
используем список ошибок компиляции для нахождения строк, в которых надо сделать замену
только может плохо сработать, если в одной строке есть вызовы одноимённых функций от разных объектов (типа file.open, box.open), тогда надо будет что-то более интеллектуальное придумывать smile

Автор: SergeCpp 12.11.2007, 17:01
Можно заменить, используя Perl, к примеру (выражение \<open\> не пропустит fopen)

P.S. Если используемый диалект Perl не поддерживает \< и \>, то можно вот так вот: \bopen\b

P.P.S. http://www.regular-expressions.info/wordboundaries.html

Автор: maxim1000 12.11.2007, 17:57
не, без анализа семантики нормально не получится из-за ситуаций типа file.open и box.open

Автор: _hunter 12.11.2007, 20:32
решил поробовать рег-экспы -- почти все хорошо, но есть один момент: хотелось бы заменять только вызовы функций. т.е. заменять "open(" и не заменять "open". Но тут появляется одна проблема: в исходниках я встречал пару мест, где вместо пробела стоял таб и одно место new line.
Как бы эти случаи учесть?

maxim1000, тут мне повезло (хотя это как посмотреть) -- проект чисто С-шный...

Автор: dumb 12.11.2007, 22:01
Код

\<open[\s\n\r]*\(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)