]> granicus.if.org Git - clang/commitdiff
Give the Objective-C _cmd an "unlikely" code completion priority; it's
authorDouglas Gregor <dgregor@apple.com>
Sat, 18 Sep 2010 15:16:27 +0000 (15:16 +0000)
committerDouglas Gregor <dgregor@apple.com>
Sat, 18 Sep 2010 15:16:27 +0000 (15:16 +0000)
very rarely used.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114286 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Sema/CodeCompleteConsumer.h
lib/Sema/CodeCompleteConsumer.cpp
test/Index/complete-exprs.m [new file with mode: 0644]

index 9a388a294bf8b20011cbbe1817eedfa5797b815e..c251cedaf3f7fd783cba9588b3efc7dfa1abe587 100644 (file)
@@ -59,7 +59,10 @@ enum {
   CCP_NestedNameSpecifier = 75,
   /// \brief Priority for a result that isn't likely to be what the user wants,
   /// but is included for completeness.
-  CCP_Unlikely = 80
+  CCP_Unlikely = 80,
+  
+  /// \brief Priority for the Objective-C "_cmd" implicit parameter.
+  CCP_ObjC_cmd = CCP_Unlikely
 };
 
 /// \brief Priority value deltas that are added to code-completion results
index 58a1627b478aa87efed53fa09c499666b2031711..3322782d8732e2d4a256183e49a2eb69e05a53e4 100644 (file)
@@ -389,8 +389,15 @@ unsigned CodeCompletionResult::getPriorityFromDecl(NamedDecl *ND) {
   
   // Context-based decisions.
   DeclContext *DC = ND->getDeclContext()->getRedeclContext();
-  if (DC->isFunctionOrMethod() || isa<BlockDecl>(DC))
+  if (DC->isFunctionOrMethod() || isa<BlockDecl>(DC)) {
+    // _cmd is relatively rare
+    if (ImplicitParamDecl *ImplicitParam = dyn_cast<ImplicitParamDecl>(ND))
+      if (ImplicitParam->getIdentifier() &&
+          ImplicitParam->getIdentifier()->isStr("_cmd"))
+        return CCP_ObjC_cmd;
+    
     return CCP_LocalDeclaration;
+  }
   if (DC->isRecord() || isa<ObjCContainerDecl>(DC))
     return CCP_MemberDeclaration;
   
@@ -399,6 +406,7 @@ unsigned CodeCompletionResult::getPriorityFromDecl(NamedDecl *ND) {
     return CCP_Constant;
   if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND))
     return CCP_Type;
+  
   return CCP_Declaration;
 }
 
diff --git a/test/Index/complete-exprs.m b/test/Index/complete-exprs.m
new file mode 100644 (file)
index 0000000..0171803
--- /dev/null
@@ -0,0 +1,15 @@
+@interface A
+- (int)method:(id)param1;
+
+@property int prop1;
+@end
+
+@implementation A
+- (int)method:(id)param1 {
+  
+}
+@end
+
+// RUN: c-index-test -code-completion-at=%s:9:2 %s | FileCheck -check-prefix=CHECK-CC1 %s
+// CHECK-CC1: NotImplemented:{ResultType SEL}{TypedText _cmd} (80)
+// CHECK-CC1: NotImplemented:{ResultType A *}{TypedText self} (8)