Is there a particular reason why this commit didn't have a corresponding test included? Cheers, Alex
On 1 August 2018 at 04:28, Simon Marchi via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: simark > Date: Wed Aug 1 04:28:49 2018 > New Revision: 338518 > > URL: http://llvm.org/viewvc/llvm-project?rev=338518&view=rev > Log: > [clangd] Receive compilationDatabasePath in 'initialize' request > > Summary: > That way, as soon as the "initialize" is received by the server, it can > start > parsing/indexing with a valid compilation database and not have to wait > for a > an initial 'didChangeConfiguration' that might or might not happen. > Then, when the user changes configuration, a didChangeConfiguration can be > sent. > > Signed-off-by: Marc-Andre Laperle <marc-andre.lape...@ericsson.com> > > Reviewers: malaperle > > Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, cfe-commits > > Differential Revision: https://reviews.llvm.org/D49833 > > Modified: > clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp > clang-tools-extra/trunk/clangd/ClangdLSPServer.h > clang-tools-extra/trunk/clangd/Protocol.cpp > clang-tools-extra/trunk/clangd/Protocol.h > > Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clangd/ClangdLSPServer.cpp?rev=338518&r1=338517&r2=338518&view=diff > ============================================================ > ================== > --- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original) > +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Wed Aug 1 > 04:28:49 2018 > @@ -72,6 +72,9 @@ SymbolKindBitset defaultSymbolKinds() { > } // namespace > > void ClangdLSPServer::onInitialize(InitializeParams &Params) { > + if (Params.initializationOptions) > + applyConfiguration(*Params.initializationOptions); > + > if (Params.rootUri && *Params.rootUri) > Server.setRootPath(Params.rootUri->file()); > else if (Params.rootPath && !Params.rootPath->empty()) > @@ -398,11 +401,8 @@ void ClangdLSPServer::onHover(TextDocume > }); > } > > -// FIXME: This function needs to be properly tested. > -void ClangdLSPServer::onChangeConfiguration( > - DidChangeConfigurationParams &Params) { > - ClangdConfigurationParamsChange &Settings = Params.settings; > - > +void ClangdLSPServer::applyConfiguration( > + const ClangdConfigurationParamsChange &Settings) { > // Compilation database change. > if (Settings.compilationDatabasePath.hasValue()) { > NonCachedCDB.setCompileCommandsDir( > @@ -413,6 +413,12 @@ void ClangdLSPServer::onChangeConfigurat > } > } > > +// FIXME: This function needs to be properly tested. > +void ClangdLSPServer::onChangeConfiguration( > + DidChangeConfigurationParams &Params) { > + applyConfiguration(Params.settings); > +} > + > ClangdLSPServer::ClangdLSPServer(JSONOutput &Out, > const clangd::CodeCompleteOptions > &CCOpts, > llvm::Optional<Path> CompileCommandsDir, > > Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.h > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clangd/ClangdLSPServer.h?rev=338518&r1=338517&r2=338518&view=diff > ============================================================ > ================== > --- clang-tools-extra/trunk/clangd/ClangdLSPServer.h (original) > +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.h Wed Aug 1 04:28:49 > 2018 > @@ -82,6 +82,7 @@ private: > /// may be very expensive. This method is normally called when the > /// compilation database is changed. > void reparseOpenedFiles(); > + void applyConfiguration(const ClangdConfigurationParamsChange > &Settings); > > JSONOutput &Out; > /// Used to indicate that the 'shutdown' request was received from the > > Modified: clang-tools-extra/trunk/clangd/Protocol.cpp > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clangd/Protocol.cpp?rev=338518&r1=338517&r2=338518&view=diff > ============================================================ > ================== > --- clang-tools-extra/trunk/clangd/Protocol.cpp (original) > +++ clang-tools-extra/trunk/clangd/Protocol.cpp Wed Aug 1 04:28:49 2018 > @@ -263,7 +263,7 @@ bool fromJSON(const json::Value &Params, > O.map("rootPath", R.rootPath); > O.map("capabilities", R.capabilities); > O.map("trace", R.trace); > - // initializationOptions, capabilities unused > + O.map("initializationOptions", R.initializationOptions); > return true; > } > > > Modified: clang-tools-extra/trunk/clangd/Protocol.h > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clangd/Protocol.h?rev=338518&r1=338517&r2=338518&view=diff > ============================================================ > ================== > --- clang-tools-extra/trunk/clangd/Protocol.h (original) > +++ clang-tools-extra/trunk/clangd/Protocol.h Wed Aug 1 04:28:49 2018 > @@ -322,6 +322,16 @@ struct ClientCapabilities { > > bool fromJSON(const llvm::json::Value &, ClientCapabilities &); > > +/// Clangd extension to set clangd-specific "initializationOptions" in the > +/// "initialize" request and for the "workspace/didChangeConfiguration" > +/// notification since the data received is described as 'any' type in > LSP. > +struct ClangdConfigurationParamsChange { > + llvm::Optional<std::string> compilationDatabasePath; > +}; > +bool fromJSON(const llvm::json::Value &, ClangdConfigurationParamsChange > &); > + > +struct ClangdInitializationOptions : public ClangdConfigurationParamsChange > {}; > + > struct InitializeParams { > /// The process Id of the parent process that started > /// the server. Is null if the process has not been started by another > @@ -348,6 +358,10 @@ struct InitializeParams { > > /// The initial trace setting. If omitted trace is disabled ('off'). > llvm::Optional<TraceLevel> trace; > + > + // We use this predefined struct because it is easier to use > + // than the protocol specified type of 'any'. > + llvm::Optional<ClangdInitializationOptions> initializationOptions; > }; > bool fromJSON(const llvm::json::Value &, InitializeParams &); > > @@ -419,13 +433,6 @@ struct DidChangeWatchedFilesParams { > }; > bool fromJSON(const llvm::json::Value &, DidChangeWatchedFilesParams &); > > -/// Clangd extension to manage a workspace/didChangeConfiguration > notification > -/// since the data received is described as 'any' type in LSP. > -struct ClangdConfigurationParamsChange { > - llvm::Optional<std::string> compilationDatabasePath; > -}; > -bool fromJSON(const llvm::json::Value &, ClangdConfigurationParamsChange > &); > - > struct DidChangeConfigurationParams { > // We use this predefined struct because it is easier to use > // than the protocol specified type of 'any'. > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits