Skip to content

umaumax/deoplete-clang-with-pch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

deoplete-clang-with-pch

C++ source for Shougo/deoplete.nvim: Dark powered asynchronous completion framework for neovim/Vim8

TODO

  • 設定項目を増やす
    • -stdのオプション
    • localなプロジェクトに対する設定(e.g. 設定ファイルの自動読込)
  • 他のdeoplete-xxxを参考にリファクタリング
  • 無駄な補完処理が走らないように,キャッシュを有効利用
  • 自動pch作成機能

overview

  • 編集中のファイルのカレントディレクトリから上にさかのぼり,*.pchが存在するときに,補完を行う
    • つまり,*.pchがない場合には何も行わない

Precompiled Header and Modules Internals — Clang 7 documentation

install example

Plug 'umaumax/deoplete-clang-with-pch', {'for': ['c','cpp','cmake']}

setting example

let g:deoplete#sources#clang_with_pch#flags = []
let g:deoplete#sources#clang_with_pch#include_pathes = ['/usr/local/Cellar/llvm/6.0.0/include']
let g:deoplete#sources#clang_with_pch#pch_pathes = []

g:deoplete#sources#clang_with_pch#flagsがないときはg:deoplete#sources#clangflagsの値が使用される


FYI

PCHの作成と利用について

  1. #includeのみのヘッダファイルを作成
    • 例えば,対象cppファイルに対して,grep '#include' | grep -v '//'
  2. pch作成
    • clang++ -cc1 -x c++-header -emit-pch -std=c++11 -stdlib=libc++ header.h -o header.h.pch
  3. 利用
    • build: clang++ -cc1 -include-pch header.h.pch -std=c++11 test.cpp -o test
    • 補完: clang++ -cc1 -include-pch header.h.pch -fsyntax-only -code-completion-at=test:<line>:<col> -std=c++11 test.cpp
  • -cc1は位置に注意(clang++の直後が安全)
  • -vオプションを利用するとよい
  • -cc1の場合には-stdlin=libc++を付加しないと,C++11ヘッダ群が見つからない(-Xclang利用時は不要)
  • -stdオプションはPCH作成時と利用時に一致させること

ちなみに,PCHを利用しない補完では,-Xclangオプションで利用可能

clang++ -Xclang -fsyntax-only -Xclang -code-completion-at=test.cpp:<line>:<col> -std=c++11 test.cpp -c

ちなみに,Ubuntu16.04では,-cc1のオプション利用時にinclude pathを別途追加する必要がある

e.g.

clang++ -cc1 -emit-pch -x c++-header -std=c++11 -stdlib=libstdc++ $target -o $target.pch \
	-I/usr/include/clang/5.0.0/include \
	-I/usr/include \
	-I/usr/include/c++/5.4.0 \
	-I/usr/include/x86_64-linux-gnu/c++/5.4.0

上記のinclude pathは下記の-Xclangコマンド版を参考するとよい

-Xclang版では余計なオプションが軒を連ねるので,確認後-cc1で生成し直す

clang++ -Xclang -emit-pch -x c++-header -std=c++11 header.h -o header.h.pch

なお,補完時に必要なinclude pathは減っていた

clang++ -cc1 -include-pch $target.pch -fsyntax-only -code-completion-at=$target:$line:$col -std=c++11 $target \
	-I/usr/include/c++/5.4.0

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published