Milestone 2
This commit is contained in:
parent
14e3afdd7b
commit
866f0419ad
19 changed files with 2006 additions and 23 deletions
145
LSP_SETUP.md
Normal file
145
LSP_SETUP.md
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
# LSP Setup for warppipe
|
||||
|
||||
This project uses GCC 15 from Homebrew, which requires special configuration for clangd to find standard library headers.
|
||||
|
||||
## Files Created
|
||||
|
||||
1. **compile_commands.json** (symlink to build/compile_commands.json)
|
||||
- Tells clangd how files are compiled
|
||||
|
||||
2. **.clangd** - Configuration file
|
||||
- Points clangd to the compilation database
|
||||
|
||||
3. **clangd-wrapper.sh** - Wrapper script with --query-driver flag
|
||||
- Helps clangd extract system includes from GCC
|
||||
|
||||
4. **.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:
|
||||
|
||||
```bash
|
||||
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):**
|
||||
1. Install direnv: `brew install direnv`
|
||||
2. Copy `.envrc.example` to `.envrc` (or use the existing `.envrc`)
|
||||
3. Run `direnv allow` in the project directory
|
||||
4. 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):
|
||||
```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)**:
|
||||
```lua
|
||||
require('lspconfig').clangd.setup{
|
||||
cmd = { vim.fn.getcwd() .. '/clangd-wrapper.sh' }
|
||||
}
|
||||
```
|
||||
|
||||
**VS Code (settings.json)**:
|
||||
```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**:
|
||||
```lua
|
||||
require('lspconfig').clangd.setup{
|
||||
cmd = { 'clangd', '--query-driver=/home/linuxbrew/.linuxbrew/bin/g++' }
|
||||
}
|
||||
```
|
||||
|
||||
**VS Code (settings.json)**:
|
||||
```json
|
||||
{
|
||||
"clangd.arguments": ["--query-driver=/home/linuxbrew/.linuxbrew/bin/g++"]
|
||||
}
|
||||
```
|
||||
|
||||
### Option 4: Install llvm/clang++ from Homebrew
|
||||
|
||||
```bash
|
||||
brew install llvm
|
||||
```
|
||||
|
||||
Then rebuild with clang++ (requires libstdc++ setup).
|
||||
|
||||
## Neovim with coc.nvim Setup
|
||||
|
||||
### 1. Install coc-clangd
|
||||
|
||||
In Neovim, run:
|
||||
```vim
|
||||
: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):
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
```vim
|
||||
: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 (<vector>, <string>, etc.)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you still see "file not found" errors for standard headers:
|
||||
1. Ensure you're using the wrapper script
|
||||
2. Restart your LSP server
|
||||
3. Check that GCC 15 is still at the same path:
|
||||
```bash
|
||||
ls -la /var/home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0/include/c++/15
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue