diff options
| author | Alex Lorenz <arphaman@gmail.com> | 2017-05-09 16:05:04 +0000 |
|---|---|---|
| committer | Alex Lorenz <arphaman@gmail.com> | 2017-05-09 16:05:04 +0000 |
| commit | f7f6f823a4d71e7febbeaf1db4fccbb5a83005d3 (patch) | |
| tree | c8963e58fd570902cd15e64437f47b303fdc0373 /clang/lib | |
| parent | 3a363fff7e1725caa840cc0b7323129f7370606a (diff) | |
| download | bcm5719-llvm-f7f6f823a4d71e7febbeaf1db4fccbb5a83005d3.tar.gz bcm5719-llvm-f7f6f823a4d71e7febbeaf1db4fccbb5a83005d3.zip | |
[CodeCompletion] Complete platform names in @available expressions
rdar://32074504
llvm-svn: 302545
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 5 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 17 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 77316b9ad12..38c1b2676df 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -2989,6 +2989,11 @@ Optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() { return AvailabilitySpec(ConsumeToken()); } else { // Parse the platform name. + if (Tok.is(tok::code_completion)) { + Actions.CodeCompleteAvailabilityPlatformName(); + cutOffParsing(); + return None; + } if (Tok.isNot(tok::identifier)) { Diag(Tok, diag::err_avail_query_expected_platform_name); return None; diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index cfac3f1dc1d..dba916e0b99 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -7811,6 +7811,23 @@ void Sema::CodeCompleteNaturalLanguage() { nullptr, 0); } +void Sema::CodeCompleteAvailabilityPlatformName() { + ResultBuilder Results(*this, CodeCompleter->getAllocator(), + CodeCompleter->getCodeCompletionTUInfo(), + CodeCompletionContext::CCC_Other); + Results.EnterNewScope(); + static const char *Platforms[] = {"macOS", "iOS", "watchOS", "tvOS"}; + for (const char *Platform : llvm::makeArrayRef(Platforms)) { + Results.AddResult(CodeCompletionResult(Platform)); + Results.AddResult(CodeCompletionResult(Results.getAllocator().CopyString( + Twine(Platform) + "ApplicationExtension"))); + } + Results.ExitScope(); + HandleCodeCompleteResults(this, CodeCompleter, + CodeCompletionContext::CCC_Other, Results.data(), + Results.size()); +} + void Sema::GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo, SmallVectorImpl<CodeCompletionResult> &Results) { |

