xref: /llvm-project/clang-tools-extra/test/clang-doc/templates.cpp (revision 2b932bc111c0d96db7044b0a854d7ad763710df2)
1 // RUN: rm -rf %t
2 // RUN: mkdir %t
3 
4 // RUN: clang-doc --doxygen --executor=standalone %s -output=%t/docs
5 // RUN: cat %t/docs/index.yaml | FileCheck %s --check-prefix=YAML
6 
7 // RUN: clang-doc --doxygen --executor=standalone %s -output=%t/docs --format=md
8 // RUN: cat %t/docs/GlobalNamespace/index.md | FileCheck %s --check-prefix=MD
9 
10 // YAML: ---
11 // YAML-NEXT: USR:             '{{([0-9A-F]{40})}}'
12 // YAML-NEXT: ChildRecords:
13 // YAML-NEXT:   - Type:            Record
14 // YAML-NEXT:     Name:            'tuple'
15 // YAML-NEXT:     QualName:        'tuple'
16 // YAML-NEXT:     USR:             '{{([0-9A-F]{40})}}'
17 // YAML-NEXT:     Path:            'GlobalNamespace'
18 
19 // MD: # Global Namespace
20 // MD: ## Functions
21 
22 template<class... T>
23 void ParamPackFunction(T... args);
24 
25 // YAML-NEXT: ChildFunctions:
26 // YAML-NEXT:  - USR:             '{{([0-9A-F]{40})}}'
27 // YAML-NEXT:    Name:            'ParamPackFunction'
28 // YAML-NEXT:    Location:
29 // YAML-NEXT:      - LineNumber:      [[# @LINE - 6]]
30 // YAML-NEXT:        Filename:        '{{.*}}'
31 // YAML-NEXT:    Params:
32 // YAML-NEXT:      - Type:
33 // YAML-NEXT:          Name:            'T...'
34 // YAML-NEXT:          QualName:        'T...'
35 // YAML-NEXT:        Name:            'args'
36 // YAML-NEXT:    ReturnType:
37 // YAML-NEXT:      Type:
38 // YAML-NEXT:        Name:            'void'
39 // YAML-NEXT:        QualName:        'void'
40 // YAML-NEXT:    Template:
41 // YAML-NEXT:      Params:
42 // YAML-NEXT:        - Contents:        'class... T'
43 
44 // MD: ### ParamPackFunction
45 // MD: *void ParamPackFunction(T... args)*
46 
47 template<typename T, int U = 1>
48 void function(T x) {}
49 
50 // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
51 // YAML-NEXT:     Name:            'function'
52 // YAML-NEXT:     DefLocation:
53 // YAML-NEXT:       LineNumber:      [[# @LINE - 5]]
54 // YAML-NEXT:       Filename:        '{{.*}}'
55 // YAML-NEXT:     Params:
56 // YAML-NEXT:       - Type:
57 // YAML-NEXT:           Name:            'T'
58 // YAML-NEXT:           QualName:        'T'
59 // YAML-NEXT:         Name:            'x'
60 // YAML-NEXT:     ReturnType:
61 // YAML-NEXT:       Type:
62 // YAML-NEXT:         Name:            'void'
63 // YAML-NEXT:         QualName:        'void'
64 // YAML-NEXT:     Template:
65 // YAML-NEXT:       Params:
66 // YAML-NEXT:         - Contents:        'typename T'
67 // YAML-NEXT:         - Contents:        'int U = 1'
68 
69 // MD: ### function
70 // MD: *void function(T x)*
71 // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 23]]*
72 
73 template<>
74 void function<bool, 0>(bool x) {}
75 
76 // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
77 // YAML-NEXT:     Name:            'function'
78 // YAML-NEXT:     DefLocation:
79 // YAML-NEXT:       LineNumber:      [[# @LINE - 6]]
80 // YAML-NEXT:       Filename:        '{{.*}}'
81 // YAML-NEXT:     Params:
82 // YAML-NEXT:       - Type:
83 // YAML-NEXT:           Name:            'bool'
84 // YAML-NEXT:           QualName:        'bool'
85 // YAML-NEXT:         Name:            'x'
86 // YAML-NEXT:     ReturnType:
87 // YAML-NEXT:       Type:
88 // YAML-NEXT:         Name:            'void'
89 // YAML-NEXT:         QualName:        'void'
90 // YAML-NEXT:     Template:
91 // YAML-NEXT:       Specialization:
92 // YAML-NEXT:         SpecializationOf: '{{([0-9A-F]{40})}}'
93 // YAML-NEXT:         Params:
94 // YAML-NEXT:           - Contents:        'bool'
95 // YAML-NEXT:           - Contents:        '0'
96 
97 // MD: ### function
98 // MD: *void function(bool x)*
99 // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 26]]*
100 
101 /// A Tuple type
102 ///
103 /// Does Tuple things.
104 template<typename ...Tys>
105 struct tuple{};
106 
107 /// A function with a tuple parameter
108 ///
109 /// \param t The input to func_with_tuple_param
110 tuple<int,int,bool> func_with_tuple_param(tuple<int,int,bool> t){ return t;}
111 
112 // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
113 // YAML-NEXT:    Name:            'func_with_tuple_param'
114 // YAML-NEXT:    Description:
115 // YAML-NEXT:      - Kind:            'FullComment'
116 // YAML-NEXT:        Children:
117 // YAML-NEXT:          - Kind:            'ParagraphComment'
118 // YAML-NEXT:            Children:
119 // YAML-NEXT:              - Kind:            'TextComment'
120 // YAML-NEXT:                Text:            ' A function with a tuple parameter'
121 // YAML-NEXT:          - Kind:            'ParagraphComment'
122 // YAML-NEXT:            Children:
123 // YAML-NEXT:              - Kind:            'TextComment'
124 // YAML-NEXT:          - Kind:            'ParamCommandComment'
125 // YAML-NEXT:            Direction:       '[in]'
126 // YAML-NEXT:            ParamName:       't'
127 // YAML-NEXT:            Children:
128 // YAML-NEXT:              - Kind:            'ParagraphComment'
129 // YAML-NEXT:                Children:
130 // YAML-NEXT:                  - Kind:            'TextComment'
131 // YAML-NEXT:                    Text:            ' The input to func_with_tuple_param'
132 // YAML-NEXT:    DefLocation:
133 // YAML-NEXT:      LineNumber:      [[# @LINE - 23]]
134 // YAML-NEXT:      Filename:
135 // YAML-NEXT:    Params:
136 // YAML-NEXT:      - Type:
137 // YAML-NEXT:          Type:            Record
138 // YAML-NEXT:          Name:            'tuple'
139 // YAML-NEXT:          QualName:        'tuple<int, int, bool>'
140 // YAML-NEXT:          USR:             '{{([0-9A-F]{40})}}'
141 // YAML-NEXT:          Path:            'GlobalNamespace'
142 // YAML-NEXT:        Name:            't'
143 // YAML-NEXT:    ReturnType:
144 // YAML-NEXT:      Type:
145 // YAML-NEXT:        Type:            Record
146 // YAML-NEXT:        Name:            'tuple'
147 // YAML-NEXT:        QualName:        'tuple<int, int, bool>'
148 // YAML-NEXT:        USR:             '{{([0-9A-F]{40})}}'
149 // YAML-NEXT:        Path:            'GlobalNamespace'
150 // YAML-NEXT: ...
151 
152 // MD: ### func_with_tuple_param
153 // MD: *tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t)*
154 // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 44]]*
155 // MD:  A function with a tuple parameter
156 // MD: **t** The input to func_with_tuple_param
157 
158