Как добавить путь включения для языковых серверов в co c -settings. json файле? - PullRequest
1 голос
/ 11 апреля 2020

Я использую плагин neovim "co c -nvim" в качестве инструмента IntelliSense для C / C ++. насколько я знаю, этот плагин на самом деле является клиентом языковых серверов, таких как ccls, clangd и cquery. У меня все эти языковые серверы установлены в моей системе и настроены для работы с co c -nvim. так что я могу получить автозаполнение и список общих заголовков (например, stdio и ...) в моих файлах c / c ++. но так как я работаю на платформе ros, я хочу добавить заголовки ros (/ opt / ros / kinetic / include / **) к моему пути по умолчанию для языковых серверов. без этой опции в начале каждого проекта я должен добавить фиктивный узел ros и скомпилировать с catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=YES, чтобы сгенерировать файл compile_commands. json, чтобы получить доступ к заголовкам ros.

настройки co c .nvim находится рядом с файлом init.vim, в файле с именем "co c -settings. json", а содержимое моего файла настроек co c указано ниже:

{

"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
}

Итак, мой главный вопрос - как добавить ros include path к этим настройкам. Я проверил вики-страницу со c .nvim , но не могу найти никакой опции для пути включения пользователя. Кроме того, я проверил опцию clangd и попытался добавить "args":["-I/opt/ros/kinetic/include/"] к соответствующему блоку, но он не работал. Кроме того, я добавил файл .cquery , но по-прежнему не влияет на список предлагаемых заголовков.

извините за длинную историю и спасибо за ваше время.

Редактировать : было бы лучше использовать clangd LSP, а не ccls. потому что это быстрее и имеет лучшую документацию. спасибо!

Редактировать (12 апреля 2020 г.): лучшее решение, которое я нашел, это использование языкового сервера ccls с использованием extraArgs, предоставляемого ccls. поэтому, если вы добавите поле "clang" к конфигам ccls, у нас могут быть заголовки ro в автозаполнении.

"initializationOptions": {                                                                                        
                                    "cache": {                                                                                                
                                            "directory": "/tmp/ccls"                
                                    },                                              
                                    "clang": {                                      
                                            "extraArgs": [                          
                                                    "-I",                           
                                                    "/opt/ros/kinetic/include/"     
                                            ]                                       
                                    }                                               
                            }

, но, как я уже упоминал, я хотел бы использовать clangd, если это возможно. Я проверил везде, но нет ответа. Может кто-нибудь мне помочь? (Пожалуйста!).

1 Ответ

0 голосов
/ 30 апреля 2020

Похоже, в coc-nvim нет опции для ее установки. Лучше всего полагаться на параметры LSP.

Я только что решил это для ccls, определив пользовательский файл .ccls и добавил параметр -I, указывающий на мои надстройки. Этот .ccls файл должен быть в root моего проекта. например:

clang
%c
-I/usr/local/include

Должна быть такая же опция для clangd.

...