1 #include "clangmm.hpp"
2 #include <cassert>
3 #include <regex>
4 #include <string>
5 
main()6 int main() {
7   std::string tests_path = LIBCLANGMM_TESTS_PATH;
8   std::string path(tests_path + "/case/main.cpp");
9 
10   std::vector<std::string> arguments;
11   auto clang_version_string = clangmm::to_string(clang_getClangVersion());
12   const static std::regex clang_version_regex("^[A-Za-z ]+([0-9.]+).*$");
13   std::smatch sm;
14   if(std::regex_match(clang_version_string, sm, clang_version_regex)) {
15     auto clang_version = sm[1].str();
16     arguments.emplace_back("-I/usr/lib/clang/" + clang_version + "/include");
17     arguments.emplace_back("-I/usr/lib64/clang/" + clang_version + "/include"); // For Fedora
18   }
19 
20   auto index = std::make_shared<clangmm::Index>(0, 0);
21   clangmm::TranslationUnit tu(index, path, arguments);
22 
23   std::string buffer = "#include <string>\n"
24                        "int main(int argc, char *argv[]) {\n"
25                        "std::string str;\n"
26                        "str.\n"
27                        "return 0\n"
28                        "}";
29 
30   tu.reparse(buffer);
31   auto results = tu.get_code_completions(buffer, 4, 5);
32 
33   bool substr_found = false;
34   for(unsigned c = 0; c < results.size(); c++) {
35     if(results.get(c).get_chunks()[1].text == "substr") {
36       substr_found = true;
37       break;
38     }
39   }
40   assert(substr_found);
41 }
42