From bdc376a1eb31c2eb326ca9240bce551fc411d56d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Thu, 21 Mar 2024 12:55:36 -0300 Subject: [PATCH] Fix TypeScript React and JavasSript React files in LSP, they were recognized as TypeScript and JavaScript files so it was incorrectly parsed. --- bin/assets/plugins/lspclient.json | 4 ++-- .../ecode/plugins/lsp/lspclientplugin.cpp | 18 ++++++++++++++++++ .../ecode/plugins/lsp/lspclientserver.cpp | 14 +++++++++++++- src/tools/ecode/plugins/lsp/lspdefinition.hpp | 2 ++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/bin/assets/plugins/lspclient.json b/bin/assets/plugins/lspclient.json index ecfc59d64..81986df28 100644 --- a/bin/assets/plugins/lspclient.json +++ b/bin/assets/plugins/lspclient.json @@ -31,7 +31,7 @@ } }, { - "language": "tsx", + "language": "typescriptreact", "use": "typescript-language-server", "share_process": true, "file_patterns": ["%.tsx$"] @@ -43,7 +43,7 @@ "file_patterns": ["%.js$"] }, { - "language": "jsx", + "language": "javascriptreact", "use": "typescript-language-server", "share_process": true, "file_patterns": ["%.jsx$"] diff --git a/src/tools/ecode/plugins/lsp/lspclientplugin.cpp b/src/tools/ecode/plugins/lsp/lspclientplugin.cpp index 1fd66b0e2..635a61b3c 100644 --- a/src/tools/ecode/plugins/lsp/lspclientplugin.cpp +++ b/src/tools/ecode/plugins/lsp/lspclientplugin.cpp @@ -770,6 +770,24 @@ void LSPClientPlugin::load( PluginManager* pluginManager ) { } } + std::unordered_map> lspPatternsLangId; + + for ( auto& lsp : lsps ) { + if ( lsp.shareProcessWithOtherDefinition && !lsp.usesLSP.empty() ) { + for ( const auto& ptrn : lsp.filePatterns ) + lspPatternsLangId[lsp.usesLSP][ptrn] = lsp.language; + } + } + + for ( auto& lsp : lsps ) { + auto ptrnsLangIds = lspPatternsLangId.find( lsp.name ); + if ( ptrnsLangIds != lspPatternsLangId.end() ) { + lsp.languageIdsForFilePatterns.merge( ptrnsLangIds->second ); + for ( const auto& ptrn : lsp.filePatterns ) + lsp.languageIdsForFilePatterns[ptrn] = lsp.language; + } + } + mClientManager.load( this, pluginManager, std::move( lsps ) ); subscribeFileSystemListener(); diff --git a/src/tools/ecode/plugins/lsp/lspclientserver.cpp b/src/tools/ecode/plugins/lsp/lspclientserver.cpp index 256903897..544ba2881 100644 --- a/src/tools/ecode/plugins/lsp/lspclientserver.cpp +++ b/src/tools/ecode/plugins/lsp/lspclientserver.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -1433,7 +1434,18 @@ bool LSPClientServer::trimLogs() const { LSPClientServer::LSPRequestHandle LSPClientServer::didOpen( const URI& document, const std::string& text, int version ) { - auto params = textDocumentParams( textDocumentItem( document, mLSP.language, text, version ) ); + std::string languageId = mLSP.language; + if ( !mLSP.languageIdsForFilePatterns.empty() ) { + for ( const auto& filePattern : mLSP.languageIdsForFilePatterns ) { + LuaPattern ptrn( filePattern.first ); + if ( ptrn.matches( document.toString() ) ) { + languageId = filePattern.second; + break; + } + } + } + + auto params = textDocumentParams( textDocumentItem( document, languageId, text, version ) ); return send( newRequest( "textDocument/didOpen", params ) ); } diff --git a/src/tools/ecode/plugins/lsp/lspdefinition.hpp b/src/tools/ecode/plugins/lsp/lspdefinition.hpp index 028502963..8f31bb8fc 100644 --- a/src/tools/ecode/plugins/lsp/lspdefinition.hpp +++ b/src/tools/ecode/plugins/lsp/lspdefinition.hpp @@ -22,6 +22,8 @@ struct LSPDefinition { std::string url; std::string host; std::unordered_map env; + /* filePattern, languageId */ + std::unordered_map languageIdsForFilePatterns; int port{ 0 }; nlohmann::json initializationOptions;