Skip to content
This repository was archived by the owner on Jun 12, 2018. It is now read-only.

Commit 9fb4553

Browse files
committed
Merge pull request #22 from eidheim/master
Merging this now as it fixes a key delay/missed keystroke (in OS X at least) in juCi++
2 parents f1f784d + c948f26 commit 9fb4553

File tree

4 files changed

+76
-3
lines changed

4 files changed

+76
-3
lines changed

src/CodeCompleteResults.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,26 @@
44
#include "Utility.h"
55

66
clang::CodeCompleteResults::CodeCompleteResults(CXTranslationUnit &cx_tu,
7+
const std::string &buffer,
8+
unsigned line_num, unsigned column) {
9+
CXUnsavedFile files[1];
10+
auto file_path=clang::to_string(clang_getTranslationUnitSpelling(cx_tu));
11+
files[0].Filename = file_path.c_str();
12+
files[0].Contents = buffer.c_str();
13+
files[0].Length = buffer.size();
14+
15+
cx_results = clang_codeCompleteAt(cx_tu,
16+
file_path.c_str(),
17+
line_num,
18+
column,
19+
files,
20+
1,
21+
clang_defaultCodeCompleteOptions()|CXCodeComplete_IncludeBriefComments);
22+
if(cx_results!=NULL)
23+
clang_sortCodeCompletionResults(cx_results->Results, cx_results->NumResults);
24+
}
25+
26+
clang::CodeCompleteResults::CodeCompleteResults(CXTranslationUnit &cx_tu,
727
const std::string &file_name,
828
const std::map<std::string, std::string> &buffers,
929
unsigned line_num, unsigned column) {

src/CodeCompleteResults.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
namespace clang {
99
class CodeCompleteResults {
1010
friend class TranslationUnit;
11-
CodeCompleteResults(CXTranslationUnit &cx_tu, const std::string &file_name,
11+
12+
CodeCompleteResults(CXTranslationUnit &cx_tu, const std::string &buffer,
13+
unsigned line_num, unsigned column);
14+
//TODO: remove
15+
CodeCompleteResults(CXTranslationUnit &cx_tu, const std::string &file_path,
1216
const std::map<std::string, std::string> &buffers,
1317
unsigned line_num, unsigned column);
1418
public:

src/TranslationUnit.cc

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,23 @@ clang::TranslationUnit::TranslationUnit(Index &index, const std::string &file_pa
3333
parse(index, file_path, command_line_args, buffers);
3434
}
3535

36+
clang::TranslationUnit::TranslationUnit(Index &index, const std::string &file_path,
37+
const std::vector<std::string> &command_line_args,
38+
const std::string &buffer, unsigned flags) {
39+
std::vector<const char*> args;
40+
for(auto &a: command_line_args) {
41+
args.push_back(a.c_str());
42+
}
43+
44+
CXUnsavedFile files[1];
45+
files[0].Filename=file_path.c_str();
46+
files[0].Contents=buffer.c_str();
47+
files[0].Length=buffer.size();
48+
49+
cx_tu = clang_parseTranslationUnit(index.cx_index, file_path.c_str(), args.data(),
50+
args.size(), files, 1, flags);
51+
}
52+
3653
clang::TranslationUnit::TranslationUnit(clang::Index &index, const std::string &file_path,
3754
const std::vector<std::string> &command_line_args,
3855
const std::map<std::string, std::string> &buffers, unsigned flags) {
@@ -58,6 +75,18 @@ void clang::TranslationUnit::parse(Index &index, const std::string &file_path,
5875
args.size(), files.data(), files.size(), flags);
5976
}
6077

78+
int clang::TranslationUnit::ReparseTranslationUnit(const std::string &buffer, unsigned flags) {
79+
CXUnsavedFile files[1];
80+
81+
auto file_path=clang::to_string(clang_getTranslationUnitSpelling(cx_tu));
82+
83+
files[0].Filename=file_path.c_str();
84+
files[0].Contents=buffer.c_str();
85+
files[0].Length=buffer.size();
86+
87+
return clang_reparseTranslationUnit(cx_tu, 1, files, flags);
88+
}
89+
6190
int clang::TranslationUnit::ReparseTranslationUnit(const std::map<std::string, std::string> &buffers, unsigned flags) {
6291
std::vector<CXUnsavedFile> files;
6392
for (auto &buffer : buffers) {
@@ -74,6 +103,12 @@ unsigned clang::TranslationUnit::DefaultFlags() {
74103
return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete | CXTranslationUnit_IncludeBriefCommentsInCodeCompletion;
75104
}
76105

106+
clang::CodeCompleteResults clang::TranslationUnit::get_code_completions(const std::string &buffer,
107+
unsigned line_number, unsigned column) {
108+
clang::CodeCompleteResults results(cx_tu, buffer, line_number, column);
109+
return results;
110+
}
111+
77112
clang::CodeCompleteResults clang::TranslationUnit::get_code_completions(const std::map<std::string, std::string> &buffers,
78113
unsigned line_number, unsigned column) {
79114
auto path=clang::to_string(clang_getTranslationUnitSpelling(cx_tu));

src/TranslationUnit.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,41 @@
1414
namespace clang {
1515
class TranslationUnit {
1616
public:
17+
//TODO: remove
1718
TranslationUnit(Index &index,
1819
const std::string &file_path,
1920
const std::vector<std::string> &command_line_args);
21+
TranslationUnit(Index &index,
22+
const std::string &file_path,
23+
const std::vector<std::string> &command_line_args,
24+
const std::string &buffer,
25+
unsigned flags=DefaultFlags());
26+
//TODO: remove
2027
TranslationUnit(Index &index,
2128
const std::string &file_path,
2229
const std::vector<std::string> &command_line_args,
2330
const std::map<std::string, std::string> &buffers,
2431
unsigned flags=DefaultFlags());
2532
TranslationUnit(Index &index, const std::string &file_path);
2633
~TranslationUnit();
34+
35+
int ReparseTranslationUnit(const std::string &buffer, unsigned flags=DefaultFlags());
36+
//TODO: remove
2737
int ReparseTranslationUnit(const std::map<std::string, std::string> &buffers,
2838
unsigned flags=DefaultFlags());
39+
2940
static unsigned DefaultFlags();
3041

3142
void parse(Index &index,
3243
const std::string &file_path,
3344
const std::vector<std::string> &command_line_args,
3445
const std::map<std::string, std::string> &buffers,
3546
unsigned flags=DefaultFlags());
36-
37-
clang::CodeCompleteResults get_code_completions(const std::map<std::string, std::string> &buffers,
47+
48+
clang::CodeCompleteResults get_code_completions(const std::string &buffer,
49+
unsigned line_number, unsigned column);
50+
//TODO: remove
51+
clang::CodeCompleteResults get_code_completions(const std::map<std::string, std::string> &buffers,
3852
unsigned line_number, unsigned column);
3953

4054
std::vector<clang::Diagnostic> get_diagnostics();

0 commit comments

Comments
 (0)