omnicppcomplete не поддерживает все формы const

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

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

int foo( Bar const & b ){
}

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

int foo( const Bar & b ){
}

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

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

2 ответа

Решение

Похоже на ограничение в 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', но я решил, что ошибусь на стороне изменения наименьшего.

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

Другие вопросы по тегам