1 // Note: the run lines follow their respective tests, since line/column numbers 2 // matter in this test. 3 4 /// This is T1. 5 template<typename T> 6 void T1(T t) { } 7 8 /// This is T2. 9 template<typename T> 10 void T2(T t) { } 11 12 /// This is T2<int>. 13 template<> 14 void T2(int t) { } 15 16 void test_CC1() { 17 18 } 19 20 // Check that implicit instantiations of class templates and members pick up 21 // comments from class templates and specializations. 22 23 /// This is T3. 24 template<typename T> 25 class T3 { 26 public: 27 /// This is T4. 28 static void T4(); 29 30 /// This is T5. 31 static int T5; 32 33 /// This is T6. 34 void T6(); 35 36 /// This is T7. 37 int T7; 38 39 /// This is T8. 40 class T8 {}; 41 42 /// This is T9. 43 enum T9 { 44 /// This is T10. 45 T10 46 }; 47 48 /// This is T11. 49 template<typename U> 50 void T11(U t) {} 51 52 typedef T3<double> T12; 53 }; 54 55 void test_CC2_CC3_CC4() { 56 T3<int>::T4(); 57 T3<int> t3; 58 t3.T6(); 59 T3<int>::T8 t8; 60 } 61 62 /// This is T100. 63 template<typename T, typename U> 64 class T100 { 65 }; 66 67 /// This is T100<int, T>. 68 template<typename T> 69 class T100<int, T> { 70 public: 71 /// This is T101. 72 static void T101(); 73 74 /// This is T102. 75 static int T102; 76 77 /// This is T103. 78 void T103(); 79 80 /// This is T104. 81 int T104; 82 83 /// This is T105. 84 class T105 {}; 85 86 /// This is T106. 87 enum T106 { 88 /// This is T107. 89 T107 90 }; 91 92 /// This is T108. 93 template<typename U> 94 void T108(U t) {} 95 96 typedef T100<double, T> T109; 97 98 typedef T100<double, double> T110; 99 }; 100 101 void test_CC5_CC6_CC7() { 102 T100<int, long>::T101(); 103 T100<int, long> t100; 104 t100.T103(); 105 T100<int, long>::T105 t105; 106 } 107 108 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:17:1 %s | FileCheck -check-prefix=CHECK-CC1 %s 109 // CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T1}{{.*}}(brief comment: This is T1.) 110 // CHECK-CC1: FunctionTemplate:{ResultType void}{TypedText T2}{{.*}}(brief comment: This is T2.) 111 112 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:56:12 %s | FileCheck -check-prefix=CHECK-CC2 %s 113 // CHECK-CC2: CXXMethod:{ResultType void}{TypedText T4}{{.*}}(brief comment: This is T4.) 114 // CHECK-CC2: VarDecl:{ResultType int}{TypedText T5}{{.*}}(brief comment: This is T5.) 115 116 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:58:6 %s | FileCheck -check-prefix=CHECK-CC3 %s 117 // CHECK-CC3: FunctionTemplate:{ResultType void}{TypedText T11}{{.*}}(brief comment: This is T11.) 118 // CHECK-CC3: CXXMethod:{ResultType void}{TypedText T6}{{.*}}(brief comment: This is T6.) 119 // CHECK-CC3: FieldDecl:{ResultType int}{TypedText T7}{{.*}}(brief comment: This is T7.) 120 121 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:59:12 %s | FileCheck -check-prefix=CHECK-CC4 %s 122 // CHECK-CC4: EnumConstantDecl:{ResultType T3<int>::T9}{TypedText T10}{{.*}}(brief comment: This is T10.) 123 // FIXME: after we implement propagating comments through typedefs, this 124 // typedef for implicit instantiation should pick up the documentation 125 // comment from class template. 126 // CHECK-CC4: TypedefDecl:{TypedText T12} 127 // CHECK-CC4-SHOULD-BE: TypedefDecl:{TypedText T12}{{.*}}(brief comment: This is T3.) 128 // CHECK-CC4: ClassDecl:{TypedText T8}{{.*}}(brief comment: This is T8.) 129 // CHECK-CC4: EnumDecl:{TypedText T9}{{.*}}(brief comment: This is T9.) 130 131 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:102:20 %s | FileCheck -check-prefix=CHECK-CC5 %s 132 // CHECK-CC5: CXXMethod:{ResultType void}{TypedText T101}{{.*}}(brief comment: This is T101.) 133 // CHECK-CC5: VarDecl:{ResultType int}{TypedText T102}{{.*}}(brief comment: This is T102.) 134 135 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:104:8 %s | FileCheck -check-prefix=CHECK-CC6 %s 136 // CHECK-CC6: CXXMethod:{ResultType void}{TypedText T103}{{.*}}(brief comment: This is T103.) 137 // CHECK-CC6: FieldDecl:{ResultType int}{TypedText T104}{{.*}}(brief comment: This is T104.) 138 // CHECK-CC6: FunctionTemplate:{ResultType void}{TypedText T108}{{.*}}(brief comment: This is T108.) 139 140 // RUN: env CINDEXTEST_COMPLETION_BRIEF_COMMENTS=1 c-index-test -code-completion-at=%s:105:20 %s | FileCheck -check-prefix=CHECK-CC7 %s 141 // CHECK-CC7: ClassDecl:{TypedText T105}{{.*}}(brief comment: This is T105.) 142 // CHECK-CC7: EnumDecl:{TypedText T106}{{.*}}(brief comment: This is T106.) 143 // CHECK-CC7: EnumConstantDecl:{ResultType T100<int, long>::T106}{TypedText T107}{{.*}}(brief comment: This is T107.) 144 // FIXME: after we implement propagating comments through typedefs, these two 145 // typedefs for implicit instantiations should pick up the documentation 146 // comment from class template. 147 // CHECK-CC7: TypedefDecl:{TypedText T109} 148 // CHECK-CC7: TypedefDecl:{TypedText T110} 149 // CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T109}{{.*}}(brief comment: This is T100.) 150 // CHECK-CC7-SHOULD-BE: TypedefDecl:{TypedText T110}{{.*}}(brief comment: This is T100.) 151 152