static FileContent getFileContentFromSnap(ImmutableTextSnapshotRef Snap, bool IsPrimary, StringRef FilePath) { auto Buf = llvm::MemoryBuffer::getMemBufferCopy( Snap->getBuffer()->getText(), FilePath); return FileContent(Snap, FilePath, std::move(Buf), IsPrimary, Snap->getStamp()); }
static StringRef getSourceToken(unsigned Offset, ImmutableTextSnapshotRef Snap) { auto MemBuf = Snap->getBuffer()->getInternalBuffer(); SourceManager SM; auto MemBufRef = llvm::MemoryBuffer::getMemBuffer(MemBuf->getBuffer(), MemBuf->getBufferIdentifier()); auto BufId = SM.addNewSourceBuffer(std::move(MemBufRef)); SourceLoc Loc = SM.getLocForOffset(BufId, Offset); // Use fake language options; language options only affect validity // and the exact token produced. LangOptions FakeLangOpts; Lexer L(FakeLangOpts, SM, BufId, nullptr, /*InSILMode=*/ false, CommentRetentionMode::ReturnAsTokens); return L.getTokenAt(Loc).getText(); }