[PATCH] D107637: [clangd] Canonicalize inputs provided with `--`
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 6 04:26:11 PDT 2021
kadircet created this revision.
kadircet added a reviewer: sammccall.
Herald added subscribers: usaxena95, arphaman.
kadircet requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.
We already strip all the inputs provided without `--`, this patch also
handles the cases with `--`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D107637
Files:
clang-tools-extra/clangd/CompileCommands.cpp
clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
Index: clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -45,7 +45,7 @@
Mangler.ClangPath = testPath("fake/clang");
Mangler.ResourceDir = testPath("fake/resources");
Mangler.Sysroot = testPath("fake/sysroot");
- std::vector<std::string> Cmd = {"clang++", "--", "foo.cc"};
+ std::vector<std::string> Cmd = {"clang++", "--", "foo.cc", "bar.cc"};
Mangler.adjust(Cmd, "foo.cc");
EXPECT_THAT(Cmd, ElementsAre(testPath("fake/clang++"),
"-resource-dir=" + testPath("fake/resources"),
Index: clang-tools-extra/clangd/CompileCommands.cpp
===================================================================
--- clang-tools-extra/clangd/CompileCommands.cpp
+++ clang-tools-extra/clangd/CompileCommands.cpp
@@ -237,21 +237,28 @@
// If there is a single `-arch` option, keep it.
if (ArchOptCount < 2)
IndicesToDrop.clear();
- // Move the inputs to the end, separated via `--` from flags. This ensures
- // modifications done in the following steps apply in more cases (like setting
- // -x, which only affects inputs that come after it).
- if (!ArgList.hasArgNoClaim(driver::options::OPT__DASH_DASH)) {
- // Drop all the inputs and only add one for the current file.
- for (auto *Input : ArgList.filtered(driver::options::OPT_INPUT))
- IndicesToDrop.push_back(Input->getIndex());
- Cmd.push_back("--");
- Cmd.push_back(File.str());
+
+ // Strip all the inputs and `--`. We'll put the input for the requested file
+ // explicitly at the end of the flags. This ensures modifications done in the
+ // following steps apply in more cases (like setting -x, which only affects
+ // inputs that come after it).
+ for (auto *Input : ArgList.filtered(driver::options::OPT_INPUT))
+ IndicesToDrop.push_back(Input->getIndex());
+ // Anything after `--` is also treated as input, drop them as well.
+ if (auto *DashDash =
+ ArgList.getLastArgNoClaim(driver::options::OPT__DASH_DASH)) {
+ for (auto I = 0U; I <= DashDash->getNumValues(); ++I)
+ IndicesToDrop.push_back(DashDash->getIndex() + I);
}
llvm::sort(IndicesToDrop);
llvm::for_each(llvm::reverse(IndicesToDrop),
// +1 to account for the executable name in Cmd[0] that
// doesn't exist in ArgList.
[&Cmd](unsigned Idx) { Cmd.erase(Cmd.begin() + Idx + 1); });
+ // All the inputs are stripped, append the name for the requested file. Rest
+ // of the modifications should respect `--`.
+ Cmd.push_back("--");
+ Cmd.push_back(File.str());
for (auto &Edit : Config::current().CompileFlags.Edits)
Edit(Cmd);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107637.364752.patch
Type: text/x-patch
Size: 2829 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210806/339fd5b2/attachment.bin>
More information about the cfe-commits
mailing list