deoplete-plugins / deoplete-clang

deoplete.nvim source for C/C++/Obj-C/Obj-C++ with clang-python3
MIT License
189 stars 73 forks source link

I most often get no useful completion - in my big project. #43

Open Ploppz opened 8 years ago

Ploppz commented 8 years ago

Problems summary

Using deoplete / deoplete-clang, writing C++, I often get only weak completion (just a list of could-be-useful words/predictions). For example in this function, why don't I get completion on std::deque? screenshot

Another case: The class has a member SAP<int>& broadphase_alg; with several public members and methods. But again I only get useless information: screenshot

Expected

Proper completion.

Environment Information

" Deoplete
let g:deoplete#enable_at_startup = 1
let g:deoplete#sources#clang#libclang_path = '/usr/lib/libclang.so'
let g:deoplete#sources#clang#clang_header = '/usr/lib/clang'
let g:deoplete#sources#clang#std#cpp = 'c++11'

syntax enable
filetype plugin indent on

let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1

" Files
set backup
set backupdir=~/.local/share/nvim/backup
set directory=~/.local/share/nvim/swap
set undofile
set undodir=~/.local/share/nvim/undo
" Basic configuration
set expandtab
set shiftwidth=4
set tabstop=4
set softtabstop=4
set clipboard+=unnamedplus
set showcmd
set number
set scrolloff=15
set hlsearch
set cursorline
set nocompatible
set esckeys

autocmd BufNewFile, BufRead *.c++ setfiletype cpp

The reproduce ways from neovim starting (Required!)

I would have to share all the code of my project. I tried making a minimal test case but in the test case it all works... it's only in my big project deoplete-clang seldomly works.

Generate a logfile if appropriate

http://sprunge.us/EWVG

I guess I have some things missing, but I just couldn't reproduce the errors with a minimal test case. I really hope you can help me. I've been struggling a long time to write this issue (finding any pattern in the problems, finding a minimal test case...). Please ask me if there's anything more you need to know. Maybe I've overlooked something really basic.

zchee commented 8 years ago

@Ploppz Thanks issue.

I will debug it later. but, I want to real(reproducible) C++ file. Could you post a sample .c++(.cc?) file?

Ploppz commented 8 years ago

completion-test.zip here, it's a subset of my project that is almost independent. On for example line 80 in PairOrderer.c++, try writing broadphase_alg. - or any other member. Nothing works here. You see on lines 2-4 I had to exclude some files that this file depends on (else probably my whole project would have to be included). So it's not all syntactically correct in this 'minimal' test case. Don't know if that matters. It has the very same behaviour in my real project though, and everything compiles fine there.

Bonus question: I'm curious: When does deoplete-clang update the tags / whatever info it needs about members, classes, functions etc.? Only when you start vim?

zchee commented 8 years ago

@Ploppz Thanks example :) and understood your said meaning.

Bonus question: I'm curious: When does deoplete-clang update the tags / whatever info it needs about members, classes, functions etc.? Only when you start vim?

It meaning of, When does deoplete-clang get the AST information of the current buffer?

Ploppz commented 8 years ago

Yeah, that's probably what I mean. I can best explain with a practical example: if I have just written a class and started to use it, can I expect completion on instances of the class immediately, or do I have to restart vim or something else? Another question, maybe related: Does deoplete/deoplete-clang keep state? - my CPU gets quite busy for maybe 10 sec, every time I stop at a . or -> sign.

zchee commented 8 years ago

@Ploppz got it. I will explain that question with

Another question

:)

Shougo commented 8 years ago

Reproduced. It seems bug...

Shougo commented 8 years ago

I have tested it in vim-marching. But it is same result. I think clang does not support the feature...

https://github.com/osyo-manga/vim-marching

Shougo commented 8 years ago

@Ploppz Please test it using YouCompleteMe.

Shougo commented 8 years ago

@Ploppz Please upload your clang version. I think your clang version is 3.8+. Because, I cannot reproduce it in clang 3.4. But I can reproduce it in clang 3.8. Current libclang within deoplete-clang supports clang 3.6 instead of 3.8. Yes, the libclang must support clang 3.8. Upstream libclang already supports clang 3.8.

Ploppz commented 8 years ago

Sorry I didn't get around to testing either issues yet. I do have clang version 3.8. Will deoplete-clang support clang 3.8 in the near future or do I have to downgrade clang? Or is there another solution?

Shougo commented 8 years ago

Will deoplete-clang support clang 3.8 in the near future or do I have to downgrade clang?

It should be. But it is @zchee 's work. I cannot support it.