1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 19:38:12 +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

@ -26,7 +26,6 @@
#pragma once
#include "AutoCompleteBox.h"
#include "CodeDocument.h"
#include "Debugger/BreakpointCallback.h"
#include "LanguageClient.h"
@ -72,7 +71,6 @@ private:
virtual void paint_event(GUI::PaintEvent&) override;
virtual void mousemove_event(GUI::MouseEvent&) override;
virtual void mousedown_event(GUI::MouseEvent&) override;
virtual void keydown_event(GUI::KeyEvent&) override;
virtual void enter_event(Core::Event&) override;
virtual void leave_event(Core::Event&) override;
@ -87,18 +85,26 @@ private:
GUI::TextPosition position;
};
Optional<AutoCompleteRequestData> get_autocomplete_request_data();
class LanguageServerAidedAutocompleteProvider final : virtual public GUI::AutocompleteProvider {
public:
LanguageServerAidedAutocompleteProvider(LanguageClient& client)
: m_language_client(client)
{
}
virtual ~LanguageServerAidedAutocompleteProvider() override { }
void update_autocomplete(const AutoCompleteRequestData&);
void show_autocomplete(const AutoCompleteRequestData&);
void close_autocomplete();
private:
virtual void provide_completions(Function<void(Vector<Entry>)> callback) override;
LanguageClient& m_language_client;
};
Optional<AutoCompleteRequestData> get_autocomplete_request_data();
void flush_file_content_to_langauge_server();
explicit Editor();
RefPtr<GUI::Window> m_documentation_tooltip_window;
OwnPtr<AutoCompleteBox> m_autocomplete_box;
RefPtr<Web::OutOfProcessWebView> m_documentation_page_view;
String m_last_parsed_token;
GUI::TextPosition m_previous_text_position { 0, 0 };