Garmaine Staff asked 1 year ago

I am using neovim plugin "coc-nvim", as the IntelliSense tool for C/C++. as I know this plugin is actually a client of language servers like ccls, clangd and cquery. I have all of these language servers installed on my system and configured them to work with coc-nvim. so I can get autocompletion and list of general headers(e.g. stdio and …) in my c/c++ files. but since I work in ros platform I want to add the headers of the ros(/opt/ros/kinetic/include/**) to my default include path of language servers. with out this option, at the beginning of each project I must add a dummy ros node and compile with catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=YES to generate the compile_commands.json file to get access to ros headers.

the settings of coc.nvim is alongside the init.vim file, in a file called "coc-settings.json" and the contents of my coc setting file is as below:

{

"languageserver": {
    "clangd": {
      "command": "clangd",
      "rootPatterns": ["compile_flags.txt", "compile_commands.json"],
      "filetypes": ["c", "cpp", "objc", "objcpp"]
    },
    "cquery": {
      "command": "/home/amirrezasadeghi/ManBuildLibs/cquery/build/cquery",
      "args": ["--log-file=/tmp/cq.log"],
      "filetypes": ["c", "cpp"],
      "rootPatterns": ["compile_flags.txt", "compile_commands.json", ".git/", ".hg/"],
      "initializationOptions": {
        "cacheDirectory": "/tmp/cquery"
      }
    },
    "ccls": {
      "command": "ccls",
      "filetypes": ["c", "cpp", "objc", "objcpp"],
      "rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"],
      "initializationOptions": {
         "cache": {
           "directory": "/tmp/ccls"
         }
       }
    }
  },
  "clangd.semanticHighlighting": true
}

So my major question is how to add ros include path to these settings. I checked the wiki page of coc.nvim but can't find any option for user include path. also, I checked the option of clangd and tried to add, "args":["-I/opt/ros/kinetic/include/"], to the corresponding block but it did not work. also, I added .cquery file, but still no effect on the list of the proposed headers.

sorry for long story, and thanks for your time.

Edit: it would be better to use the clangd LSP rather than ccls. because it is faster and has better documentation. thanks!