[clang-tools-extra] e42f5d4 - [clangd] Fix filename ranges while replaying preamble
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 27 00:39:23 PDT 2021
Author: Kadir Cetinkaya
Date: 2021-10-27T09:34:17+02:00
New Revision: e42f5d4b488e78ebf5b756e1e76422c7458ba81c
URL: https://github.com/llvm/llvm-project/commit/e42f5d4b488e78ebf5b756e1e76422c7458ba81c
DIFF: https://github.com/llvm/llvm-project/commit/e42f5d4b488e78ebf5b756e1e76422c7458ba81c.diff
LOG: [clangd] Fix filename ranges while replaying preamble
Clangd used first token of filename as filename range rather than the
synthezied filename token. Unfortunately the former only contains `"` or `<` in
the raw lexing mode, resulting in wrong range information and breaking tidy
checks that relied on it.
Fixes https://github.com/clangd/clangd/issues/896.
Differential Revision: https://reviews.llvm.org/D112559
Added:
Modified:
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/ParsedAST.cpp b/clang-tools-extra/clangd/ParsedAST.cpp
index a62169c8c241f..8fce756b83c1d 100644
--- a/clang-tools-extra/clangd/ParsedAST.cpp
+++ b/clang-tools-extra/clangd/ParsedAST.cpp
@@ -222,11 +222,14 @@ class ReplayPreamble : private PPCallbacks {
const FileEntry *FE = File ? &File->getFileEntry() : nullptr;
llvm::StringRef WrittenFilename =
llvm::StringRef(Inc.Written).drop_front().drop_back();
- Delegate->InclusionDirective(HashTok->location(), SynthesizedIncludeTok,
- WrittenFilename, Inc.Written.front() == '<',
- FileTok->range(SM).toCharRange(SM), FE,
- "SearchPath", "RelPath",
- /*Imported=*/nullptr, Inc.FileKind);
+ Delegate->InclusionDirective(
+ HashTok->location(), SynthesizedIncludeTok, WrittenFilename,
+ Inc.Written.front() == '<',
+ syntax::FileRange(SM, SynthesizedFilenameTok.getLocation(),
+ SynthesizedFilenameTok.getEndLoc())
+ .toCharRange(SM),
+ FE, "SearchPath", "RelPath",
+ /*Imported=*/nullptr, Inc.FileKind);
if (File)
Delegate->FileSkipped(*File, SynthesizedFilenameTok, Inc.FileKind);
else {
diff --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
index 211f289eae734..eabd174823cc5 100644
--- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -361,7 +361,11 @@ TEST(ParsedASTTest, ReplayPreambleForTidyCheckers) {
: HashOffset(SM.getDecomposedLoc(HashLoc).second), IncTok(IncludeTok),
IncDirective(IncludeTok.getIdentifierInfo()->getName()),
FileNameOffset(SM.getDecomposedLoc(FilenameRange.getBegin()).second),
- FileName(FileName), IsAngled(IsAngled) {}
+ FileName(FileName), IsAngled(IsAngled) {
+ EXPECT_EQ(
+ toSourceCode(SM, FilenameRange.getAsRange()).drop_back().drop_front(),
+ FileName);
+ }
size_t HashOffset;
syntax::Token IncTok;
llvm::StringRef IncDirective;
More information about the cfe-commits
mailing list