Изучение исходного кода

Локальная информация

KDevelop понимает исходный код и, следовательно, может предоставлять информацию о переменных или функциях в программе. Например, на следующем снимке показана работа с фрагментом кода, когда указатель мыши наведён на переменную cell в строке 1316 (если используется только клавиатура, то же самое можно сделать, некоторое время удерживая нажатой клавишу Alt):

KDevelop показывает подсказку с типом переменной (здесь: DoFHandler<dim>active_cell_iterator), местом объявления этой переменной (контейнер, которым в этом случае является окружающая функция get_maximal_velocity, так как это локальная переменная), её сущностью (это переменная, а не функция, класс или пространство имён) и строкой её объявления (в строке 1314, всего на несколько строк выше в коде).

В текущем контексте с элементом, на который наведён указатель мыши, не связана никакая документация. Если в рассматриваемом примере навести указатель мыши на элемент get_this_mpi_process в строке 1318, результат будет таким:

Здесь KDevelop показывает объявление из постороннего файла (utilities.h, который является частью совсем другого проекта того же сеанса) вместе с комментарием в формате Doxygen, сопровождающим это объявление.

Динамичность делает эти подсказки ещё полезнее: можно щёлкнуть по контейнеру для получения информации о контексте, в котором объявлена переменная (например, о пространстве имён System, в частности, месте его объявления, определении, использовании и документации), а также щёлкать по синим ссылкам для перемещения курсора на место объявления элемента (например, в utilities.h, строка 289) или получить список мест, где этот элемент используется в рамках текущего файла или всех проектов текущего сеанса. Последний вариант пригодится, когда нужно узнать, например, как определённая функция используется в объёмном коде.

Примечание

Всплывающая подсказка со временем исчезает: чтобы открыть её снова, придётся опять удерживать нажатой клавишу Alt или наводить указатель мыши на фрагменты кода. Если данные должны отображаться постоянно, откройте панель инструмента Навигация по коду. В рассматриваемом примере курсор находится на той же функции, о которой говорилось ранее, а на панели инструмента слева показаны те же сведения, что и в ранее вызванной всплывающей подсказке:

При перемещении курсора вправо на панели слева появится другая информация. Более того, если нажать расположенную сверху справа кнопку Зафиксировать текущее представление, эта информация будет зафиксирована — она перестанет зависеть от перемещения курсора.

Примечание

Такая контекстная информация доступна не только в редакторе исходного кода, но и во многих других местах KDevelop. Например, при удержании клавиши Alt нажатой в списке автоматического дополнения (например, при быстром открытии) также появится контекстная информация о текущем элементе.

Информация о файле

Следующий уровень — получить информацию обо всём файле исходного кода, над которым ведётся работа. Для этого поместите курсор в область текущего файла и посмотрите на данные, которые появятся на панели Навигация по коду:

Тут программа показывает список пространств имён, классов и функций, объявленных или определённых в текущем файле, позволяя получить общее представление о его назначении и перейти непосредственно к любому из этих объявлений или определений без затрат времени на прокрутку файла или поиск конкретного фрагмента.

Примечание

Информация об области файла полностью совпадает с информацией, представляемой в режиме навигации по коду «Структура», описание которого приводится далее; разница заключается в том, что в режиме структуры эта информация содержится во временной всплывающей подсказке.

Информация о проекте и сеансе

Получить информацию обо всём проекте (фактически, обо всех проектах в сеансе) можно разными способами. Такая информация обычно предоставляется с помощью различных инструментов. Например, на панели инструмента Классы показана древовидная структура всех классов и окружающих пространств имён для всех проектов сеанса, а также входящие в эти классы функции и переменные:

Опять же, с помощью наведения указателя мыши на запись в списке можно получить информацию об элементе, месте его объявления и определения, а также случаях его использования. Двойной щелчок по записи в этом иерархическом списке позволяет открыть окно редактора с местом, где объявлен или определён этот элемент.

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

Пояснение о выделении разными цветами

В KDevelop для выделения объектов в коде используется целая палитра цветов. Если знать, чему соответствуют разные цвета, можно быстро получить много информации вообще без чтения кода — исключительно на основе цвета. Правила выделения цветом таковы:

  • Объекты типов Class / Struct, Enum (значения и тип), (глобальные) функции и участники классов выделяются разными цветами (классы — зелёным, перечисления — тёмно-красным, участники — тёмно-жёлтым или фиолетовым, (глобальные) функции — всегда фиолетовым).

  • Все глобальные переменные выделяются тёмно-зелёным.

  • Идентификаторы, представляющие собой определения других типов, выделяются сине-зелёным цветом.

  • Все объявления и определения объектов выделяются полужирным.

  • Если доступ к участнику класса осуществляется из контекста его определения (базового или производного класса), он выделяется жёлтым цветом, а в ином случае — фиолетовым.

  • Если участник класса является закрытым или защищённым, для его выделения используется более тёмный цвет.

  • Для переменных, локальных по отношению к области тела функции, цвета выбираются на основе хэша идентификатора. Это касается и параметров функции. Идентификатор всегда будет иметь один и тот же цвет внутри своей области (но тот же самый идентификатор получит другой цвет, если представляет другой объект; например, если он был переопределён в более вложенной области), и обычно одно и то же имя идентификатора будет выделяться одним и тем же цветом в разных областях. Следовательно, если имеется несколько функций, принимающих параметры с одинаковыми именами, все аргументы будут выделены одним и тем же цветом. Использование таких цветов можно отключить независимо от глобального выделения цветом с помощью диалога настройки.

  • Идентификаторы, для которых KDevelop не удалось найти соответствующие объявления, выделяются белым цветом. Иногда причиной может быть отсутствие инструкций #include.

  • Помимо такого выделения цветом, применяются обычные правила подсветки синтаксических конструкций, заданные в Kate. При возникновении конфликтов приоритет всегда получают правила подсветки KDevelop.