3.7 KiB
LSP Setup for Warp Pipe
This project uses GCC 15 from Homebrew, which requires special configuration for clangd to find standard library headers.
Files Created
-
compile_commands.json (symlink to build/compile_commands.json)
- Tells clangd how files are compiled
-
.clangd - Configuration file
- Points clangd to the compilation database
-
clangd-wrapper.sh - Wrapper script with --query-driver flag
- Helps clangd extract system includes from GCC
-
.envrc - Environment variables for LSP
- Sets CLANGD_FLAGS to configure clangd globally
Using the LSP
Option 1: Use CLANGD_FLAGS Environment Variable (Easiest)
Set the environment variable in your shell before starting your editor:
export CLANGD_FLAGS="--query-driver=/home/linuxbrew/.linuxbrew/bin/g++"
Add this to your ~/.bashrc or ~/.zshrc to make it permanent.
Using direnv (Recommended for per-project setup):
- Install direnv:
brew install direnv - Copy
.envrc.exampleto.envrc(or use the existing.envrc) - Run
direnv allowin the project directory - The environment will be set automatically when you cd into the project
Neovim users: If you start Neovim from the shell with the env var set, clangd will automatically pick it up.
VS Code users: Add to your workspace settings (.vscode/settings.json):
{
"terminal.integrated.env.linux": {
"CLANGD_FLAGS": "--query-driver=/home/linuxbrew/.linuxbrew/bin/g++"
}
}
Option 2: Use clangd-wrapper.sh
Configure your editor to use /var/home/joey/Projects/warppipe/clangd-wrapper.sh instead of clangd.
Neovim (nvim-lspconfig):
require('lspconfig').clangd.setup{
cmd = { vim.fn.getcwd() .. '/clangd-wrapper.sh' }
}
VS Code (settings.json):
{
"clangd.path": "/var/home/joey/Projects/warppipe/clangd-wrapper.sh"
}
Option 3: Pass --query-driver via Editor Config
Add to your editor's clangd configuration:
Neovim:
require('lspconfig').clangd.setup{
cmd = { 'clangd', '--query-driver=/home/linuxbrew/.linuxbrew/bin/g++' }
}
VS Code (settings.json):
{
"clangd.arguments": ["--query-driver=/home/linuxbrew/.linuxbrew/bin/g++"]
}
Option 4: Install llvm/clang++ from Homebrew
brew install llvm
Then rebuild with clang++ (requires libstdc++ setup).
Neovim with coc.nvim Setup
1. Install coc-clangd
In Neovim, run:
:CocInstall coc-clangd
2. Configure coc-clangd
Option A: Project-specific (Recommended)
A .vim/coc-settings.json file has been created in this project with the correct configuration. Just open Neovim in this directory and it will work automatically.
Option B: Global configuration
Edit ~/.config/nvim/coc-settings.json (or create it):
{
"clangd.arguments": [
"--background-index",
"--clang-tidy",
"--query-driver=/home/linuxbrew/.linuxbrew/bin/g++"
],
"clangd.path": "/home/linuxbrew/.linuxbrew/bin/clangd"
}
Note: The global config will apply the --query-driver to all projects, which might cause issues for non-Homebrew projects. The project-specific config (Option A) is safer.
3. Restart coc
After configuration:
:CocRestart
Verifying LSP Works
After configuration, open any C++ file and check:
- Autocomplete works
- Go-to-definition works (F12/gd)
- No errors on standard library includes (, , etc.)
Troubleshooting
If you still see "file not found" errors for standard headers:
- Ensure you're using the wrapper script
- Restart your LSP server
- Check that GCC 15 is still at the same path:
ls -la /var/home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0/include/c++/15