Редакторы кода
Общая мотивация
Работа редакторов кода, в отличие от 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>"