diff --git a/LSP-Extensions.md b/LSP-Extensions.md new file mode 100644 index 0000000..63ea3be --- /dev/null +++ b/LSP-Extensions.md @@ -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[]` diff --git a/_Sidebar.md b/_Sidebar.md index 2be5cdb..8d3b182 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -18,4 +18,5 @@ * [[Customization]] * [[Debugging]] * [[FAQ]] +* [[LSP Extensions]] * [[LSP]]