SLiDER
Гость
|
|
« Ответ #56 : Декабрь 08, 2005, 19:54 » |
|
Ну вот, как и обещал в соседней теме, предлагаю всем желающим принять участие в опросе, конечной целью которого, в основном, является выяснение следующих вопросов: - Устраивает ли их та среда разработки которой они пользуются. - Что именно их не устраивает. - Какими фичами должна обязательно обладать среда разработки. - Какие фичи желательны. - Чего не должно быть ни в коем случае.
Ниже я постараюсь наиболее полно и обоснованно (ИМХО 8-) ) описать набор свойств необходимых (фич) и свойств ненужных (багов) для нужной МНЕ среды разработки. Еще раз повторюсь что все ниже написанное мое личное, сугубое ИМХО, так что прошу ногами не пинать, а вот развернутые и обоснованные комментарии очень даже приветствуются. И пусть общественный разум родит описание идеальной среды разработки (пускай и нереализуемой ;-) ). Аминь. :-)
Ну что же, начнем помаленьку. Центром любой среды разработки является текстовый редактор. Ну и, конечно, наша идеальная не будет исключением.
Редактор (текстовый) кода:
1. Расширенная подсветка синтаксиса. Расширенная она в том смысле что, подсвечиваться должны не только типы и ключевые слова языка программирования и функции стандартных библиотек, но и типы, функции и т.п., как подключенных к проекту библиотек, так и определенных пользователем. Причем, под подсветкой я понимаю не только выделение другим цветом, но и другим шрифтом и модификатором шрифта (наклон, жирность ...).
2. Интеллектуальные подсказки:
a) Для внутреннего содержимого типов (т.е. при наборе символов . или -> или принудительный вызов по горячей клавише (ГК)), в т.ч. и для типов всех подключенных к проекту библиотек и типов определенных, в проекте, пользователем. Реализуется в виде выпадающего от курсора списка, важна возможность автоматической (интеллектуальной) фильтрации списка при дальнейшем вводе текста с клавиатуры. Интеллектуальность фильтрации объясню на примере. Имеем объект типа Type t. Обращаемся к его внутренней структуре следующим образом t.col и после фильтрации в выпадающем списке видим и color и setColor. Под выпадающим списком должен быть помешен ряд кнопок, позволяющий осуществить дополнительную фильтрацию по типам модификаторов параметров (public, private, protected, static, а также slots, signals мы ведь на Qt писать будем 8-)). Размер контрола должен регулироваться мышкой или клавиатурой. Содержимое списка должно максимально подробно отображать информацию об элементах (в т.ч. с использованием иконок и подсветкой синтаксиса), для выбранного элемента должна всплывать подсказка (если она есть в заголовочном файле). Движек подсказок должен уметь реагировать на изменение файлов проекта из вне, так кам мы незабываем, что используем Qt и имеем автоматически генерируемые файлы, подсказку по, которым получать тоже очень хочется. Ни в коем случае не фильтровать по возвращаемому параметру, как это реализовано в С++ Builder 6.
b) В процессе набора кода (в стиле Visual Assist) для имен объектов, функций, типов вобщем для всего, с учетом частоты использования (и др. вероятностных характеристик 8-) ), автоматической фильтрацией по мере набора и завершению по нажатию Enter.
c) Для параметров функций, с возможностью клавишами выбирать один из нескольких вариантов (если они есть), и подсветкой (в подсказке текущего вводимого параметра). Подсказка висит до тех пор пока не завершен ввод функции. Нужен принудительный вызов по ГК.
d) При наборе #include, в зависимости от типа окружающих символов (или "" или <>), выпадающий список доступных заголовочников с интеллектуальной фильтрацией по мере набора.
e) Автоматическое закрытие всех типов парных символов ("", {} и т.п.) с последующим помещением курсора между ними.
3. Фолдинг. Для незнакомых с этим понятием, поясню. Фолдинг это возможность сворачивать куски кода. По принципу действия это напоминает работу с элементом TreeView. Очень-очень полезная вещь, если колличество кода в файле переваливает за несколько тысяч строк. Так вот, фолдинг хотелось бы иметь много уровневый, с возможностью настраивания точек сворачивания. Т.е. сворачивать код не только по блокам определенным знаками {}, но и, например, регионами (как это реализовано в MS Visual Studio, начиная с версии 7). Т.е. мы выделяем кусок кода коментариями типа //BeginOfRegion NameOfRegion и //EndOfRegion NameOfRegion. И имеем после этого возможность свернуть данный регион в линию. На месте свернутого кода должна появляться некоторая осмысленная информация о том что собственно находится в свернутом фрагменте. Для функции это может быть ее имя, для региона то, что мы сами для него напишем. Так же нужна возможность сворачивания макросов, списков define-ов, inсludе-ов и т.п. (предложения приветствуются). Сворачивание должно одинаково производится как с клавиатуры так и с помощью мыши по контролу располагающемуся с левого края редактора (возможный вид контрола, обсуждаем, мне, в принципе, нравится и подход eclipse и подход Visual Studio). Так же должно быть возможным просмотреть (хотя бы и частично) содержимое свернутого фрагмента не разворачивая его, по средством наведения на него курсора мыши или по средством ГК. Должен быть реализован набор функций позволяющий свернуть развернуть все и или частично (например выше или ниже от курсора) и т.п. Предложения приветствуются. Свернутые фрагменты кода не должны быть препятствием для других функциональностей редактора как то поиск, замена проверка синтаксиса и .т.п. Реализовано это может быть по разному, например, в диалоге поиска завести галку «искать в свернутых фрагментах». Предложения приветствуются.
4. Рефакторинг. Есть неплохая книга () по данному вопросу, так вот все приемы, которые в ней описаны, должны быть (ИМХО) реализованы в ИДЕАЛЬНОЙ IDE. Возможно это перегиб, но как минимум базовый набор фич, точно должен быть. Как то : переименования, добавления, удаления элементов, внос/вынос элементов в/из класс(а), функцию(и), пространство(а) имен ну и т.п. Добавления приветствуются.
5. Поиск и замена в файле, открытых файлах, в файлах проекта, в директории и т.п. с использованием регулярных выражений, хотя бы на уроне EditPlus v.2.12.
6. Всевозможные генераторы кода. Например генератор классов (очень нравится eclipse-овская версия). Здесь же, интеграция с системой автодокументирования кода (мне больше нравится Doxygen).
7. Редактор должен быть многооконным, с легкой навигацией между открытыми окнами, лучше всего в стиле alt-tab (с всплывающим окном со списком файлов, оформление окна – тема для обсуждения (неплохо смотрится, эта штука, в VS2005, там она еще позволяет переходить и по служебным окнам, оччччнь удобно 8-) )). Для навигации мышкой остаются табы. Скролинг мышовым колесом над ними приводит к перелистыванию окон (обсуждаем). Возможна дополнительная группировка окон по unit-ам (.h и .cpp как в С++ Builder 6) (обсуждается).
8. Все должно, ВПЕРВУЮ ОЧЕРЕДЬ, УДОБНО управляться с клавиатуры, и лишь, как второстепенная функция, другими элементами управления (мышь и т.п.). Все ГК должны быть настраиваемыми (но иметь изначально удобный набор предустановок) и не должны зависеть от текущей раскладки.
9. Полезные мелочи:
a) Поддержка шаблонов для автоматической вставки разнообразных кусков кода. И снова интеграция с Doxygen. 8-)
b) Поддержка автоматического (по нажатию клавиш / и * на цифровой клавиатуре) комментирования/раскомментирования выделенных фрагментов, соответствующим типом комментариев.
c) Поддержка макросов.
d) Проверка синтаксиса в нутри комментариев (8-) Гммм)
e) Подсветка парных скобок под курсором.
f) Интеллектуальные отступы и вставки.
g) Нумерация строк и колонок в стиле EditPlus v.2.12.
h) Режим переноса длинных строк (весьма и весьма нетривиальная задача 8-( )
i) Все возможные сервисные функции типа «go to line», «go to file», «go to definition», «go to declaration», «open file at cursot», «open source file», «open header file» и т.д. Предложения приветствуются.
j) Окружение выделенного фрагмента всякими штуками, вроде различных скобок, #ifdef-ов, регионов (см. выше) и т.п.
k) Понимание Unicode, да и вообще максимального количества всевозможных кодировок.
l) Понимание Windows и Unix форматов файлов (в смысле символов завершения).
10. Редко нужные, но иногда очень полезные функции:
a) Шестнадцатиричное представление с возможностью редактирования.
b) Так называемый режим Column Edit, думаю пояснения тут не нужны.
c) Сохранение файлов с учетом подсветки и форматирования в различные форматы (html, rtf, pdf и т.п.)
11. Сложно реализуемые но ооооооочень полезные фичи:
a) Интерфейс к дебагерам.
12. Выше не рассматривается, но само собой разумеется, что редактор должен обладать всеми стандартными свойствами редакторов, вроде открытия/закрытия/сохранения файлов, бесконечное undo/redo, навигация с помощью мыши и клавиатуры и т.п.
Из всего, выше сказанного, становится ясно, что без базы данных, скорее всего, не обойтись, посему, есть еще одна тема для обсуждения. 8-)
Уфффффф. Устал. С редактором пока все. Хотя я наверняка много чего забыл, оставляю это читателям на откуп. Ругайте. Об остальных частях идеальной IDE несколько позже.
TO BE CONTINUE. I'L BE BACK. 8-)
З.Ы. В связи с участившимися злоупотреблениями 8-), у меня, как у аффтара 8-) темы, ОГРОМНАЯ ПРОСЬБА ко всем комментаторам, ПИСАТЬ ПО РУССКИ. Так как не украинского, ни белорусского ни тем более Бобруйского языка я не понимаю.
З.З.Ы. Местные списки (List) так и не понял, так что не обессудте.
|