You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

58 lines
1.9 KiB

#include "code_complete_results.h"
#include "completion_string.h"
#include "utility.h"
clangmm::CodeCompleteResults::CodeCompleteResults(CXTranslationUnit &cx_tu,
const std::string &buffer,
unsigned line_num, unsigned column) {
CXUnsavedFile files[1];
auto file_path=to_string(clang_getTranslationUnitSpelling(cx_tu));
files[0].Filename = file_path.c_str();
files[0].Contents = buffer.c_str();
files[0].Length = buffer.size();
cx_results = clang_codeCompleteAt(cx_tu,
file_path.c_str(),
line_num,
column,
files,
1,
clang_defaultCodeCompleteOptions()|CXCodeComplete_IncludeBriefComments);
if(cx_results)
clang_sortCodeCompletionResults(cx_results->Results, cx_results->NumResults);
}
clangmm::CodeCompleteResults::CodeCompleteResults(CodeCompleteResults &&rhs) : cx_results(rhs.cx_results) {
rhs.cx_results = nullptr;
}
clangmm::CodeCompleteResults &clangmm::CodeCompleteResults::operator=(CodeCompleteResults &&rhs) {
if(this!=&rhs) {
if(cx_results)
clang_disposeCodeCompleteResults(cx_results);
cx_results=rhs.cx_results;
rhs.cx_results=nullptr;
}
return *this;
}
clangmm::CodeCompleteResults::~CodeCompleteResults() {
if(cx_results)
clang_disposeCodeCompleteResults(cx_results);
}
unsigned clangmm::CodeCompleteResults::size() const {
if(!cx_results)
return 0;
return cx_results->NumResults;
}
clangmm::CompletionString clangmm::CodeCompleteResults::get(unsigned i) const {
return CompletionString(cx_results->Results[i].CompletionString);
}
std::string clangmm::CodeCompleteResults::get_usr() const {
if(!cx_results)
return std::string();
return to_string(clang_codeCompleteGetContainerUSR(cx_results));
}