$ccls/member kind

Fangrui Song 2018-09-23 00:03:25 -07:00
parent a3930383b4
commit b68b882fd1
2 changed files with 16 additions and 5 deletions

@ -129,7 +129,7 @@ Use [lsp-imenu.el](https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-imenu.e
For a symbol named `Name::FooBar`, all of `FooBar`, `foo bar`, `nafoba` find them, but with different priorities.
### ccls cross-reference extension
### 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:
```elisp
@ -168,11 +168,17 @@ Recommended helpers:
(lsp-ui-peek-find-custom 'base "$ccls/inheritance" `(:levels ,levels)))
(defun ccls/derived (levels)
(lsp-ui-peek-find-custom 'derived "$ccls/inheritance" `(:levels ,levels :derived t)))
(defun ccls/member ()
(defun ccls/member (kind)
(interactive)
(lsp-ui-peek-find-custom 'member "$ccls/member"))
(lsp-ui-peek-find-custom 'member "$ccls/member" `(:kind ,kind)))
;; ccls/vars ccls/base ccls/derived have a parameter while others are interactive.
;; ccls/vars ccls/base ccls/derived ccls/members have a parameter while others are interactive.
;; (ccls/base 1)
;; (ccls/derived 1)
;; (ccls/member 2) => 2 (Type) => nested classes / types in a namespace
;; (ccls/member 3) => 3 (Func) => member functions / functions in a namespace
;; (ccls/member 0) => member variables / variables in a namespace
;; (ccls/vars 3) => field or local variable
```
Hierarchies provide a flattened xref interface:

@ -70,7 +70,7 @@ nn <silent> xl :call LanguageClient#findLocations({'method':'$ccls/navigate','di
![](https://ptpb.pw/89Y2.gif)
### Custom cross references
### Cross reference extensions
```vim
" bases
@ -88,6 +88,11 @@ nn <silent> xc :call LanguageClient#findLocations({'method':'$ccls/call'})<cr>
nn <silent> xC :call LanguageClient#findLocations({'method':'$ccls/call','callee':v:true})<cr>
" $ccls/member
" nested classes / types in a namespace
nn <silent> xs :call LanguageClient#findLocations({'method':'$ccls/member','kind':2})<cr>
" member functions / functions in a namespace
nn <silent> xf :call LanguageClient#findLocations({'method':'$ccls/member','kind':3})<cr>
" member variables / variables in a namespace
nn <silent> xm :call LanguageClient#findLocations({'method':'$ccls/member'})<cr>
nn xx x