1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 22:48:11 +00:00

LibGUI+HackStudio: Add an opt-in autocompletion interface to TextEditor

...and use that to implement autocomplete in HackStudio.

Now everyone can have autocomplete :^)
This commit is contained in:
AnotherTest 2020-12-30 13:55:06 +03:30 committed by Andreas Kling
parent 7e457b98c3
commit 20b74e4ede
19 changed files with 211 additions and 162 deletions

View file

@ -28,45 +28,36 @@
#include <AK/String.h>
#include <AK/Types.h>
#include <LibGUI/AutocompleteProvider.h>
#include <LibIPC/Decoder.h>
#include <LibIPC/Encoder.h>
namespace HackStudio {
enum class CompletionKind {
Identifier,
};
struct AutoCompleteResponse {
String completion;
size_t partial_input_length { 0 };
CompletionKind kind { CompletionKind::Identifier };
};
}
namespace IPC {
template<>
inline bool encode(IPC::Encoder& encoder, const HackStudio::AutoCompleteResponse& response)
inline bool encode(IPC::Encoder& encoder, const GUI::AutocompleteProvider::Entry& response)
{
encoder << response.completion;
encoder << (u64)response.partial_input_length;
encoder << (u32)response.kind;
encoder << (u32)response.language;
return true;
}
template<>
inline bool decode(IPC::Decoder& decoder, HackStudio::AutoCompleteResponse& response)
inline bool decode(IPC::Decoder& decoder, GUI::AutocompleteProvider::Entry& response)
{
u32 kind = 0;
u32 language = 0;
u64 partial_input_length = 0;
bool ok = decoder.decode(response.completion)
&& decoder.decode(partial_input_length)
&& decoder.decode(kind);
&& decoder.decode(kind)
&& decoder.decode(language);
if (ok) {
response.kind = static_cast<HackStudio::CompletionKind>(kind);
response.kind = static_cast<GUI::AutocompleteProvider::CompletionKind>(kind);
response.language = static_cast<GUI::AutocompleteProvider::Language>(language);
response.partial_input_length = partial_input_length;
}