forked from OSchip/llvm-project
[clangd] Replace getLangOpts().isHeaderFile usage with isHeaderFile helper.
Summary: The helper is more correct to detect header file, this would fix our issues caused by false positive before. Reviewers: sammccall Reviewed By: sammccall Subscribers: merge_guards_bot, ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D70299
This commit is contained in:
parent
509efe5d8e
commit
b221c9d09d
clang-tools-extra/clangd
|
@ -9,6 +9,7 @@
|
|||
#include "HeaderSourceSwitch.h"
|
||||
#include "AST.h"
|
||||
#include "Logger.h"
|
||||
#include "SourceCode.h"
|
||||
#include "index/SymbolCollector.h"
|
||||
#include "clang/AST/Decl.h"
|
||||
|
||||
|
@ -96,7 +97,7 @@ llvm::Optional<Path> getCorrespondingHeaderOrSource(const Path &OriginalFile,
|
|||
//
|
||||
// For each symbol in the original file, we get its target location (decl or
|
||||
// def) from the index, then award that target file.
|
||||
bool IsHeader = AST.getASTContext().getLangOpts().IsHeaderFile;
|
||||
bool IsHeader = isHeaderFile(OriginalFile, AST.getASTContext().getLangOpts());
|
||||
Index->lookup(Request, [&](const Symbol &Sym) {
|
||||
if (IsHeader)
|
||||
AwardTarget(Sym.Definition.FileURI);
|
||||
|
|
|
@ -304,7 +304,8 @@ bool SymbolCollector::handleDeclOccurence(
|
|||
// it's main-file only.
|
||||
bool IsMainFileOnly =
|
||||
SM.isWrittenInMainFile(SM.getExpansionLoc(ND->getBeginLoc())) &&
|
||||
!ASTCtx->getLangOpts().IsHeaderFile;
|
||||
!isHeaderFile(SM.getFileEntryForID(SM.getMainFileID())->getName(),
|
||||
ASTCtx->getLangOpts());
|
||||
// In C, printf is a redecl of an implicit builtin! So check OrigD instead.
|
||||
if (ASTNode.OrigD->isImplicit() ||
|
||||
!shouldCollectSymbol(*ND, *ASTCtx, Opts, IsMainFileOnly))
|
||||
|
|
|
@ -76,7 +76,7 @@ llvm::Optional<ReasonToReject> renamableWithinFile(const Decl &RenameDecl,
|
|||
}
|
||||
auto &ASTCtx = RenameDecl.getASTContext();
|
||||
const auto &SM = ASTCtx.getSourceManager();
|
||||
bool MainFileIsHeader = ASTCtx.getLangOpts().IsHeaderFile;
|
||||
bool MainFileIsHeader = isHeaderFile(MainFile, ASTCtx.getLangOpts());
|
||||
bool DeclaredInMainFile = isInsideMainFile(RenameDecl.getBeginLoc(), SM);
|
||||
|
||||
if (!DeclaredInMainFile)
|
||||
|
|
|
@ -178,14 +178,11 @@ TEST_F(WorkspaceSymbolsTest, Namespaces) {
|
|||
}
|
||||
|
||||
TEST_F(WorkspaceSymbolsTest, AnonymousNamespace) {
|
||||
addFile("foo.h", R"cpp(
|
||||
addFile("foo.cpp", R"cpp(
|
||||
namespace {
|
||||
void test() {}
|
||||
}
|
||||
)cpp");
|
||||
addFile("foo.cpp", R"cpp(
|
||||
#include "foo.h"
|
||||
)cpp");
|
||||
EXPECT_THAT(getSymbols("test"), ElementsAre(QName("test")));
|
||||
}
|
||||
|
||||
|
|
|
@ -664,6 +664,17 @@ TEST_F(SymbolCollectorTest, HeaderAsMainFile) {
|
|||
runSymbolCollector("", Header.code(),
|
||||
/*ExtraArgs=*/{"-xobjective-c++-header"});
|
||||
EXPECT_THAT(Symbols, UnorderedElementsAre(QName("Foo"), QName("Func")));
|
||||
EXPECT_THAT(Refs,
|
||||
UnorderedElementsAre(Pair(findSymbol(Symbols, "Foo").ID,
|
||||
HaveRanges(Header.ranges("Foo"))),
|
||||
Pair(findSymbol(Symbols, "Func").ID,
|
||||
HaveRanges(Header.ranges("Func")))));
|
||||
|
||||
// Run the .hh file as main file (without "-x c++-header"), we should collect
|
||||
// the refs as well.
|
||||
TestFileName = testPath("foo.hh");
|
||||
runSymbolCollector("", Header.code());
|
||||
EXPECT_THAT(Symbols, UnorderedElementsAre(QName("Foo"), QName("Func")));
|
||||
EXPECT_THAT(Refs, UnorderedElementsAre(Pair(findSymbol(Symbols, "Foo").ID,
|
||||
HaveRanges(Header.ranges("Foo"))),
|
||||
Pair(findSymbol(Symbols, "Func").ID,
|
||||
|
|
Loading…
Reference in New Issue