Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Редакторы кода

Общая мотивация

Работа редакторов кода, в отличие от IDE, обычно построена на интеграции c language server соответствующего языка. Идея заключается в общении вашего редактора с отдельно запущенной программой (language server) по определенному протоколу (language server protocol). Языковой сервер имеет весь необходимый статический контекст проекта, и редактор кода лишь обращается к нему согласно действиям, вызываемым из редактора (например, сочетание клавиш gd во многих конфигурациях vim означает go to definition: в данном случае vim вызывает языковой сервер, передавая контекст курсора, и в ответ получает информацию, какой файл необходимо открыть и на какой позиции должен оказаться курсор).

Поэтому очень важно настроить эту интеграцию: к сожалению, каждый редактор кода подходит к этому по-разному (например, neovim может использовать mason и lazy-nvim как часть инструментария). Покрыть все особенности для каждого редактора сложно, но существует бесчисленное количество гайдов в интернете. Также ознакомьтесь с гайдом по VSCode, который более подробно покрывает особенности работы с самым распространенным языковым сервером для c++ — clangd.

Настройка

Для того, чтобы clangd корректно работал, ему необходим файл compile_commands.json. В нашем сборочном окружении он экспортируется по умолчанию и находится в директории: build/<preset>. clangd же по умолчанию ищет этот файл в корне проекта.

Чтобы clangd увидел его, вам нужно сделать один из пунктов ниже:

  • Сделать сим-линк compile_commands.json в корень проекта: ln -s build/<preset>/compile_commands.json .
  • Добавить в корень проекта файл .clangd со следующим содержимым:
    CompileFlags:
        CompilationDatabase: "build/<preset>"
    
    Обратите внимание, что в пути ожидается именно директория, а не сам файл.