понедельник, 30 ноября 2009 г.

Неформат.

Прочитал в блоге у коллеги заметку про встроенный в IDE форматтер. Человек не пожалел времени, разложил все по полочкам с примерами. Добавить в общем-то и нечего, окромя нескольких косяков этого форматтера. Ну, кто про что, а я - про баги. =)


Наличие встроенного средства форматирования в среде разработки - это как бальзам на душу. Я уже по этому поводу высказывался. Поэтому, как только появилась такая возможность, я сразу же приступил к его использованию. Горячая клавиша (ctrl+d) расположена удобно - так и подмывает её периодически нажимать. Да и функционирует новый форматтер неплохо. Но есть несколько нюансов в его работе, из-за которых код форматируется ошибочно. Обратимся к примерам:
















Как видите, с классами TTest1, TTest2 и TTest3 все в порядке. А вот TTest4 получился кривым: отступ у класса неверен и метод съехал набекрень. Найти "десять" различий не сложно. У класса TTest1 есть завершающий End, у TTest3 - его нет. И хотя такая конструкция успешно компилируется, форматтер на ней глючит. Эффект наблюдается кумулятивный: когда идут подряд несколько классов, подобных TTest3 - отступ у расположенных ниже по коду конструкций становиться гигантским. Они съезжают к правой границе экрана и пугают разработчика своим остроконечным разнобоем, напоминая выравнивание текста по правому краю.

Другая заковыка касается использования точки с запятой. Обратите внимание на результаты форматирования, приведенные ниже:



































В методе класса TTest4 всё хорошо, а вот у класса TTest2 из-за опущенной точки с запятой наблюдаем смещение блока "finally end" в первом случае и finally во втором. Так что если после форматирования "что-то не так" - проверьте end-ы и точки с запятыми. Безусловно, жить данные баги не мешают и решаются легко.

Рад, если был кому-нибудь полезен =).

3 комментария:

Unknown комментирует...

Что интересно, уже в Delphi Turbo, которым я пользуюсь, есть подобие встроенного форматера. У меня до последнего времени у меня был свой почерк. Одинарные отступы, отсутствие пробелов там, где можно без них обойтись. И вот я стал замечать, что посреди моего кода, начали появляться островки форматирования а ля борланд. Оказалось, что выделение фрагмента кода в отдельный метод клавишей Ctrl+Shift+M приводит к автоматическому его форматированию. Хотелось прочитать здесь о том, насколько автоформатирование при рефакторинге отличается от автоформатирования "Ctrl+D" в пределах RAD 2010. И по части глюкавости тоже.

Mikhail Mokhov комментирует...

Честно признаться, я особых отличий форматирования при рефакторинге не встречал. Код форматируется в стиле Борланд, а так как у меня стиль такой же, то и в глаза как-то это не бросается. Пользуюсь только некоторыми функциями рефакторинга. Обычно это Findunit (последнее время что-то глючит), Extract Metod, Declare Variable, Rename, да и пожалуй все. Что-то как-то не приходилось экстрактить интерфейсы, хотя штука, пожалуй, удобная, если в классе куча методов и интерфейсов.

Анонимный комментирует...

Да быстро Читаю и поинмаю, который ничего не понимаю о чем диатриба:)