mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-29 19:07:08 +00:00
emacs
parent
dd582a52a4
commit
f1e39cf0a4
43
Emacs.md
43
Emacs.md
@ -1,9 +1,8 @@
|
|||||||
1. See [[Getting started]] to build the `ccls` executable
|
1. See [[Getting started]] to build the `ccls` executable
|
||||||
2. Install [lsp-mode](https://github.com/emacs-lsp/lsp-mode) and (optional) [lsp-ui](https://github.com/emacs-lsp/lsp-ui)
|
2. Install [lsp-mode](https://github.com/emacs-lsp/lsp-mode) and optionally, [lsp-ui](https://github.com/emacs-lsp/lsp-ui) + [company-lsp](https://github.com/tigersoldier/company-lsp)
|
||||||
3. (optionally) Install [company-lsp](https://github.com/tigersoldier/company-lsp)
|
3. Install [emacs-ccls](https://github.com/MaskRay/emacs-ccls) (ccls on Melpa) and [configure](#configure) it
|
||||||
4. Install [emacs-ccls](https://github.com/MaskRay/emacs-ccls) and [configure](#configure) it
|
4. Open a source file where either [[.ccls|Getting-started#ccls]] or [[compile_commands.json]] is in the project root (it works without them, if you don't need extra compiler command line options like `-I`)
|
||||||
5. Open a source file where either [[.ccls|Getting-started#ccls]] or [[compile_commands.json]] is in the project root (it may work without them, though not recommended)
|
5. `M-x lsp-ccls-enable`. Don't invoke `M-x lsp-mode`. `lsp-ccls-enable` will turn on `lsp-mode` for you
|
||||||
6. `M-x lsp-ccls-enable`. Don't invoke `M-x lsp-mode`. `lsp-ccls-enable` will turn on `lsp-mode` for you
|
|
||||||
|
|
||||||
Alternatively, you may install https://github.com/joaotavora/eglot
|
Alternatively, you may install https://github.com/joaotavora/eglot
|
||||||
|
|
||||||
@ -26,15 +25,13 @@ The only required configuration is `ccls-executable`. Others have good defaults.
|
|||||||
;; (setq ccls-extra-args '("--log-file=/tmp/cq.log"))
|
;; (setq ccls-extra-args '("--log-file=/tmp/cq.log"))
|
||||||
;; ;; Cache directory, both relative and absolute paths are supported
|
;; ;; Cache directory, both relative and absolute paths are supported
|
||||||
;; (setq ccls-cache-dir ".ccls-cache")
|
;; (setq ccls-cache-dir ".ccls-cache")
|
||||||
;; ;; Initialization options
|
|
||||||
;; (setq ccls-extra-init-params '(:completion (:detailedLabel t)))
|
|
||||||
```
|
```
|
||||||
|
|
||||||
A more flexible way is to leave `ccls-executable` unchanged (default: `ccls`) and create a shell wrapper named `ccls` that is in your `PATH`:
|
A more flexible way is to leave `ccls-executable` unchanged (default: `ccls`) and create a shell wrapper named `ccls` that is in your `PATH`:
|
||||||
```zsh
|
```zsh
|
||||||
#!/bin/zsh
|
#!/bin/zsh
|
||||||
#export CCLS_TRACEME=1 # if you want to debug ccls, stop it right after main() is called
|
#export CCLS_TRACEME=1 # if you want to debug ccls, stop it right after main() is called
|
||||||
#export LD_LIBRARY_PATH=~/llvm/release/lib # if you link against shared library libLLVM.so, not statically
|
#export LD_LIBRARY_PATH=~/llvm/Release/lib # if you link against shared library libLLVM.so, not statically
|
||||||
exec ~/ccls/Release/ccls --log-file=/tmp/ccls.log "$@"
|
exec ~/ccls/Release/ccls --log-file=/tmp/ccls.log "$@"
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -61,7 +58,7 @@ If you do not mind files in subprojects are treated as part of the whole project
|
|||||||
|
|
||||||
To turn on ccls for all C/C++ modes:
|
To turn on ccls for all C/C++ modes:
|
||||||
```elisp
|
```elisp
|
||||||
(defun ccls//enable ()
|
(defun +ccls/enable ()
|
||||||
(condition-case nil
|
(condition-case nil
|
||||||
(lsp-ccls-enable)
|
(lsp-ccls-enable)
|
||||||
(user-error nil)))
|
(user-error nil)))
|
||||||
@ -69,10 +66,12 @@ To turn on ccls for all C/C++ modes:
|
|||||||
(use-package ccls
|
(use-package ccls
|
||||||
:commands lsp-ccls-enable
|
:commands lsp-ccls-enable
|
||||||
:init
|
:init
|
||||||
(add-hook 'c-mode-hook #'ccls//enable)
|
(add-hook 'c-mode-hook #'+ccls/enable)
|
||||||
(add-hook 'c++-mode-hook #'ccls//enable)
|
(add-hook 'c++-mode-hook #'+ccls/enable)
|
||||||
|
(add-hook 'objc-mode-hook #'+ccls/enable)
|
||||||
|
(add-hook 'cuda-mode-hook #'+ccls/enable)
|
||||||
)
|
)
|
||||||
;; Also see lsp-project-whitelist lsp-project-blacklist ccls-root-matchers
|
;; Also see lsp-project-whitelist lsp-project-blacklist
|
||||||
```
|
```
|
||||||
|
|
||||||
### Diagnostics
|
### Diagnostics
|
||||||
@ -203,14 +202,6 @@ Add `company-lsp` to `company-backends`. ccls has a fuzzy matching algorithm to
|
|||||||
(setq company-transformers nil company-lsp-async t company-lsp-cache-candidates nil)
|
(setq company-transformers nil company-lsp-async t company-lsp-cache-candidates nil)
|
||||||
```
|
```
|
||||||
|
|
||||||
Type `#i"` (or `#include "`) for quote-style includes and `#i<` (or `#include <`) for system headers.
|
|
||||||
|
|
||||||
There is an alternative view (irony-mode style):
|
|
||||||
|
|
||||||
```elisp
|
|
||||||
(setq ccls-extra-init-params '(:completion (:detailedLabel t)))
|
|
||||||
```
|
|
||||||
|
|
||||||
![company-lsp + company-quickhelp](https://ptpb.pw/AC6J.jpg)
|
![company-lsp + company-quickhelp](https://ptpb.pw/AC6J.jpg)
|
||||||
|
|
||||||
### lsp-ui-flycheck
|
### lsp-ui-flycheck
|
||||||
@ -273,9 +264,15 @@ For the long story, refer to the corresponding [emacs-devel thread](https://list
|
|||||||
|
|
||||||
![$ccls/inheritance hierarchy:true](https://ptpb.pw/JkyT.gif)
|
![$ccls/inheritance hierarchy:true](https://ptpb.pw/JkyT.gif)
|
||||||
|
|
||||||
|
### Code lens
|
||||||
|
|
||||||
|
`M-x ccls-code-lens-mode`
|
||||||
|
|
||||||
|
You may customize `ccls-code-lens-position`. It is `'end` by default, which puts code lenses at line ends (implemented with overlay's `'display` property). There is an issue that opening new lines may drag the lens to the next line.
|
||||||
|
|
||||||
### `ccls-navigate`
|
### `ccls-navigate`
|
||||||
|
|
||||||
Think of them as `sp-{down,previous,next,down}-sexp` for C/C++, roughly movement among declarations.
|
Think of them as `sp-{down,previous,next,down}-sexp` for C/C++, roughly semantic movement among declarations.
|
||||||
|
|
||||||
```elisp
|
```elisp
|
||||||
(ccls-navigate "D") ;; roughly sp-down-sexp
|
(ccls-navigate "D") ;; roughly sp-down-sexp
|
||||||
@ -291,8 +288,6 @@ https://www.reddit.com/r/emacs/comments/9dg13i/cclsnavigate_semantic_navigation_
|
|||||||
### Misc
|
### Misc
|
||||||
|
|
||||||
For out-of-band changes to the files in the workspace that are not made in the LSP client (e.g. git pull), call
|
For out-of-band changes to the files in the workspace that are not made in the LSP client (e.g. git pull), call
|
||||||
`(ccls-freshen-index)` to rebuild indexes for every file or `(ccls-freshen-index (list "^/tmp/c/"))` to rebuild indexes for files matched by a regex whitelist.
|
`(ccls-reload)` to reload/rebuild indexes for every file.
|
||||||
|
|
||||||
* Discussion of symbol hierarchies (member hierarchy, inheritance hierarchy, call hierarchy) https://github.com/emacs-lsp/lsp-ui/issues/73
|
|
||||||
* Performance of lsp-ui-flycheck https://github.com/emacs-lsp/lsp-ui/issues/45
|
* Performance of lsp-ui-flycheck https://github.com/emacs-lsp/lsp-ui/issues/45
|
||||||
* A proposal to mention ccls in eglot https://github.com/joaotavora/eglot/pull/94
|
|
||||||
|
Loading…
Reference in New Issue
Block a user