LSP Client advances. Some LSPs are responding fine.

This commit is contained in:
Martín Lucas Golini
2022-10-31 22:14:09 -03:00
parent ab9bd56a49
commit bc5188ec28
15 changed files with 646 additions and 137 deletions

View File

@@ -87,16 +87,21 @@ void LSPClientServerManager::tryRunServer( const std::shared_ptr<TextDocument>&
} else {
server = clientIt->second.get();
}
if ( server )
if ( server ) {
if ( !mLSPWorkspaceFolder.uri.empty() )
server->didChangeWorkspaceFolders( { mLSPWorkspaceFolder }, {} );
server->registerDoc( doc );
}
}
}
void LSPClientServerManager::notifyClose( const String::HashType& id ) {
auto it = mClients.find( id );
if ( it != mClients.end() ) {
mClients.erase( it );
}
void LSPClientServerManager::closeLSPServer( const String::HashType& id ) {
mThreadPool->run( [this, id]() {
auto it = mClients.find( id );
if ( it != mClients.end() ) {
mClients.erase( it );
}
} );
}
void LSPClientServerManager::goToLocation( const LSPLocation& loc ) {
@@ -136,8 +141,16 @@ const std::shared_ptr<ThreadPool>& LSPClientServerManager::getThreadPool() const
}
void LSPClientServerManager::updateDirty() {
for ( auto& server : mClients )
for ( auto& server : mClients ) {
server.second->updateDirty();
if ( !server.second->hasDocuments() )
mLSPsToClose.push_back( server.first );
}
if ( !mLSPsToClose.empty() )
for ( const auto& server : mLSPsToClose )
closeLSPServer( server );
}
void LSPClientServerManager::followSymbolUnderCursor( TextDocument* doc ) {
@@ -149,4 +162,15 @@ void LSPClientServerManager::followSymbolUnderCursor( TextDocument* doc ) {
}
}
void LSPClientServerManager::didChangeWorkspaceFolders( const std::string& folder ) {
mLSPWorkspaceFolder = { "file://" + folder, FileSystem::fileNameFromPath( folder ) };
for ( auto& server : mClients ) {
server.second->didChangeWorkspaceFolders( { mLSPWorkspaceFolder }, {} );
}
}
const LSPWorkspaceFolder& LSPClientServerManager::getLSPWorkspaceFolder() const {
return mLSPWorkspaceFolder;
}
} // namespace ecode