omnicppcomplete не поддерживает все формы const - PullRequest
6 голосов
/ 28 апреля 2011

У меня работает omnicppcomplete отлично, за исключением того, что время от времени он не завершает некоторые переменные методы / члены. В конце концов я был достаточно раздражен, чтобы разобраться в причинах, и я считаю, что причина в том, что omnicppcomplete поддерживает синтаксис «Foo const & foo» в аргументах функции.

Например, если у меня есть функция, определенная как:

int foo( Bar const & b ){
}

Я не смогу получить информацию о завершении, когда наберу позже «b». Однако, если я изменю подпись на:

int foo( const Bar & b ){
}

Я смогу получить информацию о завершении, когда наберу "b". Кажется, это только в списках аргументов функции, потому что я попытался просто определить переменную внутри функции с помощью сигнатуры "Bar const & bref", и мне удалось получить информацию о завершении для bref.

Я был бы удивлен, если это фактическое ограничение omnicppcomplete; у кого-нибудь есть мысли о том, является ли это ошибкой и / или есть ли обходной путь для этого? Изменение стиля кодирования не кажется разумным решением.

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Похоже на ограничение в omnicppcomplete, но я поднял отладчик vim и нашел его.

Откройте autoload / omni / cpp / utils.vim, перейдите к строке 518, должно выглядеть так:

  for token in tokens
        if state==0
            if token.value=='>'
                let parenGroup = token.group
                let state=1
            elseif token.kind == 'cppWord'
                let szResult = token.value.szResult
                let state=2
            elseif index(['*', '&'], token.value)<0 "This is line 518
                break
            endif

И измените эту строку на:

 elseif token.value != 'const' && index(['*', '&'], token.value)<0

Или вот команды vim, чтобы сделать это =):

/index(\['\*', '&'],<CR>itoken.value != 'const' &&<ESC>:w

Я попытаюсь отправить этосопровождающему omnicppcomplete, но это отчасти хакерски, не знаю, попадет ли он. Возможно, мне удалось проверить, есть ли token.kind == 'cppKeyword', но я решил ошибиться на стороне изменениякак минимум.

2 голосов
/ 18 мая 2011

Испытав проблемы с omnicppcomplete, я искал альтернативу и нашел clang complete , который использует вывод метаданных clang (который предназначен для таких целей).Я работаю очень хорошо, и если ваш код компилируется, он все поймет.

...