[clang-tools-extra] r364280 - [clangd] Cleanup the duplicated getTokenRange.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 25 01:01:47 PDT 2019
Author: hokein
Date: Tue Jun 25 01:01:46 2019
New Revision: 364280
URL: http://llvm.org/viewvc/llvm-project?rev=364280&view=rev
Log:
[clangd] Cleanup the duplicated getTokenRange.
Summary:
Also lift it to SourceCode.h, so that it can be used in other places
(semantic code highlighting).
Reviewers: kadircet
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D63714
Modified:
clang-tools-extra/trunk/clangd/SourceCode.cpp
clang-tools-extra/trunk/clangd/SourceCode.h
clang-tools-extra/trunk/clangd/XRefs.cpp
Modified: clang-tools-extra/trunk/clangd/SourceCode.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/SourceCode.cpp?rev=364280&r1=364279&r2=364280&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/SourceCode.cpp (original)
+++ clang-tools-extra/trunk/clangd/SourceCode.cpp Tue Jun 25 01:01:46 2019
@@ -196,6 +196,17 @@ Position sourceLocToPosition(const Sourc
return P;
}
+llvm::Optional<Range> getTokenRange(const SourceManager &SM,
+ const LangOptions &LangOpts,
+ SourceLocation TokLoc) {
+ if (!TokLoc.isValid())
+ return llvm::None;
+ SourceLocation End = Lexer::getLocForEndOfToken(TokLoc, 0, SM, LangOpts);
+ if (!End.isValid())
+ return llvm::None;
+ return halfOpenToRange(SM, CharSourceRange::getCharRange(TokLoc, End));
+}
+
bool isValidFileRange(const SourceManager &Mgr, SourceRange R) {
if (!R.getBegin().isValid() || !R.getEnd().isValid())
return false;
Modified: clang-tools-extra/trunk/clangd/SourceCode.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/SourceCode.h?rev=364280&r1=364279&r2=364280&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/SourceCode.h (original)
+++ clang-tools-extra/trunk/clangd/SourceCode.h Tue Jun 25 01:01:46 2019
@@ -65,6 +65,11 @@ Position offsetToPosition(llvm::StringRe
/// FIXME: This should return an error if the location is invalid.
Position sourceLocToPosition(const SourceManager &SM, SourceLocation Loc);
+/// Returns the taken range at \p TokLoc.
+llvm::Optional<Range> getTokenRange(const SourceManager &SM,
+ const LangOptions &LangOpts,
+ SourceLocation TokLoc);
+
/// Return the file location, corresponding to \p P. Note that one should take
/// care to avoid comparing the result with expansion locations.
llvm::Expected<SourceLocation> sourceLocationInMainFile(const SourceManager &SM,
Modified: clang-tools-extra/trunk/clangd/XRefs.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/XRefs.cpp?rev=364280&r1=364279&r2=364280&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/XRefs.cpp (original)
+++ clang-tools-extra/trunk/clangd/XRefs.cpp Tue Jun 25 01:01:46 2019
@@ -260,14 +260,6 @@ IdentifiedSymbol getSymbolAtPosition(Par
return {DeclMacrosFinder.getFoundDecls(), DeclMacrosFinder.takeMacroInfos()};
}
-Range getTokenRange(ASTContext &AST, SourceLocation TokLoc) {
- const SourceManager &SourceMgr = AST.getSourceManager();
- SourceLocation LocEnd =
- Lexer::getLocForEndOfToken(TokLoc, 0, SourceMgr, AST.getLangOpts());
- return {sourceLocToPosition(SourceMgr, TokLoc),
- sourceLocToPosition(SourceMgr, LocEnd)};
-}
-
llvm::Optional<Location> makeLocation(ASTContext &AST, SourceLocation TokLoc,
llvm::StringRef TUPath) {
const SourceManager &SourceMgr = AST.getSourceManager();
@@ -279,10 +271,14 @@ llvm::Optional<Location> makeLocation(AS
log("failed to get path!");
return None;
}
- Location L;
- L.uri = URIForFile::canonicalize(*FilePath, TUPath);
- L.range = getTokenRange(AST, TokLoc);
- return L;
+ if (auto Range =
+ getTokenRange(AST.getSourceManager(), AST.getLangOpts(), TokLoc)) {
+ Location L;
+ L.uri = URIForFile::canonicalize(*FilePath, TUPath);
+ L.range = *Range;
+ return L;
+ }
+ return None;
}
} // namespace
@@ -471,15 +467,19 @@ std::vector<DocumentHighlight> findDocum
std::vector<DocumentHighlight> Result;
for (const auto &Ref : References) {
- DocumentHighlight DH;
- DH.range = getTokenRange(AST.getASTContext(), Ref.Loc);
- if (Ref.Role & index::SymbolRoleSet(index::SymbolRole::Write))
- DH.kind = DocumentHighlightKind::Write;
- else if (Ref.Role & index::SymbolRoleSet(index::SymbolRole::Read))
- DH.kind = DocumentHighlightKind::Read;
- else
- DH.kind = DocumentHighlightKind::Text;
- Result.push_back(std::move(DH));
+ if (auto Range =
+ getTokenRange(AST.getASTContext().getSourceManager(),
+ AST.getASTContext().getLangOpts(), Ref.Loc)) {
+ DocumentHighlight DH;
+ DH.range = *Range;
+ if (Ref.Role & index::SymbolRoleSet(index::SymbolRole::Write))
+ DH.kind = DocumentHighlightKind::Write;
+ else if (Ref.Role & index::SymbolRoleSet(index::SymbolRole::Read))
+ DH.kind = DocumentHighlightKind::Read;
+ else
+ DH.kind = DocumentHighlightKind::Text;
+ Result.push_back(std::move(DH));
+ }
}
return Result;
}
@@ -610,18 +610,6 @@ fetchTemplateParameters(const TemplatePa
return TempParameters;
}
-static llvm::Optional<Range> getTokenRange(SourceLocation Loc,
- const ASTContext &Ctx) {
- if (!Loc.isValid())
- return llvm::None;
- SourceLocation End = Lexer::getLocForEndOfToken(
- Loc, 0, Ctx.getSourceManager(), Ctx.getLangOpts());
- if (!End.isValid())
- return llvm::None;
- return halfOpenToRange(Ctx.getSourceManager(),
- CharSourceRange::getCharRange(Loc, End));
-}
-
static const FunctionDecl *getUnderlyingFunction(const Decl *D) {
// Extract lambda from variables.
if (const VarDecl *VD = llvm::dyn_cast<VarDecl>(D)) {
@@ -910,7 +898,9 @@ llvm::Optional<HoverInfo> getHover(Parse
tooling::applyAllReplacements(HI->Definition, Replacements))
HI->Definition = *Formatted;
- HI->SymRange = getTokenRange(SourceLocationBeg, AST.getASTContext());
+ HI->SymRange =
+ getTokenRange(AST.getASTContext().getSourceManager(),
+ AST.getASTContext().getLangOpts(), SourceLocationBeg);
return HI;
}
@@ -933,10 +923,14 @@ std::vector<Location> findReferences(Par
// TODO: should we handle macros, too?
auto MainFileRefs = findRefs(Symbols.Decls, AST);
for (const auto &Ref : MainFileRefs) {
- Location Result;
- Result.range = getTokenRange(AST.getASTContext(), Ref.Loc);
- Result.uri = URIForFile::canonicalize(*MainFilePath, *MainFilePath);
- Results.push_back(std::move(Result));
+ if (auto Range =
+ getTokenRange(AST.getASTContext().getSourceManager(),
+ AST.getASTContext().getLangOpts(), Ref.Loc)) {
+ Location Result;
+ Result.range = *Range;
+ Result.uri = URIForFile::canonicalize(*MainFilePath, *MainFilePath);
+ Results.push_back(std::move(Result));
+ }
}
// Now query the index for references from other files.
More information about the cfe-commits
mailing list