diff --git a/juci/notebook.cc b/juci/notebook.cc index 695591b..a6a613e 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -1,4 +1,5 @@ #include "notebook.h" +#include "clangmm.h" Notebook::Model::Model() { cc_extension_ = ".cc"; @@ -388,14 +389,13 @@ void Notebook::Controller::OnBufferChange() { end = Buffer(text_vec_.at(page))->get_insert()->get_iter(); start.backward_char(); word = Buffer(text_vec_.at(page))->get_text(start, end); + std::cout << start.get_line() << std::endl; + std::cout << start.get_line_offset() << std::endl; if (word == ".") { // TODO(Forgie) Zalox,Forgie) Remove TEST - std::vector TEST; - TEST.push_back("toString()"); - TEST.push_back("toLower()"); - TEST.push_back("toUpper()"); - TEST.push_back("fuckOFF()"); - TEST.push_back("fuckOFF()"); + std::vector TEST + = text_vec_[page]->GetAutoCompleteSuggestions(start.get_line()+1, + start.get_line_offset()+2); GeneratePopup(TEST); } } diff --git a/juci/source.cc b/juci/source.cc index 2117b79..5946bf1 100644 --- a/juci/source.cc +++ b/juci/source.cc @@ -132,6 +132,39 @@ ReParse(const std::string &buffer) { // fired when a line in the buffer is edited void Source::Controller::OnLineEdit() { } +std::vector Source::Controller:: +GetAutoCompleteSuggestions(int line_number, + int column) { + return model().GetAutoCompleteSuggestions(view().get_buffer() + ->get_text().raw(), + line_number, + column); +} + +std::vector Source::Model:: +GetAutoCompleteSuggestions(const std::string& buffer, + int line_number, + int column) { + + std::vector res; + parsing.lock(); + clang::CodeCompleteResults results(&tu_, + file_path(), + buffer, + line_number, + column); + for (int i = 0; i < results.size(); i++) { + std::stringstream ss; + const vector c = results.get(i).get_chunks(); + for (auto &stringchunk : c) { + ss << stringchunk.chunk(); + } + res.emplace_back(ss.str()); + } + parsing.unlock(); + return res; +} + // sets the filepath for this mvc void Source::Model:: set_file_path(const std::string &file_path) { diff --git a/juci/source.h b/juci/source.h index 67b3d9a..c674110 100644 --- a/juci/source.h +++ b/juci/source.h @@ -95,7 +95,11 @@ namespace Source { const string& project_path() const; // gets the config member const Config& config() const; - ~Model() { } + std::vector + GetAutoCompleteSuggestions(const std::string& buffer, + int line_number, + int column); + ~Model() { } int ReParse(const std::string &buffer); std::vector ExtractTokens(int, int); @@ -121,6 +125,9 @@ namespace Source { Model& model(); void OnNewEmptyFile(); void OnOpenFile(const string &filename); + std::vector + GetAutoCompleteSuggestions(int line_number, + int column); Glib::RefPtr buffer(); private: