Skip to content

Commit 9ca7663

Browse files
committed
[Gardening] Move functions only used in SourceKit out of lib/IDE
NFC - `getLocationInfo` and `getLocationInfoForClangNode` are both moved and formatted with clang-format.
1 parent 43c8c04 commit 9ca7663

File tree

3 files changed

+79
-87
lines changed

3 files changed

+79
-87
lines changed

include/swift/IDE/Utils.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,6 @@ std::unique_ptr<llvm::MemoryBuffer>
124124
replacePlaceholders(std::unique_ptr<llvm::MemoryBuffer> InputBuf,
125125
bool *HadPlaceholder = nullptr);
126126

127-
void getLocationInfo(
128-
const ValueDecl *VD,
129-
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
130-
StringRef &Filename);
131-
132-
void getLocationInfoForClangNode(ClangNode ClangNode,
133-
ClangImporter *Importer,
134-
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
135-
StringRef &Filename);
136-
137127
Optional<std::pair<unsigned, unsigned>> parseLineCol(StringRef LineCol);
138128

139129
class XMLEscapingPrinter : public StreamPrinter {

lib/IDE/SwiftSourceDocInfo.cpp

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -798,83 +798,6 @@ ReturnInfo(ASTContext &Ctx, ArrayRef<ReturnInfo> Branches):
798798
}
799799
}
800800

801-
void swift::ide::getLocationInfoForClangNode(ClangNode ClangNode,
802-
ClangImporter *Importer,
803-
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
804-
StringRef &Filename) {
805-
clang::ASTContext &ClangCtx = Importer->getClangASTContext();
806-
clang::SourceManager &ClangSM = ClangCtx.getSourceManager();
807-
808-
clang::SourceRange SR = ClangNode.getLocation();
809-
if (auto MD = dyn_cast_or_null<clang::ObjCMethodDecl>(ClangNode.getAsDecl())) {
810-
SR = clang::SourceRange(MD->getSelectorStartLoc(),
811-
MD->getDeclaratorEndLoc());
812-
}
813-
814-
clang::CharSourceRange CharRange =
815-
clang::Lexer::makeFileCharRange(clang::CharSourceRange::getTokenRange(SR),
816-
ClangSM, ClangCtx.getLangOpts());
817-
if (CharRange.isInvalid())
818-
return;
819-
820-
std::pair<clang::FileID, unsigned>
821-
Decomp = ClangSM.getDecomposedLoc(CharRange.getBegin());
822-
if (!Decomp.first.isInvalid()) {
823-
if (auto FE = ClangSM.getFileEntryForID(Decomp.first)) {
824-
Filename = FE->getName();
825-
826-
std::pair<clang::FileID, unsigned>
827-
EndDecomp = ClangSM.getDecomposedLoc(CharRange.getEnd());
828-
829-
DeclarationLoc = { Decomp.second, EndDecomp.second-Decomp.second };
830-
}
831-
}
832-
}
833-
834-
static unsigned getCharLength(SourceManager &SM, SourceRange TokenRange) {
835-
SourceLoc CharEndLoc = Lexer::getLocForEndOfToken(SM, TokenRange.End);
836-
return SM.getByteDistance(TokenRange.Start, CharEndLoc);
837-
}
838-
839-
void swift::ide::getLocationInfo(const ValueDecl *VD,
840-
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
841-
StringRef &Filename) {
842-
ASTContext &Ctx = VD->getASTContext();
843-
SourceManager &SM = Ctx.SourceMgr;
844-
845-
auto ClangNode = VD->getClangNode();
846-
847-
if (VD->getLoc().isValid()) {
848-
auto getSignatureRange = [&](const ValueDecl *VD) -> Optional<unsigned> {
849-
if (auto FD = dyn_cast<AbstractFunctionDecl>(VD)) {
850-
SourceRange R = FD->getSignatureSourceRange();
851-
if (R.isValid())
852-
return getCharLength(SM, R);
853-
}
854-
return None;
855-
};
856-
unsigned NameLen;
857-
if (auto SigLen = getSignatureRange(VD)) {
858-
NameLen = SigLen.getValue();
859-
} else if (VD->hasName()) {
860-
NameLen = VD->getBaseName().userFacingName().size();
861-
} else {
862-
NameLen = getCharLength(SM, VD->getLoc());
863-
}
864-
865-
unsigned DeclBufID = SM.findBufferContainingLoc(VD->getLoc());
866-
DeclarationLoc = { SM.getLocOffsetInBuffer(VD->getLoc(), DeclBufID),
867-
NameLen };
868-
Filename = SM.getIdentifierForBuffer(DeclBufID);
869-
870-
} else if (ClangNode) {
871-
ClangImporter *Importer =
872-
static_cast<ClangImporter*>(Ctx.getClangModuleLoader());
873-
return getLocationInfoForClangNode(ClangNode, Importer,
874-
DeclarationLoc, Filename);
875-
}
876-
}
877-
878801
CharSourceRange CallArgInfo::getEntireCharRange(const SourceManager &SM) const {
879802
return CharSourceRange(SM, LabelRange.getStart(),
880803
Lexer::getLocForEndOfToken(SM, ArgExp->getEndLoc()));

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,85 @@ static ArrayRef<T> copyAndClearArray(llvm::BumpPtrAllocator &Allocator,
802802
return Ref;
803803
}
804804

805+
static void getLocationInfoForClangNode(
806+
ClangNode ClangNode, ClangImporter *Importer,
807+
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
808+
StringRef &Filename) {
809+
clang::ASTContext &ClangCtx = Importer->getClangASTContext();
810+
clang::SourceManager &ClangSM = ClangCtx.getSourceManager();
811+
812+
clang::SourceRange SR = ClangNode.getLocation();
813+
if (auto MD =
814+
dyn_cast_or_null<clang::ObjCMethodDecl>(ClangNode.getAsDecl())) {
815+
SR = clang::SourceRange(MD->getSelectorStartLoc(),
816+
MD->getDeclaratorEndLoc());
817+
}
818+
819+
clang::CharSourceRange CharRange =
820+
clang::Lexer::makeFileCharRange(clang::CharSourceRange::getTokenRange(SR),
821+
ClangSM, ClangCtx.getLangOpts());
822+
if (CharRange.isInvalid())
823+
return;
824+
825+
std::pair<clang::FileID, unsigned> Decomp =
826+
ClangSM.getDecomposedLoc(CharRange.getBegin());
827+
if (!Decomp.first.isInvalid()) {
828+
if (auto FE = ClangSM.getFileEntryForID(Decomp.first)) {
829+
Filename = FE->getName();
830+
831+
std::pair<clang::FileID, unsigned> EndDecomp =
832+
ClangSM.getDecomposedLoc(CharRange.getEnd());
833+
834+
DeclarationLoc = {Decomp.second, EndDecomp.second - Decomp.second};
835+
}
836+
}
837+
}
838+
839+
static unsigned getCharLength(SourceManager &SM, SourceRange TokenRange) {
840+
SourceLoc CharEndLoc = Lexer::getLocForEndOfToken(SM, TokenRange.End);
841+
return SM.getByteDistance(TokenRange.Start, CharEndLoc);
842+
}
843+
844+
static void
845+
getLocationInfo(const ValueDecl *VD,
846+
llvm::Optional<std::pair<unsigned, unsigned>> &DeclarationLoc,
847+
StringRef &Filename) {
848+
ASTContext &Ctx = VD->getASTContext();
849+
SourceManager &SM = Ctx.SourceMgr;
850+
851+
auto ClangNode = VD->getClangNode();
852+
853+
if (VD->getLoc().isValid()) {
854+
auto getSignatureRange = [&](const ValueDecl *VD) -> Optional<unsigned> {
855+
if (auto FD = dyn_cast<AbstractFunctionDecl>(VD)) {
856+
SourceRange R = FD->getSignatureSourceRange();
857+
if (R.isValid())
858+
return getCharLength(SM, R);
859+
}
860+
return None;
861+
};
862+
unsigned NameLen;
863+
if (auto SigLen = getSignatureRange(VD)) {
864+
NameLen = SigLen.getValue();
865+
} else if (VD->hasName()) {
866+
NameLen = VD->getBaseName().userFacingName().size();
867+
} else {
868+
NameLen = getCharLength(SM, VD->getLoc());
869+
}
870+
871+
unsigned DeclBufID = SM.findBufferContainingLoc(VD->getLoc());
872+
DeclarationLoc = {SM.getLocOffsetInBuffer(VD->getLoc(), DeclBufID),
873+
NameLen};
874+
Filename = SM.getIdentifierForBuffer(DeclBufID);
875+
876+
} else if (ClangNode) {
877+
ClangImporter *Importer =
878+
static_cast<ClangImporter *>(Ctx.getClangModuleLoader());
879+
return getLocationInfoForClangNode(ClangNode, Importer, DeclarationLoc,
880+
Filename);
881+
}
882+
}
883+
805884
static llvm::Error
806885
fillSymbolInfo(CursorSymbolInfo &Symbol, const DeclInfo &DInfo,
807886
ModuleDecl *MainModule, SourceLoc CursorLoc, bool AddSymbolGraph,

0 commit comments

Comments
 (0)