[clangd] Add fallbackFlags initialization extension.
authorSam McCall <sam.mccall@gmail.com>
Fri, 2 Nov 2018 14:07:51 +0000 (14:07 +0000)
committerSam McCall <sam.mccall@gmail.com>
Fri, 2 Nov 2018 14:07:51 +0000 (14:07 +0000)
Summary:
This allows customizing the flags used when no compile database is
available. It addresses some uses of the old extraFlags extension.

Reviewers: ilya-biryukov

Subscribers: ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits

Differential Revision: https://reviews.llvm.org/D53688

llvm-svn: 345973

clang-tools-extra/clangd/ClangdLSPServer.cpp
clang-tools-extra/clangd/Protocol.cpp
clang-tools-extra/clangd/Protocol.h

index 2d4a9cf..75a99a2 100644 (file)
@@ -308,7 +308,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
   if (UseDirBasedCDB)
     BaseCDB = llvm::make_unique<DirectoryBasedGlobalCompilationDatabase>(
         CompileCommandsDir);
-  CDB.emplace(BaseCDB.get());
+  CDB.emplace(BaseCDB.get(), Params.initializationOptions.fallbackFlags);
   Server.emplace(*CDB, FSProvider, static_cast<DiagnosticsConsumer &>(*this),
                  ClangdServerOpts);
   applyConfiguration(Params.initializationOptions.ConfigSettings);
@@ -664,9 +664,10 @@ void ClangdLSPServer::applyConfiguration(
         tooling::CompileCommand(std::move(Entry.second.workingDirectory), File,
                                 std::move(Entry.second.compilationCommand),
                                 /*Output=*/"");
-    if (Old != New)
+    if (Old != New) {
       CDB->setCompileCommand(File, std::move(New));
-    ShouldReparseOpenFiles = true;
+      ShouldReparseOpenFiles = true;
+    }
   }
   if (ShouldReparseOpenFiles)
     reparseOpenedFiles();
index 765c342..d8369f3 100644 (file)
@@ -669,6 +669,7 @@ bool fromJSON(const json::Value &Params, InitializationOptions &Opts) {
 
   fromJSON(Params, Opts.ConfigSettings);
   O.map("compilationDatabasePath", Opts.compilationDatabasePath);
+  O.map("fallbackFlags", Opts.fallbackFlags);
   return true;
 }
 
index bfa7757..b62e57f 100644 (file)
@@ -368,6 +368,10 @@ struct InitializationOptions {
   ConfigurationSettings ConfigSettings;
 
   llvm::Optional<std::string> compilationDatabasePath;
+  // Additional flags to be included in the "fallback command" used when
+  // the compilation database doesn't describe an opened file.
+  // The command used will be approximately `clang $FILE $fallbackFlags`.
+  std::vector<std::string> fallbackFlags;
 };
 bool fromJSON(const llvm::json::Value &, InitializationOptions &);