Code-completion for @public, @protected, @private, @package.
llvm-svn: 93361
This commit is contained in:
parent
fb40a8e5f1
commit
48d462573d
|
@ -2388,7 +2388,9 @@ public:
|
|||
/// \brief Code completion occurs within an Objective-C implementation or
|
||||
/// category implementation
|
||||
CCC_ObjCImplementation,
|
||||
/// \brief Code completion occurs within
|
||||
/// \brief Code completion occurs within the list of instance variables
|
||||
/// in an Objective-C interface, protocol, category, or implementation.
|
||||
CCC_ObjCInstanceVariableList,
|
||||
/// \brief Code completion occurs following one or more template
|
||||
/// headers.
|
||||
CCC_Template,
|
||||
|
@ -2531,6 +2533,9 @@ public:
|
|||
virtual void CodeCompleteObjCAtDirective(Scope *S, DeclPtrTy ObjCImpDecl,
|
||||
bool InInterface) { }
|
||||
|
||||
/// \brief Code completion after the '@' in the list of instance variables.
|
||||
virtual void CodeCompleteObjCAtVisibility(Scope *S) { }
|
||||
|
||||
/// \brief Code completion after the '@' in a statement.
|
||||
virtual void CodeCompleteObjCAtStatement(Scope *S) { }
|
||||
|
||||
|
|
|
@ -973,6 +973,12 @@ void Parser::ParseObjCClassInstanceVariables(DeclPtrTy interfaceDecl,
|
|||
// Set the default visibility to private.
|
||||
if (Tok.is(tok::at)) { // parse objc-visibility-spec
|
||||
ConsumeToken(); // eat the @ sign
|
||||
|
||||
if (Tok.is(tok::code_completion)) {
|
||||
Actions.CodeCompleteObjCAtVisibility(CurScope);
|
||||
ConsumeToken();
|
||||
}
|
||||
|
||||
switch (Tok.getObjCKeywordID()) {
|
||||
case tok::objc_private:
|
||||
case tok::objc_public:
|
||||
|
@ -987,6 +993,12 @@ void Parser::ParseObjCClassInstanceVariables(DeclPtrTy interfaceDecl,
|
|||
}
|
||||
}
|
||||
|
||||
if (Tok.is(tok::code_completion)) {
|
||||
Actions.CodeCompleteOrdinaryName(CurScope,
|
||||
Action::CCC_ObjCInstanceVariableList);
|
||||
ConsumeToken();
|
||||
}
|
||||
|
||||
struct ObjCIvarCallback : FieldCallback {
|
||||
Parser &P;
|
||||
DeclPtrTy IDecl;
|
||||
|
|
|
@ -3851,6 +3851,7 @@ public:
|
|||
|
||||
virtual void CodeCompleteObjCAtDirective(Scope *S, DeclPtrTy ObjCImpDecl,
|
||||
bool InInterface);
|
||||
virtual void CodeCompleteObjCAtVisibility(Scope *S);
|
||||
virtual void CodeCompleteObjCAtStatement(Scope *S);
|
||||
virtual void CodeCompleteObjCAtExpression(Scope *S);
|
||||
virtual void CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS);
|
||||
|
|
|
@ -893,6 +893,7 @@ static void AddFunctionSpecifiers(Action::CodeCompletionContext CCC,
|
|||
Results.MaybeAddResult(Result("inline", Rank));
|
||||
break;
|
||||
|
||||
case Action::CCC_ObjCInstanceVariableList:
|
||||
case Action::CCC_Expression:
|
||||
case Action::CCC_Statement:
|
||||
case Action::CCC_ForInit:
|
||||
|
@ -905,6 +906,10 @@ static void AddObjCExpressionResults(unsigned Rank, ResultBuilder &Results,
|
|||
bool NeedAt);
|
||||
static void AddObjCStatementResults(unsigned Rank, ResultBuilder &Results,
|
||||
bool NeedAt);
|
||||
static void AddObjCVisibilityResults(unsigned Rank,
|
||||
const LangOptions &LangOpts,
|
||||
ResultBuilder &Results,
|
||||
bool NeedAt);
|
||||
static void AddObjCImplementationResults(unsigned Rank,
|
||||
const LangOptions &LangOpts,
|
||||
ResultBuilder &Results,
|
||||
|
@ -1053,6 +1058,10 @@ static void AddOrdinaryNameResults(Action::CodeCompletionContext CCC,
|
|||
AddFunctionSpecifiers(CCC, SemaRef.getLangOptions(), Rank, Results);
|
||||
break;
|
||||
|
||||
case Action::CCC_ObjCInstanceVariableList:
|
||||
AddObjCVisibilityResults(Rank, SemaRef.getLangOptions(), Results, true);
|
||||
break;
|
||||
|
||||
case Action::CCC_Statement: {
|
||||
Results.MaybeAddResult(Result("typedef", Rank));
|
||||
|
||||
|
@ -1971,6 +1980,7 @@ void Sema::CodeCompleteOrdinaryName(Scope *S,
|
|||
case CCC_Class:
|
||||
case CCC_ObjCInterface:
|
||||
case CCC_ObjCImplementation:
|
||||
case CCC_ObjCInstanceVariableList:
|
||||
case CCC_Template:
|
||||
case CCC_MemberTemplate:
|
||||
Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
|
||||
|
@ -2672,8 +2682,27 @@ static void AddObjCStatementResults(unsigned Rank, ResultBuilder &Results,
|
|||
Results.MaybeAddResult(Result(Pattern, 0));
|
||||
}
|
||||
|
||||
void Sema::CodeCompleteObjCAtStatement(Scope *S) {
|
||||
static void AddObjCVisibilityResults(unsigned Rank,
|
||||
const LangOptions &LangOpts,
|
||||
ResultBuilder &Results,
|
||||
bool NeedAt) {
|
||||
typedef CodeCompleteConsumer::Result Result;
|
||||
Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,private), Rank));
|
||||
Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,protected), Rank));
|
||||
Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,public), Rank));
|
||||
if (LangOpts.ObjC2)
|
||||
Results.MaybeAddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,package), Rank));
|
||||
}
|
||||
|
||||
void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
|
||||
ResultBuilder Results(*this);
|
||||
Results.EnterNewScope();
|
||||
AddObjCVisibilityResults(0, getLangOptions(), Results, false);
|
||||
Results.ExitScope();
|
||||
HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
|
||||
}
|
||||
|
||||
void Sema::CodeCompleteObjCAtStatement(Scope *S) {
|
||||
ResultBuilder Results(*this);
|
||||
Results.EnterNewScope();
|
||||
AddObjCStatementResults(0, Results, false);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Run lines are at the end, since line/column matter in this test. */
|
||||
@interface MyClass { }
|
||||
@interface MyClass { @public }
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
|
@ -44,3 +44,16 @@
|
|||
// CHECK-CC5: ObjCInterfaceDecl:{TypedText MyClass}
|
||||
// CHECK-CC5: TypedefDecl:{TypedText SEL}
|
||||
// CHECK-CC5: NotImplemented:{TypedText _Bool}
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:2:23 %s | FileCheck -check-prefix=CHECK-CC6 %s
|
||||
// CHECK-CC6: NotImplemented:{TypedText package}
|
||||
// CHECK-CC6: NotImplemented:{TypedText private}
|
||||
// CHECK-CC6: NotImplemented:{TypedText protected}
|
||||
// CHECK-CC6: NotImplemented:{TypedText public}
|
||||
|
||||
// RUN: c-index-test -code-completion-at=%s:2:22 %s | FileCheck -check-prefix=CHECK-CC7 %s
|
||||
// CHECK-CC7: NotImplemented:{TypedText @package}
|
||||
// CHECK-CC7: NotImplemented:{TypedText @private}
|
||||
// CHECK-CC7: NotImplemented:{TypedText @protected}
|
||||
// CHECK-CC7: NotImplemented:{TypedText @public}
|
||||
// CHECK-CC7: NotImplemented:{TypedText _Bool}
|
||||
|
|
Loading…
Reference in New Issue