vim clang_complete странная ошибка завершения - PullRequest
0 голосов
/ 29 июня 2018

рассмотрите этот простой код:

#include <vector>
#include <string>

using namespace std;
vector<string> vec1;
//vec1.  //completion does not work AND break the completion that used to work if left without semicolon.

int main(){

    vector<string> vec2;
    vec2.push_back("sometext"); //completion works
    vec1.push_back("sometext"); //works here too

    return 0;
}

Когда я набираю "vec2". или "vec1." Мне представили выпадающий список всех методов строкового типа сразу после того, как я набрал точку. Так что здесь работает.

Вот как это становится странным:

1) Когда я делаю "vec1". в глобальной области видимости перед главной мне представлены неправильные опции в выпадающем меню (пространство имен, использование, asm, typedef, использование, static_assert, extern и т. д.). И он вообще не может найти «push_back» («Заданное пользователем завершение (^ U ^ P ^ N) Шаблон не найден)

2) Теперь, если я оставлю эту строку незавершенной и забуду поставить точку с запятой, то у меня не будет правильного автозаполнения внутри main (), как я делал раньше!

Только плагины, которые я запускаю, это clang_complete и supertab. Я пробовал без супертэба и с различными настройками _vimrc и .clang_complete безрезультатно. Я на win7, llvm / libclang с официального сайта. Это нормально, что это так глючит?

1 Ответ

0 голосов
/ 29 июня 2018

Плагин полностью полагается на libclang, чтобы выполнить завершение, которое, в свою очередь, только завершает код, более или менее допустимый (я думаю, что он может простить некоторые ошибки до того, как курсор, из которого парсер сможет восстановиться, и код после того, как курсор сможет содержат более серьезные ошибки).

Заявления в глобальной области не входят в число допустимых синтаксических конструкций C ++. Это, вероятно, сбивает с толку синтаксический анализ clang, чтобы он возвращал некоторый общий список завершения, который не связан с непосредственным контекстом.

Я думаю, что такое поведение ожидается для любой системы завершения, использующей clang, если только она явно не обойдется каким-либо образом.

...