mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:42:44 +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
	
	 Itamar
						Itamar