compile commands header to source heuristic lower-cases filenames before inferring file types

This leads to ".C" files being rewritten as ".c" files and being inferred to be "c" files as opposed to "c++" files.

Fixes https://github.com/clangd/clangd/issues/1108

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D124262
This commit is contained in:
Ishaan Gandhi 2022-04-25 20:15:15 +02:00 committed by Sam McCall
parent e59e580116
commit 87468e85fc
2 changed files with 9 additions and 1 deletions

View File

@ -328,7 +328,7 @@ public:
StringRef Path = Strings.save(StringRef(OriginalPaths[I]).lower());
Paths.emplace_back(Path, I);
Types.push_back(foldType(guessType(Path)));
Types.push_back(foldType(guessType(OriginalPaths[I])));
Stems.emplace_back(sys::path::stem(Path), I);
auto Dir = ++sys::path::rbegin(Path), DirEnd = sys::path::rend(Path);
for (int J = 0; J < DirectorySegmentsIndexed && Dir != DirEnd; ++J, ++Dir)

View File

@ -836,6 +836,14 @@ TEST_F(InterpolateTest, Case) {
EXPECT_EQ(getProxy("foo/bar/baz/shout.C"), "FOO/BAR/BAZ/SHOUT.cc");
}
TEST_F(InterpolateTest, LanguagePreference) {
add("foo/bar/baz/exact.C");
add("foo/bar/baz/exact.c");
add("other/random/path.cpp");
// Proxies for ".H" files are ".C" files, and not ".c files".
EXPECT_EQ(getProxy("foo/bar/baz/exact.H"), "foo/bar/baz/exact.C");
}
TEST_F(InterpolateTest, Aliasing) {
add("foo.cpp", "-faligned-new");