Add LSP-Extensions.md

Fangrui Song 2019-10-02 18:41:42 -07:00
parent d6d6d0b280
commit 7059a9bed2
2 changed files with 80 additions and 0 deletions

79
LSP-Extensions.md Normal file

@ -0,0 +1,79 @@
## 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.
### [`$ccls/vars`](https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_call.cc)
It can be seen as a specialized `textDocument/references`. It finds all variables when the cursor is at a type of a variable (the type of the variable will be used). Whether local variables/parameters/struct members are returned can be specified with `kind`.
* params: `TextDocumentPositionParams` extended with `kind`
* return: `Location[]`
### [`$ccls/call`](https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_call.cc)
Find callers (`callee: false`, default) or callees (`callee: true`) when the cursor is at a function.
The method returns either a flattened `Location[]`, or a hierarchical type.
#### `hierarchy: false` (default)
* params: `TextDocumentPositionParams` extended with `callee, callType`
* return: `Location[]`
#### `hierarchy: true`
* initial params: `TextDocumentPositionParams` extended with `callee, callType`. The result includes `id` and `kind` which are used to expand a node.
* params: `id, kind, callee, callType`
Optional `levels` and `qualified` can be used to customize the hierarchy.
### [`$ccls/inheritance`](https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_inheritance.cc)
Find base classes (`derived: false`, default) or derived classes (`derived: true`).
It can also used to jump between the primary template and partial specializations.
#### `hierarchy: false` (default)
* params: `TextDocumentPositionParams` extended with `derived`
* return: `Location[]`
#### `hierarchy: true`
* initial params: `TextDocumentPositionParams` extended with `derived`. The result includes `id` and `kind` which are used to expand a node.
* params: `id, kind, derived`
Optional `levels` and `qualified` can be used to customize the hierarchy.
### [`ccls/member`](https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_member.cc)
Find member variables/functions/types when the cursor is at a class/struct/union or a variable (the type of which will be used). Find local variables when the cursor is at a function.
* `kind: 4` (default), member variables are returned.
* `kind: 3`, member functions are returned.
* `kind: 2`, member types are returned.
#### `hierarchy: false` (default)
* params: `TextDocumentPositionParams` extended with `derived`
* return: `Location[]`
#### `hierarchy: true`
* initial params: `TextDocumentPositionParams` extended with `derived`. The result includes `id` and `kind` which are used to expand a node.
* params: `id, kind, derived`
Returned nodes can be furthe expanded if `kind: 4`.
Optional `levels` and `qualified` can be used to customize the hierarchy.
### [`$ccls/navigate`](https://github.com/MaskRay/ccls/blob/master/src/messages/ccls_navigate.cc)
Semantic movement among declarations.
* params: `TextDocumentPositionParams` extended with `direction`. The allowed values of `direction`:
+ `"U"`: parent
+ `"D"`: first child
+ `"L"`: left sibling
+ `"R"`: right sibling
* return: `Location[]`

@ -18,4 +18,5 @@
* [[Customization]] * [[Customization]]
* [[Debugging]] * [[Debugging]]
* [[FAQ]] * [[FAQ]]
* [[LSP Extensions]]
* [[LSP]] * [[LSP]]