суббота, 4 мая 2013 г.

QtCreator и библиотеки clang: майский выпуск

На начало мая 2013 года, плагин ClangCodeModel по-прежнему находится в отдельной ветке публичного git-репозитория Qt Project. Тем не менее, прошлый обзор был сделан четыре месяца назад — пожалуй, пришло время сделать ещё один.

Диагностика

Clang по-прежнему предлагает несравнимо более качественную диагностику, чем любой другой компилятор или библиотека:
Кстати, знаете ли вы, что с помощью аннотаций clang может искать ошибки в передаче в сишный API указателя не того типа?

В то же время clang повышает требования к IDE, а именно: QtCreator должен собрать флаги, используемые при сборке (включая флаги -x c++ или -x objective-c), преобразовать их в удобную для clang форму, добавить include paths и предопределённые макросы. Уже сейчас он отлично справляется с этой задачей, но обработка флагов всё ещё не завершена (и настройки вывода предупреждений уже собираются, но пока не передаются плагину).

Также подготовлена возможность раздельного вывода диагностики — т.е. не только ошибок и предупреждений от clang, но и предупреждений от парсера QML.

Дополнение кода

За четыре месяца эта подсистема стала значительно лучше — теперь распознавание информации, приходящей от clang, работает верно во всех возможных контекстах кода:
Сигналы и слоты Qt:
Ключевое слово case:
Также QtCreator показывает подсказки для функций и макросов, имеющих параметры (учитывая опциональные параметры), вставляет snippets во многих местах (включая шаблонные классы и сообщения Objective-C), добавляет документацию из раздела @brief.

При этом отображение подсказок всё ещё имеет ряд недостатков. Кроме того, сам clang сплоховал: здесь перечислено множество недостатков, в основном в дополнении C++. А теперь на заметку участникам Google Summer of Code: в рассылке clang было небольшое обсуждение этих проблем, и лично Douglas Gregor (ментейнер и главный идеолог clang) сказал, что был бы рад видеть улучшение автодополнения C++ как проект для GSoC, а указанный список и багтрекер llvm будут для вас хорошим подспорьем.

Пока что я взялся исправлять некоторые проблемы и работаю над двумя патчами, но это займёт ещё немало времени, особенно сейчас, когда усилия сосредоточены на подготовке выпуска clang 3.3.

Подсветка

Теперь QtCreator справляется со многими нестандартными случаями и отлично подсвечивает Objective-C:

Индексация и поиск по символу

Индексация кода включена по умолчанию (разумеется, при включённом плагине ClangCodeModel) и используется для гораздо более точного и быстрого поиска символов:
Поиск срабатывает мгновенно.

Предкомпилированные заголовки

Теперь плагин создаёт и использует предкомпилированные заголовки, неплохо ускоряющие clang. К сожалению, QtCreator умеет получать нужные настройки сборки только для проектов qmake, поэтому для проектов на cmake/autotools либо без системы сборки эта фишка работать не будет. Кроме того, пользователю придётся лично зайти в настройки проекта во вкладку «ClangCodeMode» и переключить флаг, например, на «BuildSystem (Exact)» для автоматического использования настроек проекта:

Post scriptum

ClangCodeModel может стать ближе к народу уже в QtCreator 2.8 ;) Я не стану разглашать известные мне детали, пусть это будет сюрприз от Digia.

Комментариев нет:

Отправить комментарий