1 #include "clangmm.hpp" 2 #include <cassert> 3 #include <regex> 4 #include <string> 5 main()6int 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