code-completion.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Code-completion through the C interface
  2. #include "nonexistent_header.h"
  3. struct X {
  4. int member;
  5. enum E { Val1 };
  6. };
  7. struct Y {
  8. float member;
  9. void memfunc(int i = 17);
  10. };
  11. struct Z : X, Y {
  12. double member;
  13. operator int() const;
  14. };
  15. struct W { };
  16. struct Z get_Z();
  17. namespace N { }
  18. void test_Z() {
  19. // RUN: c-index-test -code-completion-at=%s:23:11 %s | FileCheck -check-prefix=CHECK-MEMBER %s
  20. get_Z().member = 17;
  21. }
  22. float& overloaded(int i, long second);
  23. double& overloaded(float f, int second);
  24. int& overloaded(Z z, int second);
  25. void test_overloaded() {
  26. // RUN: c-index-test -code-completion-at=%s:33:18 %s | FileCheck -check-prefix=CHECK-OVERLOAD %s
  27. overloaded(Z(), 0);
  28. }
  29. Z::operator int() const {
  30. return 0;
  31. }
  32. // CHECK-MEMBER: FieldDecl:{ResultType double}{TypedText member}
  33. // CHECK-MEMBER: FieldDecl:{ResultType int}{Text X::}{TypedText member}
  34. // CHECK-MEMBER: FieldDecl:{ResultType float}{Text Y::}{TypedText member}
  35. // CHECK-MEMBER: CXXMethod:{ResultType void}{Informative Y::}{TypedText memfunc}{LeftParen (}{Optional {Placeholder int i}}{RightParen )}
  36. // CHECK-MEMBER: CXXConversion:{TypedText operator int}{LeftParen (}{RightParen )}{Informative const}
  37. // CHECK-MEMBER: CXXMethod:{ResultType Z &}{TypedText operator=}{LeftParen (}{Placeholder const Z &}{RightParen )}
  38. // CHECK-MEMBER: CXXMethod:{ResultType X &}{Text X::}{TypedText operator=}{LeftParen (}{Placeholder const X &}{RightParen )}
  39. // CHECK-MEMBER: CXXMethod:{ResultType Y &}{Text Y::}{TypedText operator=}{LeftParen (}{Placeholder const Y &}{RightParen )}
  40. // CHECK-MEMBER: EnumConstantDecl:{ResultType X::E}{Informative E::}{TypedText Val1}
  41. // CHECK-MEMBER: StructDecl:{TypedText X}{Text ::}
  42. // CHECK-MEMBER: StructDecl:{TypedText Y}{Text ::}
  43. // CHECK-MEMBER: StructDecl:{TypedText Z}{Text ::}
  44. // CHECK-MEMBER: CXXDestructor:{ResultType void}{Informative X::}{TypedText ~X}{LeftParen (}{RightParen )}
  45. // CHECK-MEMBER: CXXDestructor:{ResultType void}{Informative Y::}{TypedText ~Y}{LeftParen (}{RightParen )}
  46. // CHECK-MEMBER: CXXDestructor:{ResultType void}{TypedText ~Z}{LeftParen (}{RightParen )}
  47. // CHECK-MEMBER: Completion contexts:
  48. // CHECK-MEMBER-NEXT: Dot member access
  49. // CHECK-MEMBER-NEXT: Container Kind: StructDecl
  50. // CHECK-MEMBER-NEXT: Container is complete
  51. // CHECK-MEMBER-NEXT: Container USR: c:@S@Z
  52. // CHECK-OVERLOAD: OverloadCandidate:{ResultType int &}{Text overloaded}{LeftParen (}{Placeholder Z z}{Comma , }{CurrentParameter int second}{RightParen )}
  53. // CHECK-OVERLOAD: OverloadCandidate:{ResultType float &}{Text overloaded}{LeftParen (}{Placeholder int i}{Comma , }{CurrentParameter long second}{RightParen )}
  54. // CHECK-OVERLOAD: OverloadCandidate:{ResultType double &}{Text overloaded}{LeftParen (}{Placeholder float f}{Comma , }{CurrentParameter int second}{RightParen )}
  55. // CHECK-OVERLOAD: Completion contexts:
  56. // CHECK-OVERLOAD-NEXT: Any type
  57. // CHECK-OVERLOAD-NEXT: Any value
  58. // CHECK-OVERLOAD-NEXT: Enum tag
  59. // CHECK-OVERLOAD-NEXT: Union tag
  60. // CHECK-OVERLOAD-NEXT: Struct tag
  61. // CHECK-OVERLOAD-NEXT: Class name
  62. // CHECK-OVERLOAD-NEXT: Nested name specifier
  63. // CHECK-OVERLOAD-NEXT: Objective-C interface
  64. // RUN: c-index-test -code-completion-at=%s:37:10 %s | FileCheck -check-prefix=CHECK-EXPR %s
  65. // CHECK-EXPR: NotImplemented:{TypedText int} (50)
  66. // CHECK-EXPR: NotImplemented:{TypedText long} (50)
  67. // CHECK-EXPR: FieldDecl:{ResultType double}{TypedText member} (17)
  68. // CHECK-EXPR: FieldDecl:{ResultType int}{Text X::}{TypedText member} (9)
  69. // CHECK-EXPR: FieldDecl:{ResultType float}{Text Y::}{TypedText member} (18)
  70. // CHECK-EXPR: CXXMethod:{ResultType void}{TypedText memfunc}{LeftParen (}{Optional {Placeholder int i}}{RightParen )} (37)
  71. // CHECK-EXPR: Namespace:{TypedText N}{Text ::} (75)
  72. // CHECK-EXPR: Completion contexts:
  73. // CHECK-EXPR-NEXT: Any type
  74. // CHECK-EXPR-NEXT: Any value
  75. // CHECK-EXPR-NEXT: Enum tag
  76. // CHECK-EXPR-NEXT: Union tag
  77. // CHECK-EXPR-NEXT: Struct tag
  78. // CHECK-EXPR-NEXT: Class name
  79. // CHECK-EXPR-NEXT: Nested name specifier
  80. // CHECK-EXPR-NEXT: Objective-C interface