c++ - plugin - code autocomplete vim
Cómo habilitar la finalización de las clases de plantilla de C++ en vim usando YouCompleteMe (1)
Creo que, bajo las reglas de C ++, no puede completarse en este caso.
Sin el conocimiento del tipo T
, no sabemos qué métodos tendrá std::vector<T>
, ya que cada instalación de una plantilla en C ++ puede tener diferentes métodos.
Al usar el complemento de vim YouCompleteMe para completar el código C ++, tropecé con un problema. El uso de clases de plantillas anidadas detiene la finalización para funcionar correctamente.
Considere el siguiente ejemplo para reproducir el comportamiento:
#include <vector>
template<class T>
class foo {
public:
void Init();
private:
struct bar {
int foobar;
};
bar one_bar;
std::vector<foo<T>::bar> some_bars;
};
template<class T>
void foo<T>::Init(){
one_bar.foobar = 0; // completion as expected
some_bars.at(0).foobar = 0; // no completion neither for "at" nor for "foobar"
}
La finalización del código para "some_bars" no funciona en absoluto mientras que "one_bar" se comporta como se espera.
¿Cómo puedo obtener la terminación trabajando para este código? ¿Este problema está relacionado con la configuración y debería funcionar o es un error en YCM?
Mi sistema está basado en debian jessie / sid, vim versión 7.4, la última versión de YCM de GitHub.
Edición: hay problemas similares reportados en el controlador de errores de YCMs: https://github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530
Parece ser un error en Clang en lugar de en YCM. Puede alguien confirmar esto?
Edit2: abrí otro problema en el rastreador de problemas de YCM. https://github.com/Valloric/YouCompleteMe/issues/1170
La intención es obtener más información sobre qué es exactamente el error en clang y finalmente hacer un informe de error en el rastreador de problemas de clang.
Edit3: seguí el procedimiento propuesto de RedX y introduje mi código en clang para obtener las terminaciones. Clang no proporciona ninguna sugerencia para las posiciones discutidas en el código. Esta es claramente la razón por la que YCM no hace sugerencias en vim y no tiene nada que ver con YCM o vim.
Se ha archivado un informe de errores en el rastreador de problemas de Clang: http://llvm.org/bugs/show_bug.cgi?id=20973