Skip to content

Commit 107ba0b

Browse files
authored
Merge pull request swiftlang#33884 from bnbarham/completion-copy-cleanup
[Gardening] Add re-usable copy* utility methods to use in code completion
2 parents 3457709 + 4f5d4d8 commit 107ba0b

File tree

4 files changed

+33
-57
lines changed

4 files changed

+33
-57
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ std::string removeCodeCompletionTokens(StringRef Input,
5757
StringRef TokenName,
5858
unsigned *CompletionOffset);
5959

60+
StringRef copyString(llvm::BumpPtrAllocator &Allocator,
61+
StringRef Str);
62+
63+
const char *copyCString(llvm::BumpPtrAllocator &Allocator,
64+
StringRef Str);
65+
66+
template <typename T>
67+
ArrayRef<T> copyArray(llvm::BumpPtrAllocator &Allocator,
68+
ArrayRef<T> Arr) {
69+
T *Buffer = Allocator.Allocate<T>(Arr.size());
70+
std::copy(Arr.begin(), Arr.end(), Buffer);
71+
return llvm::makeArrayRef(Buffer, Arr.size());
72+
}
73+
6074
namespace detail {
6175
class CodeCompletionStringChunk {
6276
friend class swift::ide::CodeCompletionResultBuilder;

lib/IDE/CodeCompletion.cpp

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,21 @@ std::string swift::ide::removeCodeCompletionTokens(
342342
return CleanFile;
343343
}
344344

345+
llvm::StringRef swift::ide::copyString(llvm::BumpPtrAllocator &Allocator,
346+
llvm::StringRef Str) {
347+
char *Buffer = Allocator.Allocate<char>(Str.size());
348+
std::copy(Str.begin(), Str.end(), Buffer);
349+
return llvm::StringRef(Buffer, Str.size());
350+
}
351+
352+
const char *swift::ide::copyCString(llvm::BumpPtrAllocator &Allocator,
353+
llvm::StringRef Str) {
354+
char *Buffer = Allocator.Allocate<char>(Str.size() + 1);
355+
std::copy(Str.begin(), Str.end(), Buffer);
356+
Buffer[Str.size()] = '\0';
357+
return Buffer;
358+
}
359+
345360
CodeCompletionString::CodeCompletionString(ArrayRef<Chunk> Chunks) {
346361
std::uninitialized_copy(Chunks.begin(), Chunks.end(),
347362
getTrailingObjects<Chunk>());
@@ -770,29 +785,6 @@ void CodeCompletionResult::dump() const {
770785
llvm::errs() << "\n";
771786
}
772787

773-
static StringRef copyString(llvm::BumpPtrAllocator &Allocator,
774-
StringRef Str) {
775-
char *Mem = Allocator.Allocate<char>(Str.size());
776-
std::copy(Str.begin(), Str.end(), Mem);
777-
return StringRef(Mem, Str.size());
778-
}
779-
780-
static ArrayRef<StringRef> copyStringArray(llvm::BumpPtrAllocator &Allocator,
781-
ArrayRef<StringRef> Arr) {
782-
StringRef *Buff = Allocator.Allocate<StringRef>(Arr.size());
783-
std::copy(Arr.begin(), Arr.end(), Buff);
784-
return llvm::makeArrayRef(Buff, Arr.size());
785-
}
786-
787-
static ArrayRef<std::pair<StringRef, StringRef>> copyStringPairArray(
788-
llvm::BumpPtrAllocator &Allocator,
789-
ArrayRef<std::pair<StringRef, StringRef>> Arr) {
790-
std::pair<StringRef, StringRef> *Buff = Allocator.Allocate<std::pair<StringRef,
791-
StringRef>>(Arr.size());
792-
std::copy(Arr.begin(), Arr.end(), Buff);
793-
return llvm::makeArrayRef(Buff, Arr.size());
794-
}
795-
796788
void CodeCompletionResultBuilder::withNestedGroup(
797789
CodeCompletionString::Chunk::ChunkKind Kind,
798790
llvm::function_ref<void()> body) {
@@ -1126,7 +1118,7 @@ ArrayRef<StringRef> copyAssociatedUSRs(llvm::BumpPtrAllocator &Allocator,
11261118
});
11271119

11281120
if (!USRs.empty())
1129-
return copyStringArray(Allocator, USRs);
1121+
return copyArray(Allocator, ArrayRef<StringRef>(USRs));
11301122

11311123
return ArrayRef<StringRef>();
11321124
}
@@ -1348,7 +1340,7 @@ CodeCompletionResult *CodeCompletionResultBuilder::takeResult() {
13481340
/*NotRecommended=*/IsNotRecommended, NotRecReason,
13491341
copyString(*Sink.Allocator, BriefComment),
13501342
copyAssociatedUSRs(*Sink.Allocator, AssociatedDecl),
1351-
copyStringPairArray(*Sink.Allocator, CommentWords), typeRelation);
1343+
copyArray(*Sink.Allocator, CommentWords), typeRelation);
13521344
}
13531345

