mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:38:11 +00:00
HackStudio: Integate with C++ parser-based autocomplete
By default, C++ auto completion will still be performed by the lexer-based logic. However, the parser-based logic can be switched on via the menubar.
This commit is contained in:
parent
8ed96eb27c
commit
fa18010477
14 changed files with 70 additions and 11 deletions
|
@ -25,7 +25,8 @@
|
|||
*/
|
||||
|
||||
#include "ClientConnection.h"
|
||||
#include "AutoComplete.h"
|
||||
#include "LexerAutoComplete.h"
|
||||
#include "ParserAutoComplete.h"
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/HashMap.h>
|
||||
#include <LibCore/File.h>
|
||||
|
@ -146,7 +147,16 @@ void ClientConnection::handle(const Messages::LanguageServer::AutoCompleteSugges
|
|||
return;
|
||||
}
|
||||
|
||||
auto suggestions = AutoComplete::get_suggestions(document->text(), { (size_t)message.cursor_line(), (size_t)max(message.cursor_column(), message.cursor_column() - 1) });
|
||||
Vector<GUI::AutocompleteProvider::Entry> suggestions;
|
||||
switch (m_auto_complete_mode) {
|
||||
case AutoCompleteMode::Lexer:
|
||||
suggestions = LexerAutoComplete::get_suggestions(document->text(), { (size_t)message.cursor_line(), (size_t)max(message.cursor_column(), message.cursor_column() - 1) });
|
||||
break;
|
||||
case AutoCompleteMode::Parser: {
|
||||
auto engine = ParserAutoComplete(document->text());
|
||||
suggestions = engine.get_suggestions({ (size_t)message.cursor_line(), (size_t)max(message.cursor_column(), message.cursor_column() - 1) });
|
||||
}
|
||||
}
|
||||
post_message(Messages::LanguageClient::AutoCompleteSuggestions(move(suggestions)));
|
||||
}
|
||||
|
||||
|
@ -170,4 +180,15 @@ void ClientConnection::handle(const Messages::LanguageServer::SetFileContent& me
|
|||
document->set_text(content.view());
|
||||
}
|
||||
|
||||
void ClientConnection::handle(const Messages::LanguageServer::SetAutoCompleteMode& message)
|
||||
{
|
||||
#ifdef DEBUG_CPP_LANGUAGE_SERVER
|
||||
dbgln("SetAutoCompleteMode: {}", message.mode());
|
||||
#endif
|
||||
if (message.mode() == "Parser")
|
||||
m_auto_complete_mode = AutoCompleteMode::Parser;
|
||||
else
|
||||
m_auto_complete_mode = AutoCompleteMode::Lexer;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue