diff --git a/Visual-Studio-Code.md b/Visual-Studio-Code.md index 79f00e4..8630ee3 100644 --- a/Visual-Studio-Code.md +++ b/Visual-Studio-Code.md @@ -9,6 +9,9 @@ To load vscode-ccls without installing: * `code vscode-ccls` * Press F5 +* Open the project root with "Open Folder" (C-k C-o) + +After changing some ccls configurations in `settings.json`, trigger the command `ccls: Restart language server` or reload the plugin to take effect. ## Setting up the extension @@ -50,28 +53,57 @@ In case `compile_commands.json` is located not in default place ($root) In this case it is located in `$root/build/compile_commands.json` -### Semantic highlighting +### Semantic highlight -The Visual Studio Code ccls extension supports [semantic highlighting](https://medium.com/@evnbr/coding-in-color-3a6db2743a1e). To enable, put into settings.conf (or workspace configuration): + + +Add the following lines to `settings.json` to enable rainbow semantic highlight: ```json -"ccls.highlighting.enabled.types": true, -"ccls.highlighting.enabled.freeStandingFunctions": true, -"ccls.highlighting.enabled.memberFunctions": true, -"ccls.highlighting.enabled.freeStandingVariables": true, -"ccls.highlighting.enabled.memberVariables": true, -"ccls.highlighting.enabled.namespaces": true, -"ccls.highlighting.enabled.macros": true, -"ccls.highlighting.enabled.enums": true, -"ccls.highlighting.enabled.typeAliases": true, -"ccls.highlighting.enabled.enumConstants": true, -"ccls.highlighting.enabled.staticMemberFunctions": true, -"ccls.highlighting.enabled.parameters": true, -"ccls.highlighting.enabled.templateParameters": true, -"ccls.highlighting.enabled.staticMemberVariables": true, -"ccls.highlighting.enabled.globalVariables": true, +"ccls.highlight.function.face": ["enabled"], +"ccls.highlight.type.face": ["enabled"], +"ccls.highlight.variable.face": ["enabled"], ``` +Before vscode-ccls 0.1.28, settings like `"ccls.highlighting.enabled.types": true,` were used. + +`ccls.highlight.{function,type,type}.face` define faces of basic symbol kinds +from which other symbol kinds (`{member,staticMember}{Function,Variable}`, etc) +can inherit. `package.json` defines some default faces: + +```jsonc +// Predefined by package.json +"ccls.highlight.member": ["fontStyle: italic"], +"ccls.highlight.static": ["fontWeight: bold"], + +"ccls.highlight.memberFunction.face": ["function", "member"] +"ccls.highlight.memberVariable.face": ["variable", "member"] +"ccls.highlight.staticMemberFunction.face": ["function", "static"] +"ccls.highlight.staticMemberVariable.face": ["variable", "static"] +``` + +For a symbol kind, its face property takes effect if `"enabled"` is specified either directly or indirectly. The face describes: + +* Styles such as `"fontStyle: italic"`, `"fontWeight: bolder"`, and `"textDecoration: underline"`. + They are based on CSS properties with similar names. See MDN documents about [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) and [text-decoration](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration). +* Colors. By default, `package.json` predefines some palettes. `ccls.highlight.memberFunction.colors` is not defined but it can inherit from `ccls.highlight.function.colors` because `ccls.highlight.memberFunction.face` inherits from `ccls.highlight.function.face`. + +```jsonc +// Predefined by package.json +"ccls.highlight.function.colors": ["#e5b124", "#927754", "#eb992c", "#e2bf8f", "#d67c17", "#88651e", "#e4b953", "#a36526", "#b28927", "#d69855"], +"ccls.highlight.type.colors": ["#e1afc3", "#d533bb", "#9b677f", "#e350b6", "#a04360", "#dd82bc", "#de3864", "#ad3f87", "#dd7a90", "#e0438a"], +"ccls.highlight.variable.colors": ["#587d87", "#26cdca", "#397797", "#57c2cc", "#306b72", "#6cbcdf", "#368896", "#3ea0d2", "#48a5af", "#7ca6b7"], + +"ccls.highlight.macro.colors": ["#e79528", "#c5373d", "#e8a272", "#d84f2b", "#a67245", "#e27a33", "#9b4a31", "#b66a1e", "#e27a71", "#cf6d49"], +"ccls.highlight.namespace.colors": ["#429921", "#58c1a4", "#5ec648", "#36815b", "#83c65d", "#417b2f", "#43cc71", "#7eb769", "#58bf89", "#3e9f4a"], +``` + +The colors will be randomly assigned to symbols. Change these properties to 1-element arrays to make colors fixed. + +The list of available symbol kinds: `function, variable, type, enum, globalVariable, macro, memberFunction, memberVariable, namespace, parameter, staticMemberFunction, staticVariable, typeAlias`. + +`globalVariable` works with latest ccls but not the 0.20190823.3 release. + ### Cross references You could set custom lookup using keybindings. Use command palette (`ctrl + shift + p` by default) -> `Open keyboard shortcuts file` @@ -93,7 +125,7 @@ You could set custom lookup using keybindings. Use command palette (`ctrl + shif {"key":"","command":"ccls.member","args":{"kind":3}} ``` -For VSCodeVim users, here's how to set arguments in User Settings (`settings.json`) +For VSCodeVim users, heres how to set arguments in User Settings (`settings.json`) ```json "vim.normalModeKeyBindingsNonRecursive": [ { @@ -106,7 +138,7 @@ So you could hit `-t` to see callees up to 3rd level if you set ` ### Using vscode-ccls along side vscode-cpptools extension for debugger support -The `vscode-ccls` extension doesn't provide any debugger integration. One popular option is to use the [vscode-cpptools](https://github.com/Microsoft/vscode-cpptools) extension for this aspect. By default however, `vscode-cpptools` provides editor features that overlap with ccls, which yields duplicate results in things like autocomplete. The following settings may be applied to disable the editor support of `vscode-cpptools` to prevent this from happening, while still retaining the debugger features. +The `vscode-ccls` extension doesnt provide any debugger integration. One popular option is to use the [vscode-cpptools](https://github.com/Microsoft/vscode-cpptools) extension for this aspect. By default however, `vscode-cpptools` provides editor features that overlap with ccls, which yields duplicate results in things like autocomplete. The following settings may be applied to disable the editor support of `vscode-cpptools` to prevent this from happening, while still retaining the debugger features. ```json "C_Cpp.autocomplete": "Disabled",