Code Folding WIP.

This commit is contained in:
Martín Lucas Golini
2024-05-27 00:57:18 -03:00
parent 0cb3354ca1
commit 396f1e2558
23 changed files with 541 additions and 139 deletions

View File

@@ -340,6 +340,34 @@ PluginRequestHandle LSPClientPlugin::processTextDocumentSymbol( const PluginMess
return { uri.toString() };
}
PluginRequestHandle LSPClientPlugin::processFoldingRanges( const PluginMessage& msg ) {
if ( !msg.isRequest() || msg.type != PluginMessageType::FoldingRanges ||
msg.format != PluginMessageFormat::JSON || !msg.asJSON().contains( "uri" ) )
return {};
URI uri( msg.asJSON().value( "uri", "" ) );
if ( uri.empty() )
return {};
LSPClientServer* server = mClientManager.getOneLSPClientServer( uri );
if ( !server || !server->getCapabilities().foldingRangeProvider )
return {};
auto handler = [uri, this]( const PluginIDType& id, const std::vector<LSPFoldingRange>& res ) {
mManager->sendResponse( this, PluginMessageType::FoldingRanges,
PluginMessageFormat::FoldingRanges, &res, id );
};
if ( Engine::instance()->isMainThread() ) {
server->getThreadPool()->run(
[server, uri, handler]() { server->documentFoldingRange( uri, handler ); } );
} else {
server->documentFoldingRange( uri, handler );
}
return { uri.toString() };
}
void processFormattingResponse( const std::shared_ptr<TextDocument>& doc,
std::vector<LSPTextEdit> edits ) {
TextRanges ranges = doc->getSelections();
@@ -689,6 +717,8 @@ PluginRequestHandle LSPClientPlugin::processMessage( const PluginMessage& msg )
return server->getCapabilities().workspaceSymbolProvider;
case PluginCapability::TextDocumentSymbol:
return server->getCapabilities().documentSymbolProvider;
case PluginCapability::FoldingRange:
return server->getCapabilities().foldingRangeProvider;
default: {
}
}
@@ -734,6 +764,10 @@ PluginRequestHandle LSPClientPlugin::processMessage( const PluginMessage& msg )
processDiagnosticsCodeAction( msg );
break;
}
case PluginMessageType::FoldingRanges: {
processFoldingRanges( msg );
break;
}
default:
break;
}