Author: dgregor
Date: Mon Oct 18 16:05:04 2010
New Revision: 116746
URL: http://llvm.org/viewvc/llvm-project?rev=116746&view=rev
Log:
Introduce code completion results for Objective-C methods, both when
declaring methods and when sending messages to them, by bringing all
of the selector into TypedCheck chunks in the completion result. This
way, we can improve the sorting of these results to account for the
full selector name rather than just the first chunk.
Modified:
cfe/trunk/lib/Sema/SemaCodeComplete.cpp
cfe/trunk/test/Index/complete-method-decls.m
cfe/trunk/test/Index/complete-objc-message.m
cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp
Modified: cfe/trunk/lib/Sema/SemaCodeComplete.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCodeComplete.cpp?rev=116746&r1=116745&r2=116746&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaCodeComplete.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCodeComplete.cpp Mon Oct 18 16:05:04 2010
@@ -2306,10 +2306,8 @@
Keyword += ":";
if (Idx < StartParameter || AllParametersAreInformative)
Result->AddInformativeChunk(Keyword);
- else if (Idx == StartParameter)
+ else
Result->AddTypedTextChunk(Keyword);
- else
- Result->AddTextChunk(Keyword);
}
// If we're before the starting parameter, skip the placeholder.
@@ -2523,6 +2521,7 @@
typedef CodeCompletionResult Result;
Results.EnterNewScope();
+
for (Preprocessor::macro_iterator M = PP.macro_begin(),
MEnd = PP.macro_end();
M != MEnd; ++M) {
@@ -2531,7 +2530,9 @@
PP.getLangOptions(),
TargetTypeIsPointer)));
}
+
Results.ExitScope();
+
}
static void AddPrettyFunctionResults(const LangOptions &LangOpts,
@@ -2539,6 +2540,7 @@
typedef CodeCompletionResult Result;
Results.EnterNewScope();
+
Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
Results.AddResult(Result("__FUNCTION__", CCP_Constant));
if (LangOpts.C99 || LangOpts.CPlusPlus0x)
@@ -5300,11 +5302,11 @@
P != PEnd; (void)++P, ++I) {
// Add the part of the selector name.
if (I == 0)
- Pattern->AddChunk(CodeCompletionString::CK_Colon);
+ Pattern->AddTypedTextChunk(":");
else if (I < Sel.getNumArgs()) {
Pattern->AddChunk(CodeCompletionString::CK_HorizontalSpace);
- Pattern->AddTextChunk(Sel.getIdentifierInfoForSlot(I)->getName());
- Pattern->AddChunk(CodeCompletionString::CK_Colon);
+ Pattern->AddTypedTextChunk((Sel.getIdentifierInfoForSlot(I)->getName()
+ + ":").str());
} else
break;
Modified: cfe/trunk/test/Index/complete-method-decls.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-method-decls.m?rev=116746&r1=116745&r2=116746&view=diff
==============================================================================
--- cfe/trunk/test/Index/complete-method-decls.m (original)
+++ cfe/trunk/test/Index/complete-method-decls.m Mon Oct 18 16:05:04 2010
@@ -64,45 +64,45 @@
// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText abc}
// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText getInt}
// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText getSelf}
-// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithInt}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text x}
-// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithTwoInts}{Colon :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{Text second}{Colon :}{LeftParen (}{Text
int}{RightParen )}{Text y}
+// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithInt}{TypedText :}{LeftParen (}{Text int}{RightParen
)}{Text x}
+// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithTwoInts}{TypedText :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{TypedText second:}{LeftParen (}{Text
int}{RightParen )}{Text y}
// RUN: c-index-test -code-completion-at=%s:17:7 %s | FileCheck
-check-prefix=CHECK-CC2 %s
// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText abc}
// CHECK-CC2-NEXT: ObjCInstanceMethodDecl:{TypedText getSelf}
-// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithInt}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}
-// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{Text
second}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text y}
+// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}
+// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{TypedText
second:}{LeftParen (}{Text int}{RightParen )}{Text y}
// RUN: c-index-test -code-completion-at=%s:24:7 %s | FileCheck
-check-prefix=CHECK-CC3 %s
// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText abc}
// CHECK-CC3-NEXT: ObjCInstanceMethodDecl:{TypedText getSelf}
// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText init}
-// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithInt}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}
-// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{Text
second}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text y}
+// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}
+// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{TypedText
second:}{LeftParen (}{Text int}{RightParen )}{Text y}
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:33:3 %s | FileCheck -check-prefix=CHECK-CC4 %s
// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText abc}{HorizontalSpace }{LeftBrace {}{VerticalSpace }{Text
return}{HorizontalSpace }{Placeholder expression}{SemiColon ;}{VerticalSpace
}{RightBrace }} (32)
// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText getInt}{HorizontalSpace }{LeftBrace {}{VerticalSpace
// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText getSecondValue}{HorizontalSpace }{LeftBrace {}{VerticalSpace
// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText getSelf}{HorizontalSpace }{LeftBrace {}{VerticalSpace }{Text
return}{HorizontalSpace }{Placeholder expression}{SemiColon ;}{VerticalSpace
}{RightBrace }} (30)
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithInt}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text
x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithTwoInts}{Colon :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{Text second}{Colon :}{LeftParen (}{Text
int}{RightParen )}{Text y}{HorizontalSpace }{LeftBrace {}{VerticalSpace
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText setValue}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text
x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithInt}{TypedText :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText initWithTwoInts}{TypedText :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{TypedText second:}{LeftParen (}{Text
int}{RightParen )}{Text y}{HorizontalSpace }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText setValue}{TypedText :}{LeftParen (}{Text int}{RightParen )}{Text
x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:33:8 %s | FileCheck -check-prefix=CHECK-CC5 %s
// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText getInt}{HorizontalSpace
}{LeftBrace {}{VerticalSpace
// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText
getSecondValue}{HorizontalSpace }{LeftBrace {}{VerticalSpace
// CHECK-CC5-NOT: {TypedText getSelf}{HorizontalSpace }{LeftBrace
{}{VerticalSpace
-// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText setValue}{Colon :}{LeftParen
(}{Text int}{RightParen )}{Text x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
+// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText setValue}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{LeftBrace
{}{VerticalSpace
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:37:7 %s | FileCheck -check-prefix=CHECK-CC6 %s
// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText abc}{HorizontalSpace
}{LeftBrace {}{VerticalSpace
// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText getSelf}{HorizontalSpace
}{LeftBrace {}{VerticalSpace }{Text return}{HorizontalSpace }{Placeholder
expression}{SemiColon ;}{VerticalSpace }{RightBrace }} (30)
-// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithInt}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{LeftBrace
{}{VerticalSpace
-// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{Colon
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{Text
second}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text y}{HorizontalSpace
}{LeftBrace {}{VerticalSpace
+// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{LeftBrace
{}{VerticalSpace
+// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace }{TypedText
second:}{LeftParen (}{Text int}{RightParen )}{Text y}{HorizontalSpace
}{LeftBrace {}{VerticalSpace
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:42:3 %s | FileCheck -check-prefix=CHECK-CC7 %s
// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText abc}{HorizontalSpace }{LeftBrace {}{VerticalSpace }{Text
return}{HorizontalSpace }{Placeholder expression}{SemiColon ;}{VerticalSpace
}{RightBrace }} (32)
-// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText categoryFunction}{Colon :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
+// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText categoryFunction}{TypedText :}{LeftParen (}{Text int}{RightParen
)}{Text x}{HorizontalSpace }{LeftBrace {}{VerticalSpace
// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen
)}{TypedText getSelf}{HorizontalSpace }{LeftBrace {}{VerticalSpace }{Text
return}{HorizontalSpace }{Placeholder expression}{SemiColon ;}{VerticalSpace
}{RightBrace }} (32)
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:52:21 %s | FileCheck -check-prefix=CHECK-CC8 %s
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType id}{Informative
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace }{Text
third:}{Text (double)z} (20)
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType void *}{Informative
first:}{TypedText second3:}{Text (float)y3}{HorizontalSpace }{Text
third:}{Text (double)z} (20)
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second:}{Text (float)y}{HorizontalSpace }{Text third:}{Text
(double)z} (5)
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType id}{Informative
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace }{TypedText
third:}{Text (double)z} (20)
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType void *}{Informative
first:}{TypedText second3:}{Text (float)y3}{HorizontalSpace }{TypedText
third:}{Text (double)z} (20)
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second:}{Text (float)y}{HorizontalSpace }{TypedText
third:}{Text (double)z} (5)
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:52:19 %s | FileCheck -check-prefix=CHECK-CC9 %s
// CHECK-CC9: NotImplemented:{TypedText x} (30)
// CHECK-CC9: NotImplemented:{TypedText xx} (30)
@@ -110,15 +110,14 @@
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test
-code-completion-at=%s:52:36 %s | FileCheck -check-prefix=CHECK-CCA %s
// CHECK-CCA: NotImplemented:{TypedText y2} (30)
// RUN: c-index-test -code-completion-at=%s:56:3 %s | FileCheck
-check-prefix=CHECK-CCB %s
-// CHECK-CCB: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText first}{Colon :}{LeftParen (}{Text int}{RightParen )}{Text
x}{HorizontalSpace }{Text second2}{Colon :}{LeftParen (}{Text
float}{RightParen )}{Text y}{HorizontalSpace }{Text third}{Colon :}{LeftParen
(}{Text double}{RightParen )}{Text z} (30)
+// CHECK-CCB: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen
)}{TypedText first}{TypedText :}{LeftParen (}{Text int}{RightParen )}{Text
x}{HorizontalSpace }{TypedText second2:}{LeftParen (}{Text float}{RightParen
)}{Text y}{HorizontalSpace }{TypedText third:}{LeftParen (}{Text
double}{RightParen )}{Text z} (30)
// RUN: c-index-test -code-completion-at=%s:56:8 %s | FileCheck
-check-prefix=CHECK-CCC %s
-// CHECK-CCC: ObjCInstanceMethodDecl:{TypedText first}{Colon :}{LeftParen
(}{Text int}{RightParen )}{Text x}{HorizontalSpace }{Text second2}{Colon
:}{LeftParen (}{Text float}{RightParen )}{Text y}{HorizontalSpace }{Text
third}{Colon :}{LeftParen (}{Text double}{RightParen )}{Text z} (30)
+// CHECK-CCC: ObjCInstanceMethodDecl:{TypedText first}{TypedText :}{LeftParen
(}{Text int}{RightParen )}{Text x}{HorizontalSpace }{TypedText
second2:}{LeftParen (}{Text float}{RightParen )}{Text y}{HorizontalSpace
}{TypedText third:}{LeftParen (}{Text double}{RightParen )}{Text z} (30)
// RUN: c-index-test -code-completion-at=%s:56:21 %s | FileCheck
-check-prefix=CHECK-CCD %s
-// FIXME: These results could be more precise.
-// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType id}{Informative
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace }{Text
third:}{Text (double)z} (20)
-// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second2:}{Text (float)y}{HorizontalSpace }{Text third:}{Text
(double)z} (5)
-// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType void *}{Informative
first:}{TypedText second3:}{Text (float)y3}{HorizontalSpace }{Text
third:}{Text (double)z} (20)
-// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second:}{Text (float)y}{HorizontalSpace }{Text third:}{Text
(double)z} (5)
+// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType id}{Informative
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace }{TypedText
third:}{Text (double)z} (20)
+// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second2:}{Text (float)y}{HorizontalSpace }{TypedText
third:}{Text (double)z} (5)
+// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType void *}{Informative
first:}{TypedText second3:}{Text (float)y3}{HorizontalSpace }{TypedText
third:}{Text (double)z} (20)
+// CHECK-CCD: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{TypedText second:}{Text (float)y}{HorizontalSpace }{TypedText
third:}{Text (double)z} (5)
// RUN: c-index-test -code-completion-at=%s:56:38 %s | FileCheck
-check-prefix=CHECK-CCE %s
// CHECK-CCE: ObjCInstanceMethodDecl:{ResultType id}{Informative
first:}{Informative second2:}{TypedText third:}{Text (double)z} (20)
// CHECK-CCE: ObjCInstanceMethodDecl:{ResultType int}{Informative
first:}{Informative second2:}{TypedText third:}{Text (double)z} (5)
Modified: cfe/trunk/test/Index/complete-objc-message.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/complete-objc-message.m?rev=116746&r1=116745&r2=116746&view=diff
==============================================================================
--- cfe/trunk/test/Index/complete-objc-message.m (original)
+++ cfe/trunk/test/Index/complete-objc-message.m Mon Oct 18 16:05:04 2010
@@ -152,7 +152,7 @@
// RUN: c-index-test -code-completion-at=%s:23:19 %s | FileCheck
-check-prefix=CHECK-CC1 %s
// CHECK-CC1: {TypedText categoryClassMethod}
-// CHECK-CC1: {TypedText classMethod1:}{Placeholder (id)}{HorizontalSpace
}{Text withKeyword:}{Placeholder (int)}
+// CHECK-CC1: {TypedText classMethod1:}{Placeholder (id)}{HorizontalSpace
}{TypedText withKeyword:}{Placeholder (int)}
// CHECK-CC1: {TypedText classMethod2}
// CHECK-CC1: {TypedText new}
// CHECK-CC1: {TypedText protocolClassMethod}
@@ -164,10 +164,10 @@
// CHECK-CC3: ObjCClassMethodDecl:{ResultType int}{TypedText
MyClassMethod:}{Placeholder (id)}
// CHECK-CC3: ObjCClassMethodDecl:{ResultType int}{TypedText MyPrivateMethod}
// RUN: c-index-test -code-completion-at=%s:65:16 %s | FileCheck
-check-prefix=CHECK-CC4 %s
-// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{Text second:}{Placeholder
(id)}
+// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{TypedText
second:}{Placeholder (id)}
// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyPrivateInstMethod}
// RUN: c-index-test -code-completion-at=%s:74:9 %s | FileCheck
-check-prefix=CHECK-CC5 %s
-// CHECK-CC5: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{Text second:}{Placeholder
(id)}
+// CHECK-CC5: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{TypedText
second:}{Placeholder (id)}
// CHECK-CC5: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MySubInstMethod}
// RUN: c-index-test -code-completion-at=%s:82:8 %s | FileCheck
-check-prefix=CHECK-CC6 %s
// CHECK-CC6: ObjCInstanceMethodDecl:{ResultType id}{TypedText
protocolInstanceMethod:}{Placeholder (int)}
@@ -175,15 +175,15 @@
// RUN: c-index-test -code-completion-at=%s:95:8 %s | FileCheck
-check-prefix=CHECK-CC7 %s
// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method}
// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (int)}
-// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text Arg2:}{Placeholder (int)}
-// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text OtherArg:}{Placeholder (id)}
-// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text SomeArg:}{Placeholder
(int)}{HorizontalSpace }{Text OtherArg:}{Placeholder (id)}
-// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text Arg2:}{Placeholder (int)}
+// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText Arg1:}{Placeholder
(int)}{HorizontalSpace }{TypedText Arg2:}{Placeholder (int)}
+// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText Arg1:}{Placeholder
(int)}{HorizontalSpace }{TypedText OtherArg:}{Placeholder (id)}
+// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText
SomeArg:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
+// CHECK-CC7: ObjCInstanceMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{TypedText
Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText Arg2:}{Placeholder (int)}
// RUN: c-index-test -code-completion-at=%s:95:17 %s | FileCheck
-check-prefix=CHECK-CC8 %s
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText
Arg2:}{Placeholder (int)}
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
+// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText }
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{Text
Arg2:}{Placeholder (int)}
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{Text
OtherArg:}{Placeholder (id)}
-// CHECK-CC8: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace }{Text
OtherArg:}{Placeholder (id)}
// RUN: c-index-test -code-completion-at=%s:95:24 %s | FileCheck
-check-prefix=CHECK-CC9 %s
// CHECK-CC9: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{Informative Arg1:}{TypedText Arg2:}{Placeholder (int)}
// CHECK-CC9: ObjCInstanceMethodDecl:{ResultType int}{Informative
Method:}{Informative Arg1:}{TypedText OtherArg:}{Placeholder (id)}
@@ -203,15 +203,15 @@
// RUN: c-index-test -code-completion-at=%s:116:14 %s | FileCheck
-check-prefix=CHECK-CCC %s
// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText Method}
// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (int)}
-// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text Arg2:}{Placeholder (int)}
-// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text OtherArg:}{Placeholder (id)}
-// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{Text SomeArg:}{Placeholder
(int)}{HorizontalSpace }{Text OtherArg:}{Placeholder (id)}
-// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text Arg2:}{Placeholder (int)}
+// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText Arg1:}{Placeholder
(int)}{HorizontalSpace }{TypedText Arg2:}{Placeholder (int)}
+// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText Arg1:}{Placeholder
(int)}{HorizontalSpace }{TypedText OtherArg:}{Placeholder (id)}
+// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (float)}{HorizontalSpace }{TypedText
SomeArg:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
+// CHECK-CCC: ObjCClassMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{TypedText
Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText Arg2:}{Placeholder (int)}
// RUN: c-index-test -code-completion-at=%s:116:23 %s | FileCheck
-check-prefix=CHECK-CCD %s
+// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText
Arg2:}{Placeholder (int)}
+// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
+// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace }{TypedText
OtherArg:}{Placeholder (id)}
// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText }
-// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{Text
Arg2:}{Placeholder (int)}
-// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText Arg1:}{Placeholder (int)}{HorizontalSpace }{Text
OtherArg:}{Placeholder (id)}
-// CHECK-CCD: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{TypedText SomeArg:}{Placeholder (int)}{HorizontalSpace }{Text
OtherArg:}{Placeholder (id)}
// RUN: c-index-test -code-completion-at=%s:116:30 %s | FileCheck
-check-prefix=CHECK-CCE %s
// CHECK-CCE: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{Informative Arg1:}{TypedText Arg2:}{Placeholder (int)}
// CHECK-CCE: ObjCClassMethodDecl:{ResultType int}{Informative
Method:}{Informative Arg1:}{TypedText OtherArg:}{Placeholder (id)}
@@ -228,7 +228,7 @@
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText
categoryInstanceMethod}
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText instanceMethod1}
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText Method}
-// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{Text second:}{Placeholder
(id)}
+// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyInstMethod:}{Placeholder (id)}{HorizontalSpace }{TypedText
second:}{Placeholder (id)}
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MyPrivateInstMethod}
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType int}{TypedText
MySubInstMethod}
// CHECK-CCG: ObjCInstanceMethodDecl:{ResultType id}{TypedText
protocolInstanceMethod:}{Placeholder (int)}
@@ -236,7 +236,7 @@
// RUN: c-index-test -code-completion-at=%s:121:14 %s | FileCheck
-check-prefix=CHECK-CCG %s
// RUN: c-index-test -code-completion-at=%s:122:7 %s | FileCheck
-check-prefix=CHECK-CCH %s
// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText
categoryClassMethod}
-// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
classMethod1:}{Placeholder (id)}{HorizontalSpace }{Text
withKeyword:}{Placeholder (int)}
+// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
classMethod1:}{Placeholder (id)}{HorizontalSpace }{TypedText
withKeyword:}{Placeholder (int)}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType void}{TypedText classMethod2}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText Method}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
Method:}{Placeholder (int)}
@@ -245,7 +245,7 @@
// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText MySubClassMethod}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
MySubPrivateMethod}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText new}
-// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{Text Arg1:}{Placeholder
(int)}{HorizontalSpace }{Text Arg2:}{Placeholder (int)}
+// CHECK-CCH: ObjCClassMethodDecl:{ResultType int}{TypedText
OtherMethod:}{Placeholder (float)}{HorizontalSpace }{TypedText
Arg1:}{Placeholder (int)}{HorizontalSpace }{TypedText Arg2:}{Placeholder (int)}
// CHECK-CCH: ObjCClassMethodDecl:{ResultType id}{TypedText
protocolClassMethod}
// RUN: c-index-test -code-completion-at=%s:134:6 %s | FileCheck
-check-prefix=CHECK-CCI %s
// CHECK-CCI: ObjCInstanceMethodDecl:{ResultType void}{TypedText method1} (22)
Modified: cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp?rev=116746&r1=116745&r2=116746&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp (original)
+++ cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp Mon Oct 18 16:05:04 2010
@@ -523,6 +523,49 @@
} // end extern "C"
+/// \brief Simple utility function that appends a \p New string to the given
+/// \p Old string, using the \p Buffer for storage.
+///
+/// \param Old The string to which we are appending. This parameter will be
+/// updated to reflect the complete string.
+///
+///
+/// \param New The string to append to \p Old.
+///
+/// \param Buffer A buffer that stores the actual, concatenated string. It will
+/// be used if the old string is already-non-empty.
+static void AppendToString(llvm::StringRef &Old, llvm::StringRef New,
+ llvm::SmallString<256> &Buffer) {
+ if (Old.empty()) {
+ Old = New;
+ return;
+ }
+
+ if (Buffer.empty())
+ Buffer.append(Old.begin(), Old.end());
+ Buffer.append(New.begin(), New.end());
+ Old = Buffer.str();
+}
+
+/// \brief Get the typed-text blocks from the given code-completion string
+/// and return them as a single string.
+///
+/// \param String The code-completion string whose typed-text blocks will be
+/// concatenated.
+///
+/// \param Buffer A buffer used for storage of the completed name.
+static llvm::StringRef GetTypedName(CodeCompletionString *String,
+ llvm::SmallString<256> &Buffer) {
+ llvm::StringRef Result;
+ for (CodeCompletionString::iterator C = String->begin(), CEnd =
String->end();
+ C != CEnd; ++C) {
+ if (C->Kind == CodeCompletionString::CK_TypedText)
+ AppendToString(Result, C->Text, Buffer);
+ }
+
+ return Result;
+}
+
namespace {
struct OrderCompletionResults {
bool operator()(const CXCompletionResult &XR,
@@ -532,18 +575,21 @@
CXStoredCodeCompletionString *Y
= (CXStoredCodeCompletionString *)YR.CompletionString;
- const char *XText = X->getTypedText();
- const char *YText = Y->getTypedText();
- if (!XText || !YText)
- return XText != 0;
+ llvm::SmallString<256> XBuffer;
+ llvm::StringRef XText = GetTypedName(X, XBuffer);
+ llvm::SmallString<256> YBuffer;
+ llvm::StringRef YText = GetTypedName(Y, YBuffer);
- int result = llvm::StringRef(XText).compare_lower(YText);
+ if (XText.empty() || YText.empty())
+ return !XText.empty();
+
+ int result = XText.compare_lower(YText);
if (result < 0)
return true;
if (result > 0)
return false;
- result = llvm::StringRef(XText).compare(YText);
+ result = XText.compare(YText);
return result < 0;
}
};
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits