Add method to get first chunk in code completion string with punctuation

The client may or may not want to include the leading punctuation in a
result e.g. in "?.foo()".

Swift SVN r31013
This commit is contained in:
Ben Langmuir
2015-08-04 22:13:25 +00:00
parent a587c3be53
commit c011b9f54c
2 changed files with 10 additions and 5 deletions

View File

@@ -293,7 +293,8 @@ public:
}
StringRef getFirstTextChunk() const;
Optional<unsigned> getFirstTextChunkIndex() const;
Optional<unsigned>
getFirstTextChunkIndex(bool includeLeadingPunctuation = false) const;
/// Concatenates all text chunks considered part of the name to \p OS.
void getName(raw_ostream &OS) const;

View File

@@ -539,7 +539,8 @@ MutableArrayRef<CodeCompletionResult *> CodeCompletionContext::takeResults() {
return MutableArrayRef<CodeCompletionResult *>(Results, Count);
}
Optional<unsigned> CodeCompletionString::getFirstTextChunkIndex() const {
Optional<unsigned> CodeCompletionString::getFirstTextChunkIndex(
bool includeLeadingPunctuation) const {
for (auto i : indices(getChunks())) {
auto &C = getChunks()[i];
switch (C.getKind()) {
@@ -552,15 +553,18 @@ Optional<unsigned> CodeCompletionString::getFirstTextChunkIndex() const {
case CodeCompletionString::Chunk::ChunkKind::DeclAttrParamKeyword:
case CodeCompletionString::Chunk::ChunkKind::DeclAttrKeyword:
return i;
case CodeCompletionString::Chunk::ChunkKind::Dot:
case CodeCompletionString::Chunk::ChunkKind::ExclamationMark:
case CodeCompletionString::Chunk::ChunkKind::QuestionMark:
if (includeLeadingPunctuation)
return i;
continue;
case CodeCompletionString::Chunk::ChunkKind::RightParen:
case CodeCompletionString::Chunk::ChunkKind::RightBracket:
case CodeCompletionString::Chunk::ChunkKind::LeftAngle:
case CodeCompletionString::Chunk::ChunkKind::RightAngle:
case CodeCompletionString::Chunk::ChunkKind::Dot:
case CodeCompletionString::Chunk::ChunkKind::Ellipsis:
case CodeCompletionString::Chunk::ChunkKind::Comma:
case CodeCompletionString::Chunk::ChunkKind::ExclamationMark:
case CodeCompletionString::Chunk::ChunkKind::QuestionMark:
case CodeCompletionString::Chunk::ChunkKind::Ampersand:
case CodeCompletionString::Chunk::ChunkKind::AccessControlKeyword:
case CodeCompletionString::Chunk::ChunkKind::OverrideKeyword: