LINUX.ORG.RU

[C++] Автоматическая правка кода

 


0

2

Здравствуйте!

Мне нужно обработать исходный код на С++ и привести его в божеский, как считает заказчик, вид. А это отступы табами, выравнивание скобочек и еще какая-то мелочь, с этим справится astyle. Но второй пунктик: венгерская нотация. Есть ли что-нибудь, автоматизирующее сей увлекательный процесс? Сейчас склоняюсь к написанию велосипеда, после которого скорее всего придется еще немного руками подправить код, но в целом наверное с задачей справится. Но может быть есть что-то готовое? Я даже не знаю по каким ключевым словам гуглить этот вопрос.

На чем будет написана тулза не важно, лишь бы что-нибудь до селе поддерживаемое. Можно и под вражескую ось :)

★★★★★

Последнее исправление: staseg (всего исправлений: 1)

в netbeans, говорят, много всякого для рефакторинга. т.е. я не в курсе если что, мопед не мой.

mi_estas
()

>>Но второй пунктик: венгерская нотация

Было б хорошо такую ересь удалять.

sched
()
Ответ на: комментарий от stevejobs

>но зачем ему это?..

Ну хз, я исполнитель, заказчик вообще левый, что-то доказывать ему не вижу смысла. Конкретно эту вещь нужно просто наотъебись сделать и все.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

>Конкретно эту вещь нужно просто наотъебись сделать и все.

По-моему у них эта нотация типа копроротивный стандарт.

staseg ★★★★★
() автор топика
Ответ на: комментарий от note173

>Вручную рефакторинг каждого объявления класса, если их не слишком много.

Почти 10k строк исходников. После astyle становится ~13k. Вручную не хочу.

staseg ★★★★★
() автор топика

> Но второй пунктик: венгерская нотация. Есть ли что-нибудь, автоматизирующее сей увлекательный процесс?

Для C++ ни одна IDE не умеет корректно делать rename, так что врядли существует. Как оно, например, должно внутренности boost обрабатывать, когда там сплошная кодогенерация на препроцессоре и шаблонах?

kamre ★★★
()
Ответ на: комментарий от kamre

>Для C++ ни одна IDE не умеет корректно делать rename, так что врядли существует. Как оно, например, должно внутренности boost обрабатывать, когда там сплошная кодогенерация на препроцессоре и шаблонах?

Не надо пережевывать буст. Надо пережевать обычный плюсовый код, в основном то, что касается интерфейсов классов. Кодогенерация из макросов у меня тоже присутствует, но это не касается интерфейсов. А если чуть-чуть касается, эти места вручную исправлю.

staseg ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ай тьфу, visual assist под юникс тогде indent не покатит

anonymous
()
Ответ на: комментарий от Raving_Zealot

в Microsoft от обязательной для всех венгерской нотации, емнип, отказались много лет назад

stevejobs ★★★★☆
()
Ответ на: комментарий от kamre

> Как оно, например, должно внутренности boost обрабатывать, когда там сплошная кодогенерация на препроцессоре и шаблонах?

формальная модель кодогенерации и шаблонов? <trollface.svg>

stevejobs ★★★★☆
()

QtCreator

QtCreator умеет переименовывать поля и методы по Ctrl+Shift+R,

отступы, скобки - по Ctrl+I.

Загоняйте файлы в проект, работы не больше, чем на 20 минут.

braboar
()
Ответ на: QtCreator от braboar

>QtCreator умеет переименовывать поля и методы по Ctrl+Shift+R,

он это делает весьма херово. даже поиск+замена делают это лучше.

seed_stil ★★
()

qtCreator.
Отступы делаются в 2-4 щелчка, есть пейменование переменной/класса/метода во всем тексте. Только на #define somevar не действует.

ymuv ★★★★
()
Ответ на: комментарий от seed_stil

>>QtCreator умеет переименовывать поля и методы по Ctrl+Shift+R,

он это делает весьма херово. даже поиск+замена делают это лучше.

Чем плохо? У меня только то что в дефайнах не хочет переименовывать. QtCreatror 2.3.1, Qt 4.7.4 если что.

ymuv ★★★★
()
Ответ на: комментарий от kamre

Открой для себя QtCreator.

П.С, Топикастеру тоже советую к нему присмотрется. Совсем не автоматически, но все же не ручками править.

anonymous
()

Есть суровый вариант - взять OpenCxx и написать самому.

cattail
()

Что вы имеете в виду под венгерской нотацией? Если указание в именах переменных информации об их типе, то это еще более или менее, но возможно (хотя в рамках Си++ решать не стоит). Если же речь идет о настоящей венгерской нотации, то тут вам никакие утилиты не помогут. Это творческий процесс.

delete83 ★★
()
Ответ на: комментарий от ymuv

> Чем плохо?

Пока в QtCreator самописный кривой парсер для C++ оно не будет нормально работать. Вот когда они на clang перейдут, тогда и можно будет рассматривать всерьез.

kamre ★★★
()
Ответ на: комментарий от stevejobs

> формальная модель кодогенерации и шаблонов? <trollface.svg>

Ну С++ все-таки не жабка, где даже аналог boost::multi_index нельзя сделать.

kamre ★★★
()

Благодарствую!

Воспользовался QtCreator для правки классов и методов и astyle для форматирования.

staseg ★★★★★
() автор топика

В KDevelop достаточно удобные инструменты для рефакторинга и изменения стиля.

panter_dsd ★★★★
()
Ответ на: комментарий от ymuv

>Чем плохо? У меня только то что в дефайнах не хочет переименовывать. QtCreatror 2.3.1, Qt 4.7.4 если что.

есть интерфейс и пара реализаций. в интерфейсе есть public slot somemethod. По Ctrl+Shift+R название медода меняется в интерфейсе и реализациях, но не меняется (как минимум) в строчке коннекта зависимого кода.

ну и, в догонку, стили кода (per project) у меня тоже не работают (как минимум с некутешными проектами)

версии те же

seed_stil ★★
()

KDevelop умеет нормально переименовывать... Но это каждая переменная руками... задолбешься.

Jetty ★★★★★
()
Ответ на: комментарий от seed_stil

> есть интерфейс и пара реализаций. в интерфейсе есть public slot somemethod. По Ctrl+Shift+R название медода меняется в интерфейсе и реализациях, но не меняется (как минимум) в строчке коннекта зависимого кода.

Это уже Qt-specific, макросы SIGNAL/SLOT раскрываются в строку, поэтому статический анализ не может распознавать это как reference функции, если он не знает специфику этих макросов.

kamre ★★★
()
Ответ на: комментарий от anonymous

> Открой для себя QtCreator.

Давно уже открыл для себя Xrefactory для Emacs, в нем еще более или менее нормально реализован rename (но тоже не без косяков). А QtCreator пока не умеет корректно парсить плюсовый код, поэтому rename в нем работает некорректно.

kamre ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.