| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > автоматический рефакторинг кода |
| Автор: _hunter 12.11.2007, 12:41 |
| Добрый день. Есть ли какие-то утилиты, которые могут выполнять рефакторинг автоматически? Нужно в куче исходников вызов одной функции заменить вызовом другой функции... Хотелось бы чтобы эта утилита не требовала создание проекта и не зависела от МС Студии... Так же я в Эклипсе присмотрел учень удобную фичу -- автоматическое форматирование кода. Хотелось бы и такое заиметь. -- Нужно чтобы между именем функции и скобкой в definition-е гарантированно был пробел. И чтобы его гарантированно небыло в reference-е... С уважением.. |
| Автор: virtual09 12.11.2007, 12:54 |
| _hunter, почему у вас Регистрация: 1.8.2007, а репутации есть и в 2006 |
| Автор: virtual09 12.11.2007, 13:01 |
может это глюк на vingrad'e нет, извиняюсь, если администрация прочитала мои посты, то можете их удалить |
| Автор: _hunter 12.11.2007, 14:36 |
| проблема в том, что некоторые имена содержатся в других. т.е. нужно заменить open не заменяя fopen... |
| Автор: DjoNIK 12.11.2007, 15:08 | ||
А замена слова целиком (Match whole word)? |
| Автор: maxim1000 12.11.2007, 15:19 |
| хм... пришло в голову: изменяем имя функции как-нибудь (например open -> open1) компилируем используем список ошибок компиляции для нахождения строк, в которых надо сделать замену только может плохо сработать, если в одной строке есть вызовы одноимённых функций от разных объектов (типа file.open, box.open), тогда надо будет что-то более интеллектуальное придумывать |
| Автор: 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 | ||
|