Skip to content

Commit

Permalink
[libclang] Expose completion result kind in CXCompletionResult
Browse files Browse the repository at this point in the history
This allows clients of libclang to check whether a completion result is a keyword. Previously, keywords had `CursorKind == CXCursor_NotImplemented` and it wasn't trivial to distinguish a keyword from a pattern.

This change moves `CodeCompletionResult::ResultKind` to `clang-c` under a new name `CXCompletionResultKind`. It also tweaks `c-index-test` to print the result kind instead of `NotImplemented`, and adjusts the tests for the new output.

rdar://91852088

Differential Revision: https://reviews.llvm.org/D136844
  • Loading branch information
egorzhdan committed Nov 11, 2022
1 parent 48321ee commit 97105e5
Show file tree
Hide file tree
Showing 25 changed files with 297 additions and 234 deletions.
30 changes: 27 additions & 3 deletions clang/include/clang-c/Index.h
Expand Up @@ -2080,6 +2080,23 @@ enum CXCursorKind {
CXCursor_OverloadCandidate = 700
};

/**
* Describes the kind of result generated.
*/
enum CXCompletionResultKind {
/** Refers to a declaration. */
CXCompletionResult_Declaration = 0,

/** Refers to a keyword or symbol. */
CXCompletionResult_Keyword = 1,

/** Refers to a macro. */
CXCompletionResult_Macro = 2,

/** Refers to a precomputed pattern. */
CXCompletionResult_Pattern = 3
};

/**
* A cursor representing some element in the abstract syntax tree for
* a translation unit.
Expand Down Expand Up @@ -4588,6 +4605,8 @@ CINDEX_LINKAGE void clang_disposeTokens(CXTranslationUnit TU, CXToken *Tokens,
*/

