kadircet created this revision. kadircet added reviewers: sammccall, nridge. 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.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D112559 Files: clang-tools-extra/clangd/ParsedAST.cpp clang-tools-extra/clangd/unittests/ParsedASTTests.cpp Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -361,7 +361,11 @@ : 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; Index: clang-tools-extra/clangd/ParsedAST.cpp =================================================================== --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -222,11 +222,14 @@ 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 {
Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp +++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp @@ -361,7 +361,11 @@ : 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; Index: clang-tools-extra/clangd/ParsedAST.cpp =================================================================== --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -222,11 +222,14 @@ 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 {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits