✨ feat(lsp_server): add call snippets to completion resolve
This commit is contained in:
@@ -51,6 +51,10 @@ export namespace lsp::test::provider
|
||||
static TestResult TestCompletionResolveCreateObjectSnippet();
|
||||
static TestResult TestCompletionResolveCreateObjectUnquotedSnippet();
|
||||
static TestResult TestCompletionResolveCreateObjectSingleQuoteSnippet();
|
||||
static TestResult TestCompletionResolveFunctionSnippet();
|
||||
static TestResult TestCompletionResolveUnitMemberFunctionSnippet();
|
||||
static TestResult TestCompletionResolveInstanceMethodSnippet();
|
||||
static TestResult TestCompletionResolveStaticMethodSnippet();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -191,6 +195,10 @@ namespace lsp::test::provider
|
||||
runner.addTest("completion resolve createobject snippet", TestCompletionResolveCreateObjectSnippet);
|
||||
runner.addTest("completion resolve createobject unquoted snippet", TestCompletionResolveCreateObjectUnquotedSnippet);
|
||||
runner.addTest("completion resolve createobject single quote snippet", TestCompletionResolveCreateObjectSingleQuoteSnippet);
|
||||
runner.addTest("completion resolve function snippet", TestCompletionResolveFunctionSnippet);
|
||||
runner.addTest("completion resolve unit member function snippet", TestCompletionResolveUnitMemberFunctionSnippet);
|
||||
runner.addTest("completion resolve instance method snippet", TestCompletionResolveInstanceMethodSnippet);
|
||||
runner.addTest("completion resolve static method snippet", TestCompletionResolveStaticMethodSnippet);
|
||||
}
|
||||
|
||||
TestResult CompletionTests::TestClassMethodCompletion()
|
||||
@@ -681,4 +689,124 @@ namespace lsp::test::provider
|
||||
assertTrue(snippet.contains("${1:a}"), "Resolved createobject snippet should include param placeholders");
|
||||
return result;
|
||||
}
|
||||
|
||||
TestResult CompletionTests::TestCompletionResolveFunctionSnippet()
|
||||
{
|
||||
TestResult result{ "", true, "ok" };
|
||||
ProviderEnv env;
|
||||
auto path = FixturePath("main_unit.tsf");
|
||||
auto content = ReadTextFile(path);
|
||||
auto uri = ToUri(path);
|
||||
OpenDocument(env.hub, uri, content, 1);
|
||||
|
||||
auto items = RequestCompletion(env, uri, content, "UnitF");
|
||||
auto item = FindItem(items, "UnitFunc");
|
||||
assertTrue(item.has_value(), "Expected UnitFunc completion");
|
||||
|
||||
protocol::RequestMessage request;
|
||||
request.id = "r5";
|
||||
request.method = "completionItem/resolve";
|
||||
request.params = codec::ToLSPAny(*item);
|
||||
|
||||
::lsp::provider::completion_item::Resolve resolver;
|
||||
auto json = resolver.ProvideResponse(request, env.context);
|
||||
auto response = ParseResponse(json);
|
||||
auto resolved = codec::FromLSPAny.template operator()<protocol::CompletionItem>(response.result.value());
|
||||
|
||||
assertTrue(resolved.insertText.has_value(), "Resolved function item should have insertText");
|
||||
auto snippet = resolved.insertText.value();
|
||||
assertTrue(snippet.starts_with("UnitFunc("), "Resolved function snippet should start with UnitFunc(");
|
||||
assertTrue(snippet.contains("${1:a}"), "Resolved function snippet should include param placeholders");
|
||||
return result;
|
||||
}
|
||||
|
||||
TestResult CompletionTests::TestCompletionResolveUnitMemberFunctionSnippet()
|
||||
{
|
||||
TestResult result{ "", true, "ok" };
|
||||
ProviderEnv env;
|
||||
auto path = FixturePath("main_unit.tsf");
|
||||
auto content = ReadTextFile(path);
|
||||
auto uri = ToUri(path);
|
||||
OpenDocument(env.hub, uri, content, 1);
|
||||
|
||||
auto items = RequestCompletion(env, uri, content, "MainUnit.Uni");
|
||||
auto item = FindItem(items, "UnitFunc");
|
||||
assertTrue(item.has_value(), "Expected UnitFunc completion from unit member context");
|
||||
|
||||
protocol::RequestMessage request;
|
||||
request.id = "r6";
|
||||
request.method = "completionItem/resolve";
|
||||
request.params = codec::ToLSPAny(*item);
|
||||
|
||||
::lsp::provider::completion_item::Resolve resolver;
|
||||
auto json = resolver.ProvideResponse(request, env.context);
|
||||
auto response = ParseResponse(json);
|
||||
auto resolved = codec::FromLSPAny.template operator()<protocol::CompletionItem>(response.result.value());
|
||||
|
||||
assertTrue(resolved.insertText.has_value(), "Resolved unit member function should have insertText");
|
||||
auto snippet = resolved.insertText.value();
|
||||
assertTrue(snippet.starts_with("UnitFunc("), "Resolved unit member function snippet should start with UnitFunc(");
|
||||
assertTrue(snippet.contains("${1:a}"), "Resolved unit member function snippet should include param placeholders");
|
||||
return result;
|
||||
}
|
||||
|
||||
TestResult CompletionTests::TestCompletionResolveInstanceMethodSnippet()
|
||||
{
|
||||
TestResult result{ "", true, "ok" };
|
||||
ProviderEnv env;
|
||||
auto path = FixturePath("main_unit.tsf");
|
||||
auto content = ReadTextFile(path);
|
||||
auto uri = ToUri(path);
|
||||
OpenDocument(env.hub, uri, content, 1);
|
||||
|
||||
auto items = RequestCompletion(env, uri, content, "obj.Fo");
|
||||
auto item = FindItem(items, "Foo");
|
||||
assertTrue(item.has_value(), "Expected Foo completion from object member context");
|
||||
|
||||
protocol::RequestMessage request;
|
||||
request.id = "r7";
|
||||
request.method = "completionItem/resolve";
|
||||
request.params = codec::ToLSPAny(*item);
|
||||
|
||||
::lsp::provider::completion_item::Resolve resolver;
|
||||
auto json = resolver.ProvideResponse(request, env.context);
|
||||
auto response = ParseResponse(json);
|
||||
auto resolved = codec::FromLSPAny.template operator()<protocol::CompletionItem>(response.result.value());
|
||||
|
||||
assertTrue(resolved.insertText.has_value(), "Resolved method item should have insertText");
|
||||
auto snippet = resolved.insertText.value();
|
||||
assertTrue(snippet.starts_with("Foo("), "Resolved method snippet should start with Foo(");
|
||||
assertTrue(snippet.contains("${1:x}"), "Resolved method snippet should include param placeholders");
|
||||
return result;
|
||||
}
|
||||
|
||||
TestResult CompletionTests::TestCompletionResolveStaticMethodSnippet()
|
||||
{
|
||||
TestResult result{ "", true, "ok" };
|
||||
ProviderEnv env;
|
||||
auto path = FixturePath("main_unit.tsf");
|
||||
auto content = ReadTextFile(path);
|
||||
auto uri = ToUri(path);
|
||||
OpenDocument(env.hub, uri, content, 1);
|
||||
|
||||
auto items = RequestCompletion(env, uri, content, "class(Widget).Sta");
|
||||
auto item = FindItem(items, "StaticFoo");
|
||||
assertTrue(item.has_value(), "Expected StaticFoo completion from class method context");
|
||||
|
||||
protocol::RequestMessage request;
|
||||
request.id = "r8";
|
||||
request.method = "completionItem/resolve";
|
||||
request.params = codec::ToLSPAny(*item);
|
||||
|
||||
::lsp::provider::completion_item::Resolve resolver;
|
||||
auto json = resolver.ProvideResponse(request, env.context);
|
||||
auto response = ParseResponse(json);
|
||||
auto resolved = codec::FromLSPAny.template operator()<protocol::CompletionItem>(response.result.value());
|
||||
|
||||
assertTrue(resolved.insertText.has_value(), "Resolved static method should have insertText");
|
||||
auto snippet = resolved.insertText.value();
|
||||
assertTrue(snippet.starts_with("StaticFoo("), "Resolved static method snippet should start with StaticFoo(");
|
||||
assertTrue(snippet.contains("${1:y}"), "Resolved static method snippet should include param placeholders");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user