diff --git a/src/xinspect.cpp b/src/xinspect.cpp index aea27eb3..1ec45717 100644 --- a/src/xinspect.cpp +++ b/src/xinspect.cpp @@ -111,7 +111,7 @@ namespace xcpp std::string tagfiles_dir = retrieve_tagfile_dir(); nl::json tagconfs = read_tagconfs(tagconf_dir.c_str()); - std::regex re_expression(R"((((?:\w*(?:\:{2}|\<.*\>|\(.*\)|\[.*\])?)\.?)*))"); + std::regex re_expression(R"(([^\s]+(?:\s*\([^)]+\))?))"); std::smatch inspect; std::regex_search(code, inspect, re_expression); diff --git a/test/test_interpreter.cpp b/test/test_interpreter.cpp index 59fcaeba..085c15f3 100644 --- a/test/test_interpreter.cpp +++ b/test/test_interpreter.cpp @@ -213,6 +213,76 @@ TEST_SUITE("execute_request") REQUIRE(result["status"] == "ok"); } + TEST_CASE("fetch_documentation_move_utility") + { + std::vector Args = {/*"-v", "resource-dir", "....."*/}; + xcpp::interpreter interpreter((int)Args.size(), Args.data()); + + std::string code = "?move (utility)"; + std::string inspect_result = "https://en.cppreference.com/w/cpp/utility/move"; + nl::json user_expressions = nl::json::object(); + xeus::execute_request_config config; + config.silent = false; + config.store_history = false; + config.allow_stdin = false; + nl::json header = nl::json::object(); + xeus::xrequest_context::guid_list id = {}; + xeus::xrequest_context context(header, id); + + std::promise promise; + std::future future = promise.get_future(); + auto callback = [&promise](nl::json result) { + promise.set_value(result); + }; + + interpreter.execute_request( + std::move(context), + std::move(callback), + code, + std::move(config), + user_expressions + ); + nl::json result = future.get(); + REQUIRE(result["payload"][0]["data"]["text/plain"] == inspect_result); + REQUIRE(result["user_expressions"] == nl::json::object()); + REQUIRE(result["status"] == "ok"); + } + + TEST_CASE("fetch_documentation_move_algorithm") + { + std::vector Args = {/*"-v", "resource-dir", "....."*/}; + xcpp::interpreter interpreter((int)Args.size(), Args.data()); + + std::string code = "?move (algorithm)"; + std::string inspect_result = "https://en.cppreference.com/w/cpp/algorithm/move"; + nl::json user_expressions = nl::json::object(); + xeus::execute_request_config config; + config.silent = false; + config.store_history = false; + config.allow_stdin = false; + nl::json header = nl::json::object(); + xeus::xrequest_context::guid_list id = {}; + xeus::xrequest_context context(header, id); + + std::promise promise; + std::future future = promise.get_future(); + auto callback = [&promise](nl::json result) { + promise.set_value(result); + }; + + interpreter.execute_request( + std::move(context), + std::move(callback), + code, + std::move(config), + user_expressions + ); + nl::json result = future.get(); + REQUIRE(result["payload"][0]["data"]["text/plain"] == inspect_result); + REQUIRE(result["user_expressions"] == nl::json::object()); + REQUIRE(result["status"] == "ok"); + } + TEST_CASE("fetch_documentation_of_member_or_parameter") { std::vector Args = {/*"-v", "resource-dir", "....."*/};