diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-11-19 01:08:35 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-11-19 01:08:35 +0000 |
commit | d3c6854153fd6bc6a412a29e4491dbd0a47bdb14 (patch) | |
tree | 6ebb79f2018d2e29f67e446809b9f094405de389 /lib/Parse/ParseObjc.cpp | |
parent | 58588943a8283baf17815d56275bdb381560970c (diff) |
Improve code completion for Objective-C message sends, so that we
provide completion results before each keyword argument, e.g.,
[foo Method:arg WithArg1:arg1 WithArg2:arg2]
We now complete before "WithArg1" and before "WithArg2", in addition
to completing before "Method".
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89290 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseObjc.cpp')
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index fa14bb9a52..9943428bc5 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -1632,11 +1632,14 @@ Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, ExprArg ReceiverExpr) { if (Tok.is(tok::code_completion)) { if (ReceiverName) - Actions.CodeCompleteObjCClassMessage(CurScope, ReceiverName, NameLoc); + Actions.CodeCompleteObjCClassMessage(CurScope, ReceiverName, NameLoc, + 0, 0); else - Actions.CodeCompleteObjCInstanceMessage(CurScope, ReceiverExpr.get()); + Actions.CodeCompleteObjCInstanceMessage(CurScope, ReceiverExpr.get(), + 0, 0); ConsumeToken(); } + // Parse objc-selector SourceLocation Loc; IdentifierInfo *selIdent = ParseObjCSelectorPiece(Loc); @@ -1674,6 +1677,19 @@ Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, // We have a valid expression. KeyExprs.push_back(Res.release()); + // Code completion after each argument. + if (Tok.is(tok::code_completion)) { + if (ReceiverName) + Actions.CodeCompleteObjCClassMessage(CurScope, ReceiverName, NameLoc, + KeyIdents.data(), + KeyIdents.size()); + else + Actions.CodeCompleteObjCInstanceMessage(CurScope, ReceiverExpr.get(), + KeyIdents.data(), + KeyIdents.size()); + ConsumeToken(); + } + // Check for another keyword selector. selIdent = ParseObjCSelectorPiece(Loc); if (!selIdent && Tok.isNot(tok::colon)) |