lsp-mode: update contents and screenshot links

Fangrui Song 2019-10-02 19:24:55 -07:00
parent 085ff9bad3
commit 450995098b

@ -3,14 +3,12 @@
3. Open a source file where either [[.ccls|Project-Setup#ccls-file]] or [[compile_commands.json|Project-Setup#compile_commandsjson]] is in the project root (it works without them, if you don't need extra compiler command line options like `-I`)
4. `(require 'ccls)`, `M-x lsp`
`ccls.el` used to be based on the old interface `lsp-mode.el` of lsp-mode and the entry was `lsp-ccls-enable`.
`(require 'lsp)` and `M-x lsp` should be used instead now. See https://github.com/emacs-lsp/lsp-mode/issues/479 , the old interface `lsp-mode.el` is deperecated.
Alternatively, you may install https://github.com/joaotavora/eglot
### Configure
#### doom-emacs
Set `(cc +lsp)` in your `~/.config/doom/init.el`
#### spacemacs
set `c-c++-backend` to `lsp-ccls` in the `+lang/c-c++` layer
@ -23,14 +21,12 @@ set `c-c++-backend` to `lsp-ccls` in the `+lang/c-c++` layer
(use-package company-lsp :commands company-lsp)
(use-package ccls
:hook ((c-mode c++-mode objc-mode) .
:hook ((c-mode c++-mode objc-mode cuda-mode) .
(lambda () (require 'ccls) (lsp))))
```
The only required configuration is `ccls-executable`. Others have good defaults.
`xref-find-definitions` (default: `M-.`) / highlighting of the symbol at point / type signature in echo area should work out-of-box. Read on for customization and more features.
```elisp
(setq ccls-executable "/path/to/ccls/Release/ccls")
;; (setq ccls-args '("--log-file=/tmp/ccls.log"))
@ -38,10 +34,7 @@ The only required configuration is `ccls-executable`. Others have good defaults.
You may leave `ccls-executable` unchanged (default: `ccls`) and create a [shell script wrapper](Install#shell-script-wrapper).
Some common settings to lsp-mode lsp-ui and emacs-ccls:
* doom-emacs https://github.com/hlissner/doom-emacs/pull/716
* MaskRay's doom-emacs configuration: <https://github.com/MaskRay/Config/blob/master/home/.config/doom/modules/private/my-cc/config.el>
`xref-find-definitions` (default: `M-.`) / highlighting of the symbol at point / type signature in echo area should work out-of-box. Read on for customization and more features.
#### Projects with subprojects
@ -91,9 +84,8 @@ There are Helm/Ivy alternatives for `xref-find-{definitions,references,apropos}`
`lsp-ui-peek-find-{definitions,references}` from [lsp-ui-peek.el](https://github.com/emacs-lsp/lsp-ui/blob/master/lsp-ui-peek.el) provide peek views. An additional benefit is you get a window local jump list dedicated to cross references (`lsp-ui-peek-jump-forward` `lsp-ui-peek-jump-backward`)
![lsp-ui-peek-find-references](https://ptpb.pw/KUYz.jpg)
![references + hydra](https://ptpb.pw/fhWh.jpg)
<img src="https://raw.githubusercontent.com/MaskRay/ccls-static/master/emacs-ccls/lsp-ui-xref.webp" title="lsp-ui-peek-find-references" width=70%>
<img src="https://raw.githubusercontent.com/MaskRay/ccls-static/master/emacs-ccls/reference-hydra.webp" title="references+hydra" width=70%>
Refer to [MaskRay's doom-emacs configuration](https://github.com/MaskRay/Config/blob/master/home/.config/doom/modules/private/my-cc/autoload.el) for fine-grained `textDocument/references` (different roles: Read/Write/Dynamic/...)
@ -104,9 +96,10 @@ The identifier (or user-defined operator) at point is highlighted with its other
### imenu/workspace symbol search
Use [lsp-imenu.el](https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-imenu.el) for `textDocument/documentSymbol` (outline). [lsp-ui-imenu.el](https://github.com/emacs-lsp/lsp-ui/blob/master/lsp-ui-imenu.el) provides a sidebar.
There are two ways to invoke `textDocument/documentSymbol` (outline):
![lsp-imenu + hydra](https://ptpb.pw/XWw7.jpg)
* `M-x imenu`. Requires [lsp-imenu.el](https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-imenu.el)
* `M-x lsp-ui-imenu`. Requires [lsp-ui-imenu.el](https://github.com/emacs-lsp/lsp-ui/blob/master/lsp-ui-imenu.el).
`xref-find-apropos` (default: `C-M-.`) invokes `workspace/symbol` to fuzzy-find symbols in the project. However, the function tries to be smart and splits the pattern and `regexp-quote` them for you, which actually gets in the way. Consider using `lsp-ui{,-peek}-workspace-symbol` in the lsp-ui package.
@ -114,7 +107,9 @@ For a symbol named `Name::FooBar`, all of `FooBar`, `foo bar`, `nafoba` find the
### Cross reference extensions
Aside from definitions/references/workspace symbol, ccls provides some LSP extensions that find base/derived classes/methods, vars of a type, callers of a function. You may call:
See [[LSP Extensions]] for the description of these extensions.
You may call:
```elisp
;; direct callers
(lsp-find-custom "$ccls/call")
@ -183,7 +178,7 @@ Hierarchies provide a flattened xref interface:
### Documentation (comments)
lsp-ui-doc.el renders comments in a child frame (Emacs >= 26) or inline (< 26).
![](https://camo.githubusercontent.com/fe1e12f9be72c2295d732d6265b42bde0d121ee8/68747470733a2f2f707470622e70772f5a6275462e6a7067)
<img src="https://raw.githubusercontent.com/MaskRay/ccls-static/master/emacs-ccls/lsp-ui-doc.webp" title="lsp-ui-doc" width=70%>
```elisp
(setq lsp-ui-doc-include-signature nil) ; don't include type signature in the child frame
@ -198,7 +193,9 @@ 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)
```
![company-lsp + company-quickhelp](https://ptpb.pw/AC6J.jpg)
Install `company-quickhelp` to see the attached comments for the selected completion item.
<img src="https://raw.githubusercontent.com/MaskRay/ccls-static/master/emacs-ccls/company-lsp.webp" title="company-lsp" width=50%>
If completion does not work for you, make sure company-lsp is used: run <kbd>M-x</kbd> `company-diag` and make sure`Used backend:` includes `company-lsp`.
@ -243,7 +240,7 @@ For the long story, refer to the corresponding [emacs-devel thread](https://list
### Call/member/inheritance Hierarchies || primary template/partial specialization
`M-x ccls-member-hierarchy`
![$ccls/member hierarchy:true](http://fars.ee/qurU.jpg)
<img src="https://raw.githubusercontent.com/MaskRay/ccls-static/master/emacs-ccls/ccls-member.webp" title="$ccls/member hierarchy:true" width=70%>
```elisp
(ccls-call-hierarchy nil) ; caller hierarchy
@ -257,7 +254,6 @@ For the long story, refer to the corresponding [emacs-devel thread](https://list
```
![$ccls/inheritance hierarchy:true](http://fars.ee/5pQO.jpg)
Side notes: `ccls-inheritance-hierarchy` also works fine with jumping between primary template and partial specialization.
### Code lens