13541346
case CodeCompletionResult::ResultKind::Keyword:

lib/IDE/CodeCompletionCache.cpp

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -102,28 +102,6 @@ CodeCompletionCache::~CodeCompletionCache() {}
102102
/// cached results. This isn't expected to change very often.
103103
static constexpr uint32_t onDiskCompletionCacheVersion = 1;
104104

105-
static StringRef copyString(llvm::BumpPtrAllocator &Allocator, StringRef Str) {
106-
char *Mem = Allocator.Allocate<char>(Str.size());
107-
std::copy(Str.begin(), Str.end(), Mem);
108-
return StringRef(Mem, Str.size());
109-
}
110-
111-
static ArrayRef<StringRef> copyStringArray(llvm::BumpPtrAllocator &Allocator,
112-
ArrayRef<StringRef> Arr) {
113-
StringRef *Buff = Allocator.Allocate<StringRef>(Arr.size());
114-
std::copy(Arr.begin(), Arr.end(), Buff);
115-
return llvm::makeArrayRef(Buff, Arr.size());
116-
}
117-
118-
static ArrayRef<std::pair<StringRef, StringRef>> copyStringPairArray(
119-
llvm::BumpPtrAllocator &Allocator,
120-
ArrayRef<std::pair<StringRef, StringRef>> Arr) {
121-
std::pair<StringRef, StringRef> *Buff = Allocator.Allocate<std::pair<StringRef,
122-
StringRef>>(Arr.size());
123-
std::copy(Arr.begin(), Arr.end(), Buff);
124-
return llvm::makeArrayRef(Buff, Arr.size());
125-
}
126-
127105
/// Deserializes CodeCompletionResults from \p in and stores them in \p V.
128106
/// \see writeCacheModule.
129107
static bool readCachedModule(llvm::MemoryBuffer *in,
@@ -251,8 +229,8 @@ static bool readCachedModule(llvm::MemoryBuffer *in,
251229
result = new (*V.Sink.Allocator) CodeCompletionResult(
252230
context, numBytesToErase, string, declKind, isSystem, moduleName,
253231
notRecommended, CodeCompletionResult::NotRecommendedReason::NoReason,
254-
briefDocComment, copyStringArray(*V.Sink.Allocator, assocUSRs),
255-
copyStringPairArray(*V.Sink.Allocator, declKeywords),
232+
briefDocComment, copyArray(*V.Sink.Allocator, ArrayRef<StringRef>(assocUSRs)),
233+
copyArray(*V.Sink.Allocator, ArrayRef<std::pair<StringRef, StringRef>>(declKeywords)),
256234
CodeCompletionResult::Unknown, opKind);
257235
} else {
258236
result = new (*V.Sink.Allocator)

tools/SourceKit/lib/SwiftLang/CodeCompletionOrganizer.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,6 @@ std::vector<Completion *> SourceKit::CodeCompletion::extendCompletions(
157157
return results;
158158
}
159159

160-
static StringRef copyString(llvm::BumpPtrAllocator &allocator, StringRef str);
161-
162160
bool SourceKit::CodeCompletion::addCustomCompletions(
163161
CompletionSink &sink, std::vector<Completion *> &completions,
164162
ArrayRef<CustomCompletionInfo> customCompletions,
@@ -405,12 +403,6 @@ ImportDepth::ImportDepth(ASTContext &context,
405403
// CodeCompletionOrganizer::Impl utilities
406404
//===----------------------------------------------------------------------===//
407405

408-
static StringRef copyString(llvm::BumpPtrAllocator &allocator, StringRef str) {
409-
char *newStr = allocator.Allocate<char>(str.size());
410-
std::copy(str.begin(), str.end(), newStr);
411-
return StringRef(newStr, str.size());
412-
}
413-
414406
static std::unique_ptr<Group> make_group(StringRef name) {
415407
auto g = std::make_unique<Group>();
416408
g->name = name.str();

0 commit comments

Comments
 (0)