/* for debug/testing */
CINDEX_LINKAGE CXString
clang_getCompletionResultKindSpelling(enum CXCompletionResultKind Kind);
CINDEX_LINKAGE CXString clang_getCursorKindSpelling(enum CXCursorKind Kind);
CINDEX_LINKAGE void clang_getDefinitionSpellingAndExtent(
CXCursor, const char **startBuf, const char **endBuf, unsigned *startLine,
Expand Down Expand Up @@ -4631,12 +4650,17 @@ typedef void *CXCompletionString;
* A single result of code completion.
*/
typedef struct {
/**
* The kind of this completion result.
* Useful to distinguish between declarations and keywords.
*/
enum CXCompletionResultKind ResultKind;

/**
* The kind of entity that this completion refers to.
*
* The cursor kind will be a macro, keyword, or a declaration (one of the
* *Decl cursor kinds), describing the entity that the completion is
* referring to.
* The cursor kind will be a macro or a declaration (one of the *Decl cursor
* kinds), describing the entity that the completion is referring to.
*
* \todo In the future, we would like to provide a full cursor, to allow
* the client to extract additional information from declaration.
Expand Down
6 changes: 3 additions & 3 deletions clang/test/Index/arc-complete.m
Expand Up @@ -8,9 +8,9 @@ void test(id x) {

// RUN: c-index-test -code-completion-at=%s:4:4 %s -fobjc-arc -fobjc-nonfragile-abi | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: macro definition:{TypedText __autoreleasing} (70)
// CHECK-CC1: NotImplemented:{TypedText __bridge}{HorizontalSpace }{Placeholder type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: NotImplemented:{TypedText __bridge_retained}{HorizontalSpace }{Placeholder CF type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: NotImplemented:{TypedText __bridge_transfer}{HorizontalSpace }{Placeholder Objective-C type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: Pattern:{TypedText __bridge}{HorizontalSpace }{Placeholder type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: Pattern:{TypedText __bridge_retained}{HorizontalSpace }{Placeholder CF type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: Pattern:{TypedText __bridge_transfer}{HorizontalSpace }{Placeholder Objective-C type}{RightParen )}{Placeholder expression} (40)
// CHECK-CC1: macro definition:{TypedText __strong} (70)
// CHECK-CC1: macro definition:{TypedText __unsafe_unretained} (70)
// CHECK-CC1: macro definition:{TypedText __weak} (70)
4 changes: 2 additions & 2 deletions clang/test/Index/code-completion.cpp
Expand Up @@ -82,8 +82,8 @@ void test_template_alias() {
// CHECK-OVERLOAD-NEXT: Objective-C interface

// RUN: c-index-test -code-completion-at=%s:37:10 %s | FileCheck -check-prefix=CHECK-EXPR %s
// CHECK-EXPR: NotImplemented:{TypedText int} (50)
// CHECK-EXPR: NotImplemented:{TypedText long} (50)
// CHECK-EXPR: Keyword:{TypedText int} (50)
// CHECK-EXPR: Keyword:{TypedText long} (50)
// CHECK-EXPR: FieldDecl:{ResultType double}{TypedText member} (17)
// CHECK-EXPR: FieldDecl:{ResultType int}{Text X::}{TypedText member} (9)
// CHECK-EXPR: FieldDecl:{ResultType float}{Text Y::}{TypedText member} (18)
Expand Down
30 changes: 15 additions & 15 deletions clang/test/Index/complete-at-directives.m
Expand Up @@ -24,12 +24,12 @@ @implementation MyClass
// CHECK-CC3: {TypedText synthesize}{HorizontalSpace }{Placeholder property}

// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test -code-completion-at=%s:2:1 %s | FileCheck -check-prefix=CHECK-CC4 %s
// CHECK-CC4: NotImplemented:{TypedText @class}{HorizontalSpace }{Placeholder name}
// CHECK-CC4: NotImplemented:{TypedText @compatibility_alias}{HorizontalSpace }{Placeholder alias}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: NotImplemented:{TypedText @implementation}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: NotImplemented:{TypedText @interface}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: NotImplemented:{TypedText @protocol}{HorizontalSpace }{Placeholder protocol}
// CHECK-CC4: NotImplemented:{TypedText _Bool}
// CHECK-CC4: Pattern:{TypedText @class}{HorizontalSpace }{Placeholder name}
// CHECK-CC4: Pattern:{TypedText @compatibility_alias}{HorizontalSpace }{Placeholder alias}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: Pattern:{TypedText @implementation}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: Pattern:{TypedText @interface}{HorizontalSpace }{Placeholder class}
// CHECK-CC4: Pattern:{TypedText @protocol}{HorizontalSpace }{Placeholder protocol}
// CHECK-CC4: Keyword:{TypedText _Bool}
// CHECK-CC4: TypedefDecl:{TypedText Class}
// CHECK-CC4: TypedefDecl:{TypedText id}
// CHECK-CC4: TypedefDecl:{TypedText SEL}
Expand All @@ -41,14 +41,14 @@ @implementation MyClass
// CHECK-CC5: {TypedText @required}

// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 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}
// CHECK-CC6: Keyword:{TypedText package}
// CHECK-CC6: Keyword:{TypedText private}
// CHECK-CC6: Keyword:{TypedText protected}
// CHECK-CC6: Keyword:{TypedText public}

// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 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}
// CHECK-CC7: Keyword:{TypedText @package}
// CHECK-CC7: Keyword:{TypedText @private}
// CHECK-CC7: Keyword:{TypedText @protected}
// CHECK-CC7: Keyword:{TypedText @public}
// CHECK-CC7: Keyword:{TypedText _Bool}
26 changes: 13 additions & 13 deletions clang/test/Index/complete-at-exprstmt.m
Expand Up @@ -31,25 +31,25 @@ void f() {
// CHECK-CC2: {TypedText protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
// CHECK-CC2: {TypedText selector}{LeftParen (}{Placeholder selector}{RightParen )}
// RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test -code-completion-at=%s:9:3 %s | FileCheck -check-prefix=CHECK-CC3 %s
// CHECK-CC3: NotImplemented:{ResultType char[]}{TypedText @encode}{LeftParen (}{Placeholder type-name}{RightParen )}
// CHECK-CC3: NotImplemented:{ResultType Protocol *}{TypedText @protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
// CHECK-CC3: NotImplemented:{ResultType SEL}{TypedText @selector}{LeftParen (}{Placeholder selector}{RightParen )}
// CHECK-CC3: NotImplemented:{TypedText @synchronized}{HorizontalSpace }{LeftParen (}{Placeholder expression}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}
// CHECK-CC3: NotImplemented:{TypedText @throw}{HorizontalSpace }{Placeholder expression}
// CHECK-CC3: NotImplemented:{TypedText @try}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @catch}{LeftParen (}{Placeholder parameter}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @finally}{LeftBrace {}{Placeholder statements}{RightBrace }}
// CHECK-CC3: NotImplemented:{ResultType SEL}{TypedText _cmd}
// CHECK-CC3: Pattern:{ResultType char[]}{TypedText @encode}{LeftParen (}{Placeholder type-name}{RightParen )}
// CHECK-CC3: Pattern:{ResultType Protocol *}{TypedText @protocol}{LeftParen (}{Placeholder protocol-name}{RightParen )}
// CHECK-CC3: Pattern:{ResultType SEL}{TypedText @selector}{LeftParen (}{Placeholder selector}{RightParen )}
// CHECK-CC3: Pattern:{TypedText @synchronized}{HorizontalSpace }{LeftParen (}{Placeholder expression}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}
// CHECK-CC3: Pattern:{TypedText @throw}{HorizontalSpace }{Placeholder expression}
// CHECK-CC3: Pattern:{TypedText @try}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @catch}{LeftParen (}{Placeholder parameter}{RightParen )}{LeftBrace {}{Placeholder statements}{RightBrace }}{Text @finally}{LeftBrace {}{Placeholder statements}{RightBrace }}
// CHECK-CC3: Declaration:{ResultType SEL}{TypedText _cmd}
// CHECK-CC3: ParmDecl:{ResultType int}{TypedText arg}
// CHECK-CC3: TypedefDecl:{TypedText Class}
// CHECK-CC3: TypedefDecl:{TypedText id}
// CHECK-CC3: ObjCIvarDecl:{ResultType int}{TypedText ivar}
// CHECK-CC3: ObjCInterfaceDecl:{TypedText MyClass}
// CHECK-CC3: TypedefDecl:{TypedText SEL}
// CHECK-CC3: NotImplemented:{ResultType MyClass *}{TypedText self}
// CHECK-CC3: Declaration:{ResultType MyClass *}{TypedText self}
// RUN: c-index-test -code-completion-at=%s:19:13 %s | FileCheck -check-prefix=CHECK-CC4 %s
// CHECK-CC4: NotImplemented:{TypedText add:to:} (40)
// CHECK-CC4: NotImplemented:{TypedText add:to:plus:} (40)
// CHECK-CC4: NotImplemented:{TypedText myMethod:} (40)
// CHECK-CC4: Pattern:{TypedText add:to:} (40)
// CHECK-CC4: Pattern:{TypedText add:to:plus:} (40)
// CHECK-CC4: Pattern:{TypedText myMethod:} (40)
// RUN: c-index-test -code-completion-at=%s:19:17 %s | FileCheck -check-prefix=CHECK-CC5 %s
// CHECK-CC5: NotImplemented:{Informative add:}{TypedText to:} (40)
// CHECK-CC5: NotImplemented:{Informative add:}{TypedText to:plus:} (40)
// CHECK-CC5: Pattern:{Informative add:}{TypedText to:} (40)
// CHECK-CC5: Pattern:{Informative add:}{TypedText to:plus:} (40)

24 changes: 12 additions & 12 deletions clang/test/Index/complete-declarators.cpp
Expand Up @@ -16,28 +16,28 @@ struct Z {

// RUN: c-index-test -code-completion-at=%s:8:5 %s | FileCheck -check-prefix=CHECK-CC1 %s
// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:8:5 %s | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: NotImplemented:{TypedText const} (40)
// CHECK-CC1: Keyword:{TypedText const} (40)
// CHECK-CC1: Namespace:{TypedText N}{Text ::} (75)
// CHECK-CC1: NotImplemented:{TypedText operator} (40)
// CHECK-CC1: NotImplemented:{TypedText volatile} (40)
// CHECK-CC1: Keyword:{TypedText operator} (40)
// CHECK-CC1: Keyword:{TypedText volatile} (40)
// RUN: c-index-test -code-completion-at=%s:8:11 %s | FileCheck -check-prefix=CHECK-CC2 %s
// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:8:11 %s | FileCheck -check-prefix=CHECK-CC2 %s
// CHECK-CC2: NotImplemented:{TypedText const} (40)
// CHECK-CC2: Keyword:{TypedText const} (40)
// CHECK-CC2-NOT: Namespace:{TypedText N}{Text ::} (75)
// CHECK-CC2-NOT: NotImplemented:{TypedText operator} (40)
// CHECK-CC2: NotImplemented:{TypedText volatile} (40)
// CHECK-CC2-NOT: Keyword:{TypedText operator} (40)
// CHECK-CC2: Keyword:{TypedText volatile} (40)
// RUN: c-index-test -code-completion-at=%s:13:7 %s | FileCheck -check-prefix=CHECK-CC3 %s
// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:13:7 %s | FileCheck -check-prefix=CHECK-CC3 %s
// CHECK-CC3: NotImplemented:{TypedText const} (40)
// CHECK-CC3: Keyword:{TypedText const} (40)
// CHECK-CC3-NOT: Namespace:{TypedText N}{Text ::} (75)
// CHECK-CC3: NotImplemented:{TypedText operator} (40)
// CHECK-CC3: NotImplemented:{TypedText volatile} (40)
// CHECK-CC3: Keyword:{TypedText operator} (40)
// CHECK-CC3: Keyword:{TypedText volatile} (40)
// RUN: c-index-test -code-completion-at=%s:14:14 %s | FileCheck -check-prefix=CHECK-CC4 %s
// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:14:14 %s | FileCheck -check-prefix=CHECK-CC4 %s
// CHECK-CC4: NotImplemented:{TypedText const} (40)
// CHECK-CC4: Keyword:{TypedText const} (40)
// CHECK-CC4: Namespace:{TypedText N}{Text ::} (75)
// CHECK-CC4: NotImplemented:{TypedText operator} (40)
// CHECK-CC4: NotImplemented:{TypedText volatile} (40)
// CHECK-CC4: Keyword:{TypedText operator} (40)
// CHECK-CC4: Keyword:{TypedText volatile} (40)
// CHECK-CC4: StructDecl:{TypedText Y}{Text ::} (75)
// CHECK-CC4: StructDecl:{TypedText Z}{Text ::} (75)

70 changes: 35 additions & 35 deletions clang/test/Index/complete-declarators.m
Expand Up @@ -26,62 +26,62 @@ - (boid)method2 {}
@end

// RUN: c-index-test -code-completion-at=%s:7:4 %s | FileCheck -check-prefix=CHECK-CC0 %s
// CHECK-CC0: NotImplemented:{TypedText IBAction}{RightParen )}{Placeholder selector}{Colon :}{LeftParen (}{Text id}{RightParen )}{Text sender} (40)
// CHECK-CC0: Pattern:{TypedText IBAction}{RightParen )}{Placeholder selector}{Colon :}{LeftParen (}{Text id}{RightParen )}{Text sender} (40)
// CHECK-CC0: macro definition:{TypedText IBAction} (70)
// CHECK-CC0: macro definition:{TypedText IBOutlet} (70)
// CHECK-CC0: macro definition:{TypedText IBOutletCollection}{LeftParen (}{Placeholder ClassName}{RightParen )} (70)
// CHECK-CC0: TypedefDecl:{TypedText id} (50)
// CHECK-CC0: NotImplemented:{TypedText in} (40)
// CHECK-CC0: NotImplemented:{TypedText inout} (40)
// CHECK-CC0: NotImplemented:{TypedText instancetype} (40)
// CHECK-CC0: NotImplemented:{TypedText int} (50)
// CHECK-CC0: NotImplemented:{TypedText long} (50)
// CHECK-CC0: Keyword:{TypedText in} (40)
// CHECK-CC0: Keyword:{TypedText inout} (40)
// CHECK-CC0: Keyword:{TypedText instancetype} (40)
// CHECK-CC0: Keyword:{TypedText int} (50)
// CHECK-CC0: Keyword:{TypedText long} (50)
// RUN: c-index-test -code-completion-at=%s:7:19 %s | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1-NOT: NotImplemented:{TypedText extern} (40)
// CHECK-CC1: NotImplemented:{TypedText param1} (40)
// CHECK-CC1-NOT: Keyword:{TypedText extern} (40)
// CHECK-CC1: Pattern:{TypedText param1} (40)
// RUN: c-index-test -code-completion-at=%s:9:15 %s | FileCheck -check-prefix=CHECK-CC2 %s
// RUN: c-index-test -code-completion-at=%s:15:10 %s | FileCheck -check-prefix=CHECK-CC2 %s
// RUN: c-index-test -code-completion-at=%s:16:9 %s | FileCheck -check-prefix=CHECK-CC2 %s
// CHECK-CC2: NotImplemented:{TypedText const} (40)
// CHECK-CC2: Keyword:{TypedText const} (40)
// CHECK-CC2-NOT: int
// CHECK-CC2: NotImplemented:{TypedText restrict} (40)
// CHECK-CC2: NotImplemented:{TypedText volatile} (40)
// CHECK-CC2: Keyword:{TypedText restrict} (40)
// CHECK-CC2: Keyword:{TypedText volatile} (40)
// RUN: c-index-test -code-completion-at=%s:15:15 %s | FileCheck -check-prefix=CHECK-CC3 %s
// CHECK-CC3: ParmDecl:{ResultType id}{TypedText param1} (34)
// CHECK-CC3-NOT: VarDecl:{ResultType int}{TypedText q2}
// CHECK-CC3-NOT: VarDecl:{ResultType id}{TypedText q}
// CHECK-CC3: NotImplemented:{ResultType A *}{TypedText self} (34)
// CHECK-CC3: NotImplemented:{ResultType size_t}{TypedText sizeof}{LeftParen (}{Placeholder expression-or-type}{RightParen )} (40)
// CHECK-CC3: Declaration:{ResultType A *}{TypedText self} (34)
// CHECK-CC3: Pattern:{ResultType size_t}{TypedText sizeof}{LeftParen (}{Placeholder expression-or-type}{RightParen )} (40)
// RUN: c-index-test -code-completion-at=%s:15:15 %s | FileCheck -check-prefix=CHECK-CC4 %s
// CHECK-CC4: ParmDecl:{ResultType id}{TypedText param1} (34)
// CHECK-CC4-NOT: VarDecl:{ResultType int}{TypedText q2}
// CHECK-CC4: NotImplemented:{ResultType A *}{TypedText self} (34)
// CHECK-CC4: NotImplemented:{ResultType size_t}{TypedText sizeof}{LeftParen (}{Placeholder expression-or-type}{RightParen )} (40)
// CHECK-CC4: Declaration:{ResultType A *}{TypedText self} (34)
// CHECK-CC4: Pattern:{ResultType size_t}{TypedText sizeof}{LeftParen (}{Placeholder expression-or-type}{RightParen )} (40)
// RUN: c-index-test -code-completion-at=%s:23:10 %s | FileCheck -check-prefix=CHECK-CC5 %s
// CHECK-CC5: NotImplemented:{TypedText _Bool} (50)
// CHECK-CC5: NotImplemented:{TypedText _Complex} (50)
// CHECK-CC5: NotImplemented:{TypedText _Imaginary} (50)
// CHECK-CC5: Keyword:{TypedText _Bool} (50)
// CHECK-CC5: Keyword:{TypedText _Complex} (50)
// CHECK-CC5: Keyword:{TypedText _Imaginary} (50)
// CHECK-CC5: ObjCInterfaceDecl:{TypedText A} (50)
// CHECK-CC5: NotImplemented:{TypedText char} (50)
// CHECK-CC5: Keyword:{TypedText char} (50)
// CHECK-CC5: TypedefDecl:{TypedText Class} (50)
// CHECK-CC5: NotImplemented:{TypedText const} (50)
// CHECK-CC5: NotImplemented:{TypedText double} (50)
// CHECK-CC5: NotImplemented:{TypedText enum} (50)
// CHECK-CC5: NotImplemented:{TypedText float} (50)
// CHECK-CC5: Keyword:{TypedText const} (50)
// CHECK-CC5: Keyword:{TypedText double} (50)
// CHECK-CC5: Keyword:{TypedText enum} (50)
// CHECK-CC5: Keyword:{TypedText float} (50)
// CHECK-CC5: TypedefDecl:{TypedText id} (50)
// CHECK-CC5: NotImplemented:{TypedText int} (50)
// CHECK-CC5: NotImplemented:{TypedText long} (50)
// CHECK-CC5: NotImplemented:{TypedText restrict} (50)
// CHECK-CC5: Keyword:{TypedText int} (50)
// CHECK-CC5: Keyword:{TypedText long} (50)
// CHECK-CC5: Keyword:{TypedText restrict} (50)
// CHECK-CC5: TypedefDecl:{TypedText SEL} (50)
// CHECK-CC5: NotImplemented:{TypedText short} (50)
// CHECK-CC5: NotImplemented:{TypedText signed} (50)
// CHECK-CC5: NotImplemented:{TypedText struct} (50)
// CHECK-CC5: NotImplemented:{TypedText typeof}{HorizontalSpace }{Placeholder expression} (40)
// CHECK-CC5: NotImplemented:{TypedText typeof}{LeftParen (}{Placeholder type}{RightParen )} (40)
// CHECK-CC5: NotImplemented:{TypedText union} (50)
// CHECK-CC5: NotImplemented:{TypedText unsigned} (50)
// CHECK-CC5: NotImplemented:{TypedText void} (50)
// CHECK-CC5: NotImplemented:{TypedText volatile} (50)
// CHECK-CC5: Keyword:{TypedText short} (50)
// CHECK-CC5: Keyword:{TypedText signed} (50)
// CHECK-CC5: Keyword:{TypedText struct} (50)
// CHECK-CC5: Pattern:{TypedText typeof}{HorizontalSpace }{Placeholder expression} (40)
// CHECK-CC5: Pattern:{TypedText typeof}{LeftParen (}{Placeholder type}{RightParen )} (40)
// CHECK-CC5: Keyword:{TypedText union} (50)
// CHECK-CC5: Keyword:{TypedText unsigned} (50)
// CHECK-CC5: Keyword:{TypedText void} (50)
// CHECK-CC5: Keyword:{TypedText volatile} (50)

// Check that there are no duplicate entries if we code-complete after an @implementation
// RUN: c-index-test -code-completion-at=%s:27:1 %s | FileCheck -check-prefix=CHECK-CC6 %s
Expand Down

0 comments on commit 97105e5

Please sign in to comment.