ffi_gen 0.7 → 0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/ffi_gen.rb +109 -64
  2. data/lib/ffi_gen/clang.rb +662 -441
  3. metadata +4 -4
@@ -64,26 +64,21 @@ class FFIGen
64
64
  symbol = ":#{@generator.to_ruby_lowercase constant_name[prefix_length..(-1 - suffix_length)]}"
65
65
  symbols << symbol
66
66
  definitions << " #{symbol}#{constant_value ? ", #{constant_value}" : ""}"
67
- description = constant_comment.split("\n").map { |line| @generator.prepare_comment_line line }
68
- symbol_descriptions << " # #{symbol}::\n # #{@generator.create_description_comment(description, ' # ', true)}"
69
- end
70
-
71
- enum_description = []
72
- @comment.split("\n").map do |line|
73
- enum_description << @generator.prepare_comment_line(line)
67
+ symbol_descriptions << " # #{symbol} ::\n # #{@generator.create_description_comment(constant_comment, ' # ', true)}\n"
74
68
  end
75
69
 
76
70
  str = ""
77
- str << @generator.create_description_comment(enum_description, ' # ')
78
- str << " # === Options:\n#{symbol_descriptions.join("\n")}\n #\n"
79
- str << " # @return [Array of Symbols]\n"
71
+ str << @generator.create_description_comment(@comment, ' # ')
72
+ str << " # \n"
73
+ str << " # === Options:\n#{symbol_descriptions.join} #\n"
74
+ str << " # @return [Array<Symbol>]\n"
80
75
  str << " def self.#{@generator.to_ruby_lowercase @name}_enum\n [#{symbols.join(', ')}]\n end\n"
81
76
  str << " enum :#{@generator.to_ruby_lowercase @name}, [\n#{definitions.join(",\n")}\n ]"
82
77
  str
83
78
  end
84
79
 
85
- def type_name
86
- "Symbol from #{@generator.to_ruby_lowercase @name}_enum"
80
+ def type_name(short)
81
+ short ? @name : "Symbol from #{@generator.to_ruby_lowercase @name}_enum"
87
82
  end
88
83
 
89
84
  def reference
@@ -94,23 +89,38 @@ class FFIGen
94
89
  class Struct
95
90
  attr_reader :fields
96
91
 
97
- def initialize(generator, name)
92
+ def initialize(generator, name, comment)
98
93
  @generator = generator
99
94
  @name = name
95
+ @comment = comment
100
96
  @fields = []
101
97
  end
102
98
 
103
99
  def to_s
104
- lines = @fields.map { |(field_name, field_type)| ":#{@generator.to_ruby_lowercase field_name}, #{@generator.to_ffi_type field_type}" }
105
- " class #{@generator.to_ruby_camelcase @name} < FFI::Struct\n layout #{lines.join(",\n ")}\n end"
100
+ field_definitions = []
101
+ field_descriptions = []
102
+ @fields.each do |(field_name, field_type, field_comment)|
103
+ symbol = ":#{@generator.to_ruby_lowercase field_name}"
104
+ field_definitions << "#{symbol}, #{@generator.to_ffi_type field_type}"
105
+ field_descriptions << " # #{symbol} ::\n # (#{@generator.to_type_name field_type}) #{@generator.create_description_comment(field_comment, ' # ', true)}\n"
106
+ end
107
+
108
+ str = ""
109
+ str << @generator.create_description_comment(@comment, ' # ')
110
+ str << " # \n"
111
+ str << " # = Fields:\n#{field_descriptions.join} #\n"
112
+ str << " class #{@generator.to_ruby_camelcase @name} < FFI::Struct\n"
113
+ str << " layout #{field_definitions.join(",\n ")}\n" unless @fields.empty?
114
+ str << " end"
115
+ str
106
116
  end
107
117
 
108
- def type_name
118
+ def type_name(short)
109
119
  @generator.to_ruby_camelcase @name
110
120
  end
111
121
 
112
122
  def reference
113
- "#{type_name}.by_value"
123
+ "#{type_name(false)}.by_value"
114
124
  end
115
125
  end
116
126
 
@@ -127,50 +137,55 @@ class FFIGen
127
137
  end
128
138
 
129
139
  def to_s
130
- str = ""
131
-
132
140
  ruby_name = @generator.to_ruby_lowercase @name
133
141
  ruby_parameters = @parameters.map do |(name, type)|
134
142
  ruby_param_type = @generator.to_type_name type
135
- ruby_param_name = @generator.to_ruby_lowercase(name.empty? ? ruby_param_type.split.last : name)
143
+ ruby_param_name = @generator.to_ruby_lowercase(name.empty? ? @generator.to_type_name(type, true) : name)
136
144
  [ruby_param_name, ruby_param_type, []]
137
145
  end
138
146
 
139
- signature = "[#{@parameters.map{ |(name, type)| @generator.to_ffi_type type }.join(', ')}], #{@generator.to_ffi_type @return_type}"
140
- if @is_callback
141
- str << " callback :#{ruby_name}, #{signature}"
142
- else
143
- function_description = []
144
- return_value_description = []
145
- current_description = function_description
146
- @comment.split("\n").map do |line|
147
- line = @generator.prepare_comment_line line
148
- if line.gsub! /\\param (.*?) /, ''
149
- index = @parameters.index { |(name, type)| name == $1 }
150
- if index
151
- current_description = ruby_parameters[index][2]
152
- else
153
- current_description << "#{$1}: "
154
- end
147
+ ffi_signature = "[#{@parameters.map{ |(name, type)| @generator.to_ffi_type type }.join(', ')}], #{@generator.to_ffi_type @return_type}"
148
+
149
+ function_description = []
150
+ return_value_description = []
151
+ current_description = function_description
152
+ @comment.split("\n").map do |line|
153
+ line = @generator.prepare_comment_line line
154
+ if line.gsub! /\\param (.*?) /, ''
155
+ index = @parameters.index { |(name, type)| name == $1 }
156
+ if index
157
+ current_description = ruby_parameters[index][2]
158
+ else
159
+ current_description << "#{$1}: "
155
160
  end
156
- current_description = return_value_description if line.gsub! '\\returns ', ''
157
- current_description << line
158
161
  end
159
-
160
- str << @generator.create_description_comment(function_description, ' # ')
161
- str << " # @method #{ruby_name}(#{ruby_parameters.map{ |(name, type, description)| name }.join(', ')})\n"
162
- ruby_parameters.each do |(name, type, description)|
163
- str << " # @param [#{type}] #{name} #{@generator.create_description_comment(description, ' # ', true)}\n"
164
- end
165
- str << " # @return [#{@generator.to_type_name @return_type}] #{@generator.create_description_comment(return_value_description, ' # ', true)}\n"
166
- str << " # @scope class\n"
167
- str << " attach_function :#{ruby_name}, :#{@name}, #{signature}"
162
+ current_description = return_value_description if line.gsub! '\\returns ', ''
163
+ current_description << line
164
+ end
165
+
166
+ str = ""
167
+ if @is_callback
168
+ str << " # <em>This is no real method. This entry is only for documentation of the callback.</em>\n"
169
+ str << " # \n"
170
+ end
171
+ str << @generator.create_description_comment(function_description, ' # ')
172
+ str << " # \n"
173
+ str << " # @method #{ruby_name}#{@is_callback ? '_callback' : ''}(#{ruby_parameters.map{ |(name, type, description)| name }.join(', ')})\n"
174
+ ruby_parameters.each do |(name, type, description)|
175
+ str << " # @param [#{type}] #{name} #{@generator.create_description_comment(description, ' # ', true)}\n"
176
+ end
177
+ str << " # @return [#{@generator.to_type_name @return_type}] #{@generator.create_description_comment(return_value_description, ' # ', true)}\n"
178
+ str << " # @scope class\n"
179
+ if @is_callback
180
+ str << " callback :#{ruby_name}, #{ffi_signature}"
181
+ else
182
+ str << " attach_function :#{ruby_name}, :#{@name}, #{ffi_signature}"
168
183
  end
169
184
  str
170
185
  end
171
186
 
172
- def type_name
173
- "Callback"
187
+ def type_name(short)
188
+ "Proc(#{@generator.to_ruby_lowercase @name}_callback)"
174
189
  end
175
190
 
176
191
  def reference
@@ -235,7 +250,9 @@ class FFIGen
235
250
 
236
251
  extent = Clang.get_cursor_extent declaration
237
252
  comment_range = Clang.get_range previous_declaration_end, Clang.get_range_start(extent)
238
- previous_declaration_end = Clang.get_range_end extent
253
+ unless declaration[:kind] == :enum_decl or declaration[:kind] == :struct_decl # keep comment for typedef_decl
254
+ previous_declaration_end = Clang.get_range_end extent
255
+ end
239
256
 
240
257
  next if not header_files.include? file
241
258
 
@@ -245,7 +262,7 @@ class FFIGen
245
262
  comment = extract_comment translation_unit, comment_range
246
263
 
247
264
  case declaration[:kind]
248
- when :enum_decl
265
+ when :enum_decl, :struct_decl
249
266
  read_named_declaration declaration, name, comment unless name.empty?
250
267
 
251
268
  when :function_decl
@@ -302,7 +319,6 @@ class FFIGen
302
319
  previous_constant_location = Clang.get_cursor_location declaration
303
320
  Clang.get_children(declaration).each do |enum_constant|
304
321
  constant_name = Clang.get_cursor_spelling(enum_constant).to_s_and_dispose
305
- constant_location = Clang.get_cursor_location enum_constant
306
322
 
307
323
  constant_value = nil
308
324
  value_cursor = Clang.get_children(enum_constant).first
@@ -319,6 +335,7 @@ class FFIGen
319
335
  next # skip those entries for now
320
336
  end
321
337
 
338
+ constant_location = Clang.get_cursor_location enum_constant
322
339
  constant_comment_range = Clang.get_range previous_constant_location, constant_location
323
340
  constant_comment = extract_comment translation_unit, constant_comment_range
324
341
  previous_constant_location = constant_location
@@ -327,13 +344,20 @@ class FFIGen
327
344
  end
328
345
 
329
346
  when :struct_decl
330
- struct = Struct.new self, name
347
+ struct = Struct.new self, name, comment
331
348
  @declarations[name] = struct
332
349
 
350
+ previous_field_location = Clang.get_cursor_location declaration
333
351
  Clang.get_children(declaration).each do |field_decl|
334
352
  field_name = Clang.get_cursor_spelling(field_decl).to_s_and_dispose
335
353
  field_type = Clang.get_cursor_type field_decl
336
- struct.fields << [field_name, field_type]
354
+
355
+ field_location = Clang.get_cursor_location field_decl
356
+ field_comment_range = Clang.get_range previous_field_location, field_location
357
+ field_comment = extract_comment translation_unit, field_comment_range
358
+ previous_field_location = field_location
359
+
360
+ struct.fields << [field_name, field_type, field_comment]
337
361
  end
338
362
  end
339
363
  end
@@ -383,10 +407,10 @@ class FFIGen
383
407
  end
384
408
  end
385
409
 
386
- def to_type_name(full_type)
410
+ def to_type_name(full_type, short = false)
387
411
  declaration = Clang.get_type_declaration full_type
388
412
  name = Clang.get_cursor_spelling(declaration).to_s_and_dispose
389
- return @declarations[name].type_name if @declarations.has_key? name
413
+ return @declarations[name].type_name(short) if @declarations.has_key? name
390
414
 
391
415
  canonical_type = Clang.get_canonical_type full_type
392
416
  case canonical_type[:kind]
@@ -398,13 +422,31 @@ class FFIGen
398
422
  pointee_type = Clang.get_pointee_type canonical_type
399
423
  if pointee_type[:kind] == :char_s
400
424
  "String"
401
- elsif not name.empty?
402
- "FFI::Pointer of #{to_ruby_camelcase name}"
403
425
  else
404
- pointee_declaration = Clang.get_type_declaration full_type
405
- pointee_name = Clang.get_cursor_spelling(pointee_declaration).to_s_and_dispose
406
- "FFI::Pointer to #{pointee_name}"
426
+ pointer_depth = 0
427
+ pointer_target_name = ""
428
+ current_type = full_type
429
+ loop do
430
+ declaration = Clang.get_type_declaration current_type
431
+ pointer_target_name = to_ruby_camelcase Clang.get_cursor_spelling(declaration).to_s_and_dispose
432
+ break if not pointer_target_name.empty?
433
+
434
+ case current_type[:kind]
435
+ when :pointer
436
+ pointer_depth += 1
437
+ current_type = Clang.get_pointee_type current_type
438
+ when :unexposed
439
+ break
440
+ else
441
+ pointer_target_name = Clang.get_type_kind_spelling(current_type[:kind]).to_s_and_dispose
442
+ break
443
+ end
444
+ end
445
+ short ? pointer_target_name : "FFI::Pointer(#{'*' * pointer_depth}#{pointer_target_name})"
407
446
  end
447
+ when :constant_array
448
+ element_type = Clang.get_array_element_type canonical_type
449
+ "Array<#{to_type_name element_type}>"
408
450
  else
409
451
  raise NotImplementedError, "No type name for type #{canonical_type[:kind]}"
410
452
  end
@@ -438,12 +480,15 @@ class FFIGen
438
480
  end
439
481
 
440
482
  def create_description_comment(description, line_prefix, inline_mode = false)
483
+ if description.is_a? String
484
+ description = description.split("\n").map { |line| prepare_comment_line(line) }
485
+ end
486
+
441
487
  description.shift while not description.empty? and description.first.strip.empty?
442
488
  description.pop while not description.empty? and description.last.strip.empty?
443
- return "" if description.empty?
489
+ description << "(Not documented)" if not inline_mode and description.empty?
444
490
 
445
491
  str = ""
446
- description << "" if not inline_mode # empty line at end
447
492
  description.each_with_index do |line, index|
448
493
  str << line_prefix if not inline_mode or index > 0
449
494
  str << line
@@ -466,6 +511,6 @@ if __FILE__ == $0
466
511
  cflags: `llvm-config --cflags`.split(" "),
467
512
  prefixes: ["clang_", "CX"],
468
513
  blacklist: ["clang_getExpansionLocation"],
469
- output: "ffi_gen/clang.rb"
514
+ output: File.join(File.dirname(__FILE__), "ffi_gen/clang.rb")
470
515
  )
471
516
  end
@@ -6,23 +6,52 @@ module Clang
6
6
  extend FFI::Library
7
7
  ffi_lib 'clang'
8
8
 
9
+ # A single translation unit, which resides in an index.
10
+ #
11
+ # = Fields:
12
+ #
13
+ class TranslationUnitImpl < FFI::Struct
14
+ end
15
+
16
+ # Provides the contents of a file that has not yet been saved to disk.
17
+ #
18
+ # Each CXUnsavedFile instance provides the name of a file on the
19
+ # system along with the current contents of that file that have not
20
+ # yet been saved to disk.
21
+ #
22
+ # = Fields:
23
+ # :filename ::
24
+ # (String) The file whose contents have not yet been saved.
25
+ #
26
+ # This file must already exist in the file system.
27
+ # :contents ::
28
+ # (String) A buffer containing the unsaved contents of this file.
29
+ # :length ::
30
+ # (Integer) The length of the unsaved contents of this buffer.
31
+ #
32
+ class UnsavedFile < FFI::Struct
33
+ layout :filename, :string,
34
+ :contents, :string,
35
+ :length, :ulong
36
+ end
37
+
9
38
  # Describes the availability of a particular entity, which indicates
10
39
  # whether the use of this entity will result in a warning or error due to
11
40
  # it being deprecated or unavailable.
12
41
  #
13
42
  # === Options:
14
- # :available::
43
+ # :available ::
15
44
  # The entity is available.
16
- # :deprecated::
45
+ # :deprecated ::
17
46
  # The entity is available, but has been deprecated (and its use is
18
47
  # not recommended).
19
- # :not_available::
48
+ # :not_available ::
20
49
  # The entity is not available; any use of it will be an error.
21
- # :not_accessible::
50
+ # :not_accessible ::
22
51
  # The entity is available, but not accessible; any use of it will be
23
52
  # an error.
24
53
  #
25
- # @return [Array of Symbols]
54
+ # @return [Array<Symbol>]
26
55
  def self.availability_kind_enum
27
56
  [:available, :deprecated, :not_available, :not_accessible]
28
57
  end
@@ -33,6 +62,19 @@ module Clang
33
62
  :not_accessible
34
63
  ]
35
64
 
65
+ # A character string.
66
+ #
67
+ # The \c CXString type is used to return strings from the interface when
68
+ # the ownership of that string might different from one call to the next.
69
+ # Use \c clang_getCString() to retrieve the string data and, once finished
70
+ # with the string data, call \c clang_disposeString() to free the string.
71
+ #
72
+ # = Fields:
73
+ # :data ::
74
+ # (FFI::Pointer(*Void))
75
+ # :private_flags ::
76
+ # (Integer)
77
+ #
36
78
  class String < FFI::Struct
37
79
  layout :data, :pointer,
38
80
  :private_flags, :uint
@@ -93,7 +135,7 @@ module Clang
93
135
  # @method create_index(exclude_declarations_from_pch, display_diagnostics)
94
136
  # @param [Integer] exclude_declarations_from_pch
95
137
  # @param [Integer] display_diagnostics
96
- # @return [FFI::Pointer of Index]
138
+ # @return [FFI::Pointer(Index)]
97
139
  # @scope class
98
140
  attach_function :create_index, :clang_createIndex, [:int, :int], :pointer
99
141
 
@@ -103,7 +145,7 @@ module Clang
103
145
  # within that index have been destroyed.
104
146
  #
105
147
  # @method dispose_index(index)
106
- # @param [FFI::Pointer of Index] index
148
+ # @param [FFI::Pointer(Index)] index
107
149
  # @return [nil]
108
150
  # @scope class
109
151
  attach_function :dispose_index, :clang_disposeIndex, [:pointer], :void
@@ -111,7 +153,7 @@ module Clang
111
153
  # Retrieve the complete file and path name of the given file.
112
154
  #
113
155
  # @method get_file_name(s_file)
114
- # @param [FFI::Pointer of File] s_file
156
+ # @param [FFI::Pointer(File)] s_file
115
157
  # @return [String]
116
158
  # @scope class
117
159
  attach_function :get_file_name, :clang_getFileName, [:pointer], String.by_value
@@ -119,7 +161,7 @@ module Clang
119
161
  # Retrieve the last modification time of the given file.
120
162
  #
121
163
  # @method get_file_time(s_file)
122
- # @param [FFI::Pointer of File] s_file
164
+ # @param [FFI::Pointer(File)] s_file
123
165
  # @return [Integer]
124
166
  # @scope class
125
167
  attach_function :get_file_time, :clang_getFileTime, [:pointer], :long
@@ -129,8 +171,8 @@ module Clang
129
171
  # #ifndef/#define/#endif macro guards or with #pragma once.
130
172
  #
131
173
  # @method is_file_multiple_include_guarded(tu, file)
132
- # @param [FFI::Pointer of TranslationUnit] tu
133
- # @param [FFI::Pointer of File] file
174
+ # @param [FFI::Pointer(TranslationUnit)] tu
175
+ # @param [FFI::Pointer(File)] file
134
176
  # @return [Integer]
135
177
  # @scope class
136
178
  attach_function :is_file_multiple_include_guarded, :clang_isFileMultipleIncludeGuarded, [:pointer, :pointer], :uint
@@ -138,18 +180,43 @@ module Clang
138
180
  # Retrieve a file handle within the given translation unit.
139
181
  #
140
182
  # @method get_file(tu, file_name)
141
- # @param [FFI::Pointer of TranslationUnit] tu the translation unit
183
+ # @param [FFI::Pointer(TranslationUnit)] tu the translation unit
142
184
  # @param [String] file_name the name of the file.
143
- # @return [FFI::Pointer of File] the file handle for the named file in the translation unit \p tu,
185
+ # @return [FFI::Pointer(File)] the file handle for the named file in the translation unit \p tu,
144
186
  # or a NULL file handle if the file was not a part of this translation unit.
145
187
  # @scope class
146
188
  attach_function :get_file, :clang_getFile, [:pointer, :string], :pointer
147
189
 
190
+ # Identifies a specific source location within a translation
191
+ # unit.
192
+ #
193
+ # Use clang_getExpansionLocation() or clang_getSpellingLocation()
194
+ # to map a source location to a particular file, line, and column.
195
+ #
196
+ # = Fields:
197
+ # :ptr_data ::
198
+ # (Array<FFI::Pointer(*Void)>)
199
+ # :int_data ::
200
+ # (Integer)
201
+ #
148
202
  class SourceLocation < FFI::Struct
149
203
  layout :ptr_data, [:pointer, 2],
150
204
  :int_data, :uint
151
205
  end
152
206
 
207
+ # Identifies a half-open character range in the source code.
208
+ #
209
+ # Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
210
+ # starting and end locations from a source range, respectively.
211
+ #
212
+ # = Fields:
213
+ # :ptr_data ::
214
+ # (Array<FFI::Pointer(*Void)>)
215
+ # :begin_int_data ::
216
+ # (Integer)
217
+ # :end_int_data ::
218
+ # (Integer)
219
+ #
153
220
  class SourceRange < FFI::Struct
154
221
  layout :ptr_data, [:pointer, 2],
155
222
  :begin_int_data, :uint,
@@ -179,8 +246,8 @@ module Clang
179
246
  # in a particular translation unit.
180
247
  #
181
248
  # @method get_location(tu, file, line, column)
182
- # @param [FFI::Pointer of TranslationUnit] tu
183
- # @param [FFI::Pointer of File] file
249
+ # @param [FFI::Pointer(TranslationUnit)] tu
250
+ # @param [FFI::Pointer(File)] file
184
251
  # @param [Integer] line
185
252
  # @param [Integer] column
186
253
  # @return [SourceLocation]
@@ -191,8 +258,8 @@ module Clang
191
258
  # in a particular translation unit.
192
259
  #
193
260
  # @method get_location_for_offset(tu, file, offset)
194
- # @param [FFI::Pointer of TranslationUnit] tu
195
- # @param [FFI::Pointer of File] file
261
+ # @param [FFI::Pointer(TranslationUnit)] tu
262
+ # @param [FFI::Pointer(File)] file
196
263
  # @param [Integer] offset
197
264
  # @return [SourceLocation]
198
265
  # @scope class
@@ -255,16 +322,16 @@ module Clang
255
322
  # @method get_presumed_location(location, filename, line, column)
256
323
  # @param [SourceLocation] location the location within a source file that will be decomposed
257
324
  # into its parts.
258
- # @param [FFI::Pointer to ] filename (out) if non-NULL, will be set to the filename of the
325
+ # @param [FFI::Pointer(*String)] filename (out) if non-NULL, will be set to the filename of the
259
326
  # source location. Note that filenames returned will be for "virtual" files,
260
327
  # which don't necessarily exist on the machine running clang - e.g. when
261
328
  # parsing preprocessed output obtained from a different environment. If
262
329
  # a non-NULL value is passed in, remember to dispose of the returned value
263
330
  # using \c clang_disposeString() once you've finished with it. For an invalid
264
331
  # source location, an empty string is returned.
265
- # @param [FFI::Pointer to ] line (out) if non-NULL, will be set to the line number of the
332
+ # @param [FFI::Pointer(*UInt)] line (out) if non-NULL, will be set to the line number of the
266
333
  # source location. For an invalid source location, zero is returned.
267
- # @param [FFI::Pointer to ] column (out) if non-NULL, will be set to the column number of the
334
+ # @param [FFI::Pointer(*UInt)] column (out) if non-NULL, will be set to the column number of the
268
335
  # source location. For an invalid source location, zero is returned.
269
336
  # @return [nil]
270
337
  # @scope class
@@ -279,10 +346,10 @@ module Clang
279
346
  #
280
347
  # @method get_instantiation_location(location, file, line, column, offset)
281
348
  # @param [SourceLocation] location
282
- # @param [FFI::Pointer to ] file
283
- # @param [FFI::Pointer to ] line
284
- # @param [FFI::Pointer to ] column
285
- # @param [FFI::Pointer to ] offset
349
+ # @param [FFI::Pointer(*File)] file
350
+ # @param [FFI::Pointer(*UInt)] line
351
+ # @param [FFI::Pointer(*UInt)] column
352
+ # @param [FFI::Pointer(*UInt)] offset
286
353
  # @return [nil]
287
354
  # @scope class
288
355
  attach_function :get_instantiation_location, :clang_getInstantiationLocation, [SourceLocation.by_value, :pointer, :pointer, :pointer, :pointer], :void
@@ -296,13 +363,13 @@ module Clang
296
363
  # @method get_spelling_location(location, file, line, column, offset)
297
364
  # @param [SourceLocation] location the location within a source file that will be decomposed
298
365
  # into its parts.
299
- # @param [FFI::Pointer to ] file (out) if non-NULL, will be set to the file to which the given
366
+ # @param [FFI::Pointer(*File)] file (out) if non-NULL, will be set to the file to which the given
300
367
  # source location points.
301
- # @param [FFI::Pointer to ] line (out) if non-NULL, will be set to the line to which the given
368
+ # @param [FFI::Pointer(*UInt)] line (out) if non-NULL, will be set to the line to which the given
302
369
  # source location points.
303
- # @param [FFI::Pointer to ] column (out) if non-NULL, will be set to the column to which the given
370
+ # @param [FFI::Pointer(*UInt)] column (out) if non-NULL, will be set to the column to which the given
304
371
  # source location points.
305
- # @param [FFI::Pointer to ] offset (out) if non-NULL, will be set to the offset into the
372
+ # @param [FFI::Pointer(*UInt)] offset (out) if non-NULL, will be set to the offset into the
306
373
  # buffer to which the given source location points.
307
374
  # @return [nil]
308
375
  # @scope class
@@ -329,23 +396,23 @@ module Clang
329
396
  # Describes the severity of a particular diagnostic.
330
397
  #
331
398
  # === Options:
332
- # :ignored::
399
+ # :ignored ::
333
400
  # A diagnostic that has been suppressed, e.g., by a command-line
334
401
  # option.
335
- # :note::
402
+ # :note ::
336
403
  # This diagnostic is a note that should be attached to the
337
404
  # previous (non-note) diagnostic.
338
- # :warning::
405
+ # :warning ::
339
406
  # This diagnostic indicates suspicious code that may not be
340
407
  # wrong.
341
- # :error::
408
+ # :error ::
342
409
  # This diagnostic indicates that the code is ill-formed.
343
- # :fatal::
410
+ # :fatal ::
344
411
  # This diagnostic indicates that the code is ill-formed such
345
412
  # that future parser recovery is unlikely to produce useful
346
413
  # results.
347
414
  #
348
- # @return [Array of Symbols]
415
+ # @return [Array<Symbol>]
349
416
  def self.diagnostic_severity_enum
350
417
  [:ignored, :note, :warning, :error, :fatal]
351
418
  end
@@ -361,7 +428,7 @@ module Clang
361
428
  # translation unit.
362
429
  #
363
430
  # @method get_num_diagnostics(unit)
364
- # @param [FFI::Pointer of TranslationUnit] unit
431
+ # @param [FFI::Pointer(TranslationUnit)] unit
365
432
  # @return [Integer]
366
433
  # @scope class
367
434
  attach_function :get_num_diagnostics, :clang_getNumDiagnostics, [:pointer], :uint
@@ -369,9 +436,9 @@ module Clang
369
436
  # Retrieve a diagnostic associated with the given translation unit.
370
437
  #
371
438
  # @method get_diagnostic(unit, index)
372
- # @param [FFI::Pointer of TranslationUnit] unit the translation unit to query.
439
+ # @param [FFI::Pointer(TranslationUnit)] unit the translation unit to query.
373
440
  # @param [Integer] index the zero-based diagnostic number to retrieve.
374
- # @return [FFI::Pointer of Diagnostic] the requested diagnostic. This diagnostic must be freed
441
+ # @return [FFI::Pointer(Diagnostic)] the requested diagnostic. This diagnostic must be freed
375
442
  # via a call to \c clang_disposeDiagnostic().
376
443
  # @scope class
377
444
  attach_function :get_diagnostic, :clang_getDiagnostic, [:pointer, :uint], :pointer
@@ -379,7 +446,7 @@ module Clang
379
446
  # Destroy a diagnostic.
380
447
  #
381
448
  # @method dispose_diagnostic(diagnostic)
382
- # @param [FFI::Pointer of Diagnostic] diagnostic
449
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
383
450
  # @return [nil]
384
451
  # @scope class
385
452
  attach_function :dispose_diagnostic, :clang_disposeDiagnostic, [:pointer], :void
@@ -390,7 +457,7 @@ module Clang
390
457
  # behavior of \c clang_displayDiagnostic().
391
458
  #
392
459
  # === Options:
393
- # :display_source_location::
460
+ # :display_source_location ::
394
461
  # Display the source-location information where the
395
462
  # diagnostic was located.
396
463
  #
@@ -402,38 +469,38 @@ module Clang
402
469
  # \endcode
403
470
  #
404
471
  # This option corresponds to the clang flag \c -fshow-source-location.
405
- # :display_column::
472
+ # :display_column ::
406
473
  # If displaying the source-location information of the
407
474
  # diagnostic, also include the column number.
408
475
  #
409
476
  # This option corresponds to the clang flag \c -fshow-column.
410
- # :display_source_ranges::
477
+ # :display_source_ranges ::
411
478
  # If displaying the source-location information of the
412
479
  # diagnostic, also include information about source ranges in a
413
480
  # machine-parsable format.
414
481
  #
415
482
  # This option corresponds to the clang flag
416
483
  # \c -fdiagnostics-print-source-range-info.
417
- # :display_option::
484
+ # :display_option ::
418
485
  # Display the option name associated with this diagnostic, if any.
419
486
  #
420
487
  # The option name displayed (e.g., -Wconversion) will be placed in brackets
421
488
  # after the diagnostic text. This option corresponds to the clang flag
422
489
  # \c -fdiagnostics-show-option.
423
- # :display_category_id::
490
+ # :display_category_id ::
424
491
  # Display the category number associated with this diagnostic, if any.
425
492
  #
426
493
  # The category number is displayed within brackets after the diagnostic text.
427
494
  # This option corresponds to the clang flag
428
495
  # \c -fdiagnostics-show-category=id.
429
- # :display_category_name::
496
+ # :display_category_name ::
430
497
  # Display the category name associated with this diagnostic, if any.
431
498
  #
432
499
  # The category name is displayed within brackets after the diagnostic text.
433
500
  # This option corresponds to the clang flag
434
501
  # \c -fdiagnostics-show-category=name.
435
502
  #
436
- # @return [Array of Symbols]
503
+ # @return [Array<Symbol>]
437
504
  def self.diagnostic_display_options_enum
438
505
  [:display_source_location, :display_column, :display_source_ranges, :display_option, :display_category_id, :display_category_name]
439
506
  end
@@ -454,7 +521,7 @@ module Clang
454
521
  # options that most closely mimics the behavior of the clang compiler.
455
522
  #
456
523
  # @method format_diagnostic(diagnostic, options)
457
- # @param [FFI::Pointer of Diagnostic] diagnostic The diagnostic to print.
524
+ # @param [FFI::Pointer(Diagnostic)] diagnostic The diagnostic to print.
458
525
  # @param [Integer] options A set of options that control the diagnostic display,
459
526
  # created by combining \c CXDiagnosticDisplayOptions values.
460
527
  # @return [String] A new string containing for formatted diagnostic.
@@ -473,7 +540,7 @@ module Clang
473
540
  # Determine the severity of the given diagnostic.
474
541
  #
475
542
  # @method get_diagnostic_severity(diagnostic)
476
- # @param [FFI::Pointer of Diagnostic] diagnostic
543
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
477
544
  # @return [Symbol from diagnostic_severity_enum]
478
545
  # @scope class
479
546
  attach_function :get_diagnostic_severity, :clang_getDiagnosticSeverity, [:pointer], :diagnostic_severity
@@ -484,7 +551,7 @@ module Clang
484
551
  # displaying the diagnostic on the command line.
485
552
  #
486
553
  # @method get_diagnostic_location(diagnostic)
487
- # @param [FFI::Pointer of Diagnostic] diagnostic
554
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
488
555
  # @return [SourceLocation]
489
556
  # @scope class
490
557
  attach_function :get_diagnostic_location, :clang_getDiagnosticLocation, [:pointer], SourceLocation.by_value
@@ -492,7 +559,7 @@ module Clang
492
559
  # Retrieve the text of the given diagnostic.
493
560
  #
494
561
  # @method get_diagnostic_spelling(diagnostic)
495
- # @param [FFI::Pointer of Diagnostic] diagnostic
562
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
496
563
  # @return [String]
497
564
  # @scope class
498
565
  attach_function :get_diagnostic_spelling, :clang_getDiagnosticSpelling, [:pointer], String.by_value
@@ -501,8 +568,8 @@ module Clang
501
568
  # diagnostic.
502
569
  #
503
570
  # @method get_diagnostic_option(diag, disable)
504
- # @param [FFI::Pointer of Diagnostic] diag The diagnostic to be queried.
505
- # @param [FFI::Pointer to ] disable If non-NULL, will be set to the option that disables this
571
+ # @param [FFI::Pointer(Diagnostic)] diag The diagnostic to be queried.
572
+ # @param [FFI::Pointer(*String)] disable If non-NULL, will be set to the option that disables this
506
573
  # diagnostic (if any).
507
574
  # @return [String] A string that contains the command-line option used to enable this
508
575
  # warning, such as "-Wconversion" or "-pedantic".
@@ -516,7 +583,7 @@ module Clang
516
583
  # retrieves the category number for the given diagnostic.
517
584
  #
518
585
  # @method get_diagnostic_category(diagnostic)
519
- # @param [FFI::Pointer of Diagnostic] diagnostic
586
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
520
587
  # @return [Integer] The number of the category that contains this diagnostic, or zero
521
588
  # if this diagnostic is uncategorized.
522
589
  # @scope class
@@ -535,7 +602,7 @@ module Clang
535
602
  # diagnostic.
536
603
  #
537
604
  # @method get_diagnostic_num_ranges(diagnostic)
538
- # @param [FFI::Pointer of Diagnostic] diagnostic
605
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
539
606
  # @return [Integer]
540
607
  # @scope class
541
608
  attach_function :get_diagnostic_num_ranges, :clang_getDiagnosticNumRanges, [:pointer], :uint
@@ -547,7 +614,7 @@ module Clang
547
614
  # underlining them with '~' characters.
548
615
  #
549
616
  # @method get_diagnostic_range(diagnostic, range)
550
- # @param [FFI::Pointer of Diagnostic] diagnostic the diagnostic whose range is being extracted.
617
+ # @param [FFI::Pointer(Diagnostic)] diagnostic the diagnostic whose range is being extracted.
551
618
  # @param [Integer] range the zero-based index specifying which range to
552
619
  # @return [SourceRange] the requested source range.
553
620
  # @scope class
@@ -557,7 +624,7 @@ module Clang
557
624
  # given diagnostic.
558
625
  #
559
626
  # @method get_diagnostic_num_fix_its(diagnostic)
560
- # @param [FFI::Pointer of Diagnostic] diagnostic
627
+ # @param [FFI::Pointer(Diagnostic)] diagnostic
561
628
  # @return [Integer]
562
629
  # @scope class
563
630
  attach_function :get_diagnostic_num_fix_its, :clang_getDiagnosticNumFixIts, [:pointer], :uint
@@ -575,9 +642,9 @@ module Clang
575
642
  # insert).
576
643
  #
577
644
  # @method get_diagnostic_fix_it(diagnostic, fix_it, replacement_range)
578
- # @param [FFI::Pointer of Diagnostic] diagnostic The diagnostic whose fix-its are being queried.
645
+ # @param [FFI::Pointer(Diagnostic)] diagnostic The diagnostic whose fix-its are being queried.
579
646
  # @param [Integer] fix_it The zero-based index of the fix-it.
580
- # @param [FFI::Pointer to ] replacement_range The source range whose contents will be
647
+ # @param [FFI::Pointer(*SourceRange)] replacement_range The source range whose contents will be
581
648
  # replaced with the returned replacement string. Note that source
582
649
  # ranges are half-open ranges (a, b), so the source code should be
583
650
  # replaced from a and up to (but not including) b.
@@ -589,7 +656,7 @@ module Clang
589
656
  # Get the original translation unit source file name.
590
657
  #
591
658
  # @method get_translation_unit_spelling(ct_unit)
592
- # @param [FFI::Pointer of TranslationUnit] ct_unit
659
+ # @param [FFI::Pointer(TranslationUnit)] ct_unit
593
660
  # @return [String]
594
661
  # @scope class
595
662
  attach_function :get_translation_unit_spelling, :clang_getTranslationUnitSpelling, [:pointer], String.by_value
@@ -610,34 +677,34 @@ module Clang
610
677
  # '-o <output file>' (both '-o' and '<output file>' are ignored)
611
678
  #
612
679
  # @method create_translation_unit_from_source_file(c_idx, source_filename, num_clang_command_line_args, command_line_args, num_unsaved_files, unsaved_files)
613
- # @param [FFI::Pointer of Index] c_idx The index object with which the translation unit will be
680
+ # @param [FFI::Pointer(Index)] c_idx The index object with which the translation unit will be
614
681
  # associated.
615
682
  # @param [String] source_filename - The name of the source file to load, or NULL if the
616
683
  # source file is included in \p clang_command_line_args.
617
684
  # @param [Integer] num_clang_command_line_args The number of command-line arguments in
618
685
  # \p clang_command_line_args.
619
- # @param [FFI::Pointer to ] command_line_args The command-line arguments that would be
686
+ # @param [FFI::Pointer(**Char_S)] command_line_args The command-line arguments that would be
620
687
  # passed to the \c clang executable if it were being invoked out-of-process.
621
688
  # These command-line options will be parsed and will affect how the translation
622
689
  # unit is parsed. Note that the following options are ignored: '-c',
623
690
  # '-emit-ast', '-fsyntex-only' (which is the default), and '-o <output file>'.
624
691
  # @param [Integer] num_unsaved_files the number of unsaved file entries in \p
625
692
  # unsaved_files.
626
- # @param [FFI::Pointer to ] unsaved_files the files that have not yet been saved to disk
693
+ # @param [FFI::Pointer(*UnsavedFile)] unsaved_files the files that have not yet been saved to disk
627
694
  # but may be required for code completion, including the contents of
628
695
  # those files. The contents and name of these files (as specified by
629
696
  # CXUnsavedFile) are copied when necessary, so the client only needs to
630
697
  # guarantee their validity until the call to this function returns.
631
- # @return [FFI::Pointer of TranslationUnit]
698
+ # @return [FFI::Pointer(TranslationUnit)]
632
699
  # @scope class
633
700
  attach_function :create_translation_unit_from_source_file, :clang_createTranslationUnitFromSourceFile, [:pointer, :string, :int, :pointer, :uint, :pointer], :pointer
634
701
 
635
702
  # Create a translation unit from an AST file (-emit-ast).
636
703
  #
637
704
  # @method create_translation_unit(index, ast_filename)
638
- # @param [FFI::Pointer of Index] index
705
+ # @param [FFI::Pointer(Index)] index
639
706
  # @param [String] ast_filename
640
- # @return [FFI::Pointer of TranslationUnit]
707
+ # @return [FFI::Pointer(TranslationUnit)]
641
708
  # @scope class
642
709
  attach_function :create_translation_unit, :clang_createTranslationUnit, [:pointer, :string], :pointer
643
710
 
@@ -648,10 +715,10 @@ module Clang
648
715
  # constructing the translation unit.
649
716
  #
650
717
  # === Options:
651
- # :none::
718
+ # :none ::
652
719
  # Used to indicate that no special translation-unit options are
653
720
  # needed.
654
- # :detailed_preprocessing_record::
721
+ # :detailed_preprocessing_record ::
655
722
  # Used to indicate that the parser should construct a "detailed"
656
723
  # preprocessing record, including all macro definitions and instantiations.
657
724
  #
@@ -660,7 +727,7 @@ module Clang
660
727
  # is usually not retained. However, it can be useful for
661
728
  # applications that require more detailed information about the
662
729
  # behavior of the preprocessor.
663
- # :incomplete::
730
+ # :incomplete ::
664
731
  # Used to indicate that the translation unit is incomplete.
665
732
  #
666
733
  # When a translation unit is considered "incomplete", semantic
@@ -670,7 +737,7 @@ module Clang
670
737
  # instantiation of implicitly-instantiation function templates in
671
738
  # C++. This option is typically used when parsing a header with the
672
739
  # intent of producing a precompiled header.
673
- # :precompiled_preamble::
740
+ # :precompiled_preamble ::
674
741
  # Used to indicate that the translation unit should be built with an
675
742
  # implicit precompiled header for the preamble.
676
743
  #
@@ -683,24 +750,24 @@ module Clang
683
750
  # preamble or the files in it have not changed, \c
684
751
  # clang_reparseTranslationUnit() will re-use the implicit
685
752
  # precompiled header to improve parsing performance.
686
- # :cache_completion_results::
753
+ # :cache_completion_results ::
687
754
  # Used to indicate that the translation unit should cache some
688
755
  # code-completion results with each reparse of the source file.
689
756
  #
690
757
  # Caching of code-completion results is a performance optimization that
691
758
  # introduces some overhead to reparsing but improves the performance of
692
759
  # code-completion operations.
693
- # :x_precompiled_preamble::
760
+ # :x_precompiled_preamble ::
694
761
  # DEPRECATED: Enable precompiled preambles in C++.
695
762
  #
696
763
  # Note: this is a *temporary* option that is available only while
697
764
  # we are testing C++ precompiled preamble support. It is deprecated.
698
- # :x_chained_pch::
765
+ # :x_chained_pch ::
699
766
  # DEPRECATED: Enabled chained precompiled preambles in C++.
700
767
  #
701
768
  # Note: this is a *temporary* option that is available only while
702
769
  # we are testing C++ precompiled preamble support. It is deprecated.
703
- # :nested_macro_expansions::
770
+ # :nested_macro_expansions ::
704
771
  # Used to indicate that the "detailed" preprocessing record,
705
772
  # if requested, should also contain nested macro expansions.
706
773
  #
@@ -709,7 +776,7 @@ module Clang
709
776
  # a large amount of storage to due preprocessor metaprogramming. Moreover,
710
777
  # its fairly rare that this information is useful for libclang clients.
711
778
  #
712
- # @return [Array of Symbols]
779
+ # @return [Array<Symbol>]
713
780
  def self.translation_unit_flags_enum
714
781
  [:none, :detailed_preprocessing_record, :incomplete, :precompiled_preamble, :cache_completion_results, :x_precompiled_preamble, :x_chained_pch, :nested_macro_expansions]
715
782
  end
@@ -750,18 +817,18 @@ module Clang
750
817
  # way that the compiler is configured on the command line.
751
818
  #
752
819
  # @method parse_translation_unit(c_idx, source_filename, command_line_args, num_command_line_args, unsaved_files, num_unsaved_files, options)
753
- # @param [FFI::Pointer of Index] c_idx The index object with which the translation unit will be
820
+ # @param [FFI::Pointer(Index)] c_idx The index object with which the translation unit will be
754
821
  # associated.
755
822
  # @param [String] source_filename The name of the source file to load, or NULL if the
756
823
  # source file is included in \p command_line_args.
757
- # @param [FFI::Pointer to ] command_line_args The command-line arguments that would be
824
+ # @param [FFI::Pointer(**Char_S)] command_line_args The command-line arguments that would be
758
825
  # passed to the \c clang executable if it were being invoked out-of-process.
759
826
  # These command-line options will be parsed and will affect how the translation
760
827
  # unit is parsed. Note that the following options are ignored: '-c',
761
828
  # '-emit-ast', '-fsyntex-only' (which is the default), and '-o <output file>'.
762
829
  # @param [Integer] num_command_line_args The number of command-line arguments in
763
830
  # \p command_line_args.
764
- # @param [FFI::Pointer to ] unsaved_files the files that have not yet been saved to disk
831
+ # @param [FFI::Pointer(*UnsavedFile)] unsaved_files the files that have not yet been saved to disk
765
832
  # but may be required for parsing, including the contents of
766
833
  # those files. The contents and name of these files (as specified by
767
834
  # CXUnsavedFile) are copied when necessary, so the client only needs to
@@ -771,7 +838,7 @@ module Clang
771
838
  # @param [Integer] options A bitmask of options that affects how the translation unit
772
839
  # is managed but not its compilation. This should be a bitwise OR of the
773
840
  # CXTranslationUnit_XXX flags.
774
- # @return [FFI::Pointer of TranslationUnit] A new translation unit describing the parsed code and containing
841
+ # @return [FFI::Pointer(TranslationUnit)] A new translation unit describing the parsed code and containing
775
842
  # any diagnostics produced by the compiler. If there is a failure from which
776
843
  # the compiler cannot recover, returns NULL.
777
844
  # @scope class
@@ -784,10 +851,10 @@ module Clang
784
851
  # saving the translation unit.
785
852
  #
786
853
  # === Options:
787
- # :save_translation_unit_none::
854
+ # :save_translation_unit_none ::
788
855
  # Used to indicate that no special saving options are needed.
789
856
  #
790
- # @return [Array of Symbols]
857
+ # @return [Array<Symbol>]
791
858
  def self.save_translation_unit_flags_enum
792
859
  [:save_translation_unit_none]
793
860
  end
@@ -804,7 +871,7 @@ module Clang
804
871
  # the most commonly-requested data.
805
872
  #
806
873
  # @method default_save_options(tu)
807
- # @param [FFI::Pointer of TranslationUnit] tu
874
+ # @param [FFI::Pointer(TranslationUnit)] tu
808
875
  # @return [Integer]
809
876
  # @scope class
810
877
  attach_function :default_save_options, :clang_defaultSaveOptions, [:pointer], :uint
@@ -813,25 +880,25 @@ module Clang
813
880
  # \c clang_saveTranslationUnit().
814
881
  #
815
882
  # === Options:
816
- # :none::
883
+ # :none ::
817
884
  # Indicates that no error occurred while saving a translation unit.
818
- # :unknown::
885
+ # :unknown ::
819
886
  # Indicates that an unknown error occurred while attempting to save
820
887
  # the file.
821
888
  #
822
889
  # This error typically indicates that file I/O failed when attempting to
823
890
  # write the file.
824
- # :translation_errors::
891
+ # :translation_errors ::
825
892
  # Indicates that errors during translation prevented this attempt
826
893
  # to save the translation unit.
827
894
  #
828
895
  # Errors that prevent the translation unit from being saved can be
829
896
  # extracted using \c clang_getNumDiagnostics() and \c clang_getDiagnostic().
830
- # :invalid_tu::
897
+ # :invalid_tu ::
831
898
  # Indicates that the translation unit to be saved was somehow
832
899
  # invalid (e.g., NULL).
833
900
  #
834
- # @return [Array of Symbols]
901
+ # @return [Array<Symbol>]
835
902
  def self.save_error_enum
836
903
  [:none, :unknown, :translation_errors, :invalid_tu]
837
904
  end
@@ -853,7 +920,7 @@ module Clang
853
920
  # units.
854
921
  #
855
922
  # @method save_translation_unit(tu, file_name, options)
856
- # @param [FFI::Pointer of TranslationUnit] tu The translation unit to save.
923
+ # @param [FFI::Pointer(TranslationUnit)] tu The translation unit to save.
857
924
  # @param [String] file_name The file to which the translation unit will be saved.
858
925
  # @param [Integer] options A bitmask of options that affects how the translation unit
859
926
  # is saved. This should be a bitwise OR of the
@@ -867,7 +934,7 @@ module Clang
867
934
  # Destroy the specified CXTranslationUnit object.
868
935
  #
869
936
  # @method dispose_translation_unit(translation_unit)
870
- # @param [FFI::Pointer of TranslationUnit] translation_unit
937
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
871
938
  # @return [nil]
872
939
  # @scope class
873
940
  attach_function :dispose_translation_unit, :clang_disposeTranslationUnit, [:pointer], :void
@@ -879,10 +946,10 @@ module Clang
879
946
  # reparsing the translation unit.
880
947
  #
881
948
  # === Options:
882
- # :reparse_none::
949
+ # :reparse_none ::
883
950
  # Used to indicate that no special reparsing options are needed.
884
951
  #
885
- # @return [Array of Symbols]
952
+ # @return [Array<Symbol>]
886
953
  def self.reparse_flags_enum
887
954
  [:reparse_none]
888
955
  end
@@ -900,7 +967,7 @@ module Clang
900
967
  # to the next.
901
968
  #
902
969
  # @method default_reparse_options(tu)
903
- # @param [FFI::Pointer of TranslationUnit] tu
970
+ # @param [FFI::Pointer(TranslationUnit)] tu
904
971
  # @return [Integer]
905
972
  # @scope class
906
973
  attach_function :default_reparse_options, :clang_defaultReparseOptions, [:pointer], :uint
@@ -921,12 +988,12 @@ module Clang
921
988
  # unit using this routine.
922
989
  #
923
990
  # @method reparse_translation_unit(tu, num_unsaved_files, unsaved_files, options)
924
- # @param [FFI::Pointer of TranslationUnit] tu The translation unit whose contents will be re-parsed. The
991
+ # @param [FFI::Pointer(TranslationUnit)] tu The translation unit whose contents will be re-parsed. The
925
992
  # translation unit must originally have been built with
926
993
  # \c clang_createTranslationUnitFromSourceFile().
927
994
  # @param [Integer] num_unsaved_files The number of unsaved file entries in \p
928
995
  # unsaved_files.
929
- # @param [FFI::Pointer to ] unsaved_files The files that have not yet been saved to disk
996
+ # @param [FFI::Pointer(*UnsavedFile)] unsaved_files The files that have not yet been saved to disk
930
997
  # but may be required for parsing, including the contents of
931
998
  # those files. The contents and name of these files (as specified by
932
999
  # CXUnsavedFile) are copied when necessary, so the client only needs to
@@ -944,36 +1011,36 @@ module Clang
944
1011
  # Categorizes how memory is being used by a translation unit.
945
1012
  #
946
1013
  # === Options:
947
- # :ast::
1014
+ # :ast ::
948
1015
  #
949
- # :identifiers::
1016
+ # :identifiers ::
950
1017
  #
951
- # :selectors::
1018
+ # :selectors ::
952
1019
  #
953
- # :global_completion_results::
1020
+ # :global_completion_results ::
954
1021
  #
955
- # :source_manager_content_cache::
1022
+ # :source_manager_content_cache ::
956
1023
  #
957
- # :ast_side_tables::
1024
+ # :ast_side_tables ::
958
1025
  #
959
- # :source_manager_membuffer_malloc::
1026
+ # :source_manager_membuffer_malloc ::
960
1027
  #
961
- # :source_manager_membuffer_m_map::
1028
+ # :source_manager_membuffer_m_map ::
962
1029
  #
963
- # :external_ast_source_membuffer_malloc::
1030
+ # :external_ast_source_membuffer_malloc ::
964
1031
  #
965
- # :external_ast_source_membuffer_m_map::
1032
+ # :external_ast_source_membuffer_m_map ::
966
1033
  #
967
- # :preprocessor::
1034
+ # :preprocessor ::
968
1035
  #
969
- # :preprocessing_record::
1036
+ # :preprocessing_record ::
970
1037
  #
971
- # :source_manager_data_structures::
1038
+ # :source_manager_data_structures ::
972
1039
  #
973
- # :preprocessor_header_search::
1040
+ # :preprocessor_header_search ::
974
1041
  #
975
1042
  #
976
- # @return [Array of Symbols]
1043
+ # @return [Array<Symbol>]
977
1044
  def self.tu_resource_usage_kind_enum
978
1045
  [:ast, :identifiers, :selectors, :global_completion_results, :source_manager_content_cache, :ast_side_tables, :source_manager_membuffer_malloc, :source_manager_membuffer_m_map, :external_ast_source_membuffer_malloc, :external_ast_source_membuffer_m_map, :preprocessor, :preprocessing_record, :source_manager_data_structures, :preprocessor_header_search]
979
1046
  end
@@ -1003,11 +1070,31 @@ module Clang
1003
1070
  # @scope class
1004
1071
  attach_function :get_tu_resource_usage_name, :clang_getTUResourceUsageName, [:tu_resource_usage_kind], :string
1005
1072
 
1073
+ # (Not documented)
1074
+ #
1075
+ # = Fields:
1076
+ # :kind ::
1077
+ # (Symbol from tu_resource_usage_kind_enum) The memory usage category.
1078
+ # :amount ::
1079
+ # (Integer) Amount of resources used.
1080
+ # The units will depend on the resource kind.
1081
+ #
1006
1082
  class TUResourceUsageEntry < FFI::Struct
1007
1083
  layout :kind, :tu_resource_usage_kind,
1008
1084
  :amount, :ulong
1009
1085
  end
1010
1086
 
1087
+ # The memory usage of a CXTranslationUnit, broken into categories.
1088
+ #
1089
+ # = Fields:
1090
+ # :data ::
1091
+ # (FFI::Pointer(*Void)) Private data member, used for queries.
1092
+ # :num_entries ::
1093
+ # (Integer) The number of entries in the 'entries' array.
1094
+ # :entries ::
1095
+ # (FFI::Pointer(*TUResourceUsageEntry)) An array of key-value pairs, representing the breakdown of memory
1096
+ # usage.
1097
+ #
1011
1098
  class TUResourceUsage < FFI::Struct
1012
1099
  layout :data, :pointer,
1013
1100
  :num_entries, :uint,
@@ -1018,11 +1105,13 @@ module Clang
1018
1105
  # should be released with clang_disposeCXTUResourceUsage().
1019
1106
  #
1020
1107
  # @method get_cxtu_resource_usage(tu)
1021
- # @param [FFI::Pointer of TranslationUnit] tu
1108
+ # @param [FFI::Pointer(TranslationUnit)] tu
1022
1109
  # @return [TUResourceUsage]
1023
1110
  # @scope class
1024
1111
  attach_function :get_cxtu_resource_usage, :clang_getCXTUResourceUsage, [:pointer], TUResourceUsage.by_value
1025
1112
 
1113
+ # (Not documented)
1114
+ #
1026
1115
  # @method dispose_cxtu_resource_usage(usage)
1027
1116
  # @param [TUResourceUsage] usage
1028
1117
  # @return [nil]
@@ -1032,7 +1121,7 @@ module Clang
1032
1121
  # Describes the kind of entity that a cursor refers to.
1033
1122
  #
1034
1123
  # === Options:
1035
- # :unexposed_decl::
1124
+ # :unexposed_decl ::
1036
1125
  # A declaration whose specific kind is not exposed via this
1037
1126
  # interface.
1038
1127
  #
@@ -1040,92 +1129,92 @@ module Clang
1040
1129
  # of declaration; one can extract their location information,
1041
1130
  # spelling, find their definitions, etc. However, the specific kind
1042
1131
  # of the declaration is not reported.
1043
- # :struct_decl::
1132
+ # :struct_decl ::
1044
1133
  # A C or C++ struct.
1045
- # :union_decl::
1134
+ # :union_decl ::
1046
1135
  # A C or C++ union.
1047
- # :class_decl::
1136
+ # :class_decl ::
1048
1137
  # A C++ class.
1049
- # :enum_decl::
1138
+ # :enum_decl ::
1050
1139
  # An enumeration.
1051
- # :field_decl::
1140
+ # :field_decl ::
1052
1141
  # A field (in C) or non-static data member (in C++) in a
1053
1142
  # struct, union, or C++ class.
1054
- # :enum_constant_decl::
1143
+ # :enum_constant_decl ::
1055
1144
  # An enumerator constant.
1056
- # :function_decl::
1145
+ # :function_decl ::
1057
1146
  # A function.
1058
- # :var_decl::
1147
+ # :var_decl ::
1059
1148
  # A variable.
1060
- # :parm_decl::
1149
+ # :parm_decl ::
1061
1150
  # A function or method parameter.
1062
- # :obj_c_interface_decl::
1151
+ # :obj_c_interface_decl ::
1063
1152
  # An Objective-C @interface.
1064
- # :obj_c_category_decl::
1153
+ # :obj_c_category_decl ::
1065
1154
  # An Objective-C @interface for a category.
1066
- # :obj_c_protocol_decl::
1155
+ # :obj_c_protocol_decl ::
1067
1156
  # An Objective-C @protocol declaration.
1068
- # :obj_c_property_decl::
1157
+ # :obj_c_property_decl ::
1069
1158
  # An Objective-C @property declaration.
1070
- # :obj_c_ivar_decl::
1159
+ # :obj_c_ivar_decl ::
1071
1160
  # An Objective-C instance variable.
1072
- # :obj_c_instance_method_decl::
1161
+ # :obj_c_instance_method_decl ::
1073
1162
  # An Objective-C instance method.
1074
- # :obj_c_class_method_decl::
1163
+ # :obj_c_class_method_decl ::
1075
1164
  # An Objective-C class method.
1076
- # :obj_c_implementation_decl::
1165
+ # :obj_c_implementation_decl ::
1077
1166
  # An Objective-C @implementation.
1078
- # :obj_c_category_impl_decl::
1167
+ # :obj_c_category_impl_decl ::
1079
1168
  # An Objective-C @implementation for a category.
1080
- # :typedef_decl::
1169
+ # :typedef_decl ::
1081
1170
  # A typedef
1082
- # :x_method::
1171
+ # :x_method ::
1083
1172
  # A C++ class method.
1084
- # :namespace::
1173
+ # :namespace ::
1085
1174
  # A C++ namespace.
1086
- # :linkage_spec::
1175
+ # :linkage_spec ::
1087
1176
  # A linkage specification, e.g. 'extern "C"'.
1088
- # :constructor::
1177
+ # :constructor ::
1089
1178
  # A C++ constructor.
1090
- # :destructor::
1179
+ # :destructor ::
1091
1180
  # A C++ destructor.
1092
- # :conversion_function::
1181
+ # :conversion_function ::
1093
1182
  # A C++ conversion function.
1094
- # :template_type_parameter::
1183
+ # :template_type_parameter ::
1095
1184
  # A C++ template type parameter.
1096
- # :non_type_template_parameter::
1185
+ # :non_type_template_parameter ::
1097
1186
  # A C++ non-type template parameter.
1098
- # :template_template_parameter::
1187
+ # :template_template_parameter ::
1099
1188
  # A C++ template template parameter.
1100
- # :function_template::
1189
+ # :function_template ::
1101
1190
  # A C++ function template.
1102
- # :class_template::
1191
+ # :class_template ::
1103
1192
  # A C++ class template.
1104
- # :class_template_partial_specialization::
1193
+ # :class_template_partial_specialization ::
1105
1194
  # A C++ class template partial specialization.
1106
- # :namespace_alias::
1195
+ # :namespace_alias ::
1107
1196
  # A C++ namespace alias declaration.
1108
- # :using_directive::
1197
+ # :using_directive ::
1109
1198
  # A C++ using directive.
1110
- # :using_declaration::
1199
+ # :using_declaration ::
1111
1200
  # A C++ using declaration.
1112
- # :type_alias_decl::
1201
+ # :type_alias_decl ::
1113
1202
  # A C++ alias declaration
1114
- # :obj_c_synthesize_decl::
1203
+ # :obj_c_synthesize_decl ::
1115
1204
  # An Objective-C @synthesize definition.
1116
- # :obj_c_dynamic_decl::
1205
+ # :obj_c_dynamic_decl ::
1117
1206
  # An Objective-C @dynamic definition.
1118
- # :x_access_specifier::
1207
+ # :x_access_specifier ::
1119
1208
  # An access specifier.
1120
- # :first_ref::
1209
+ # :first_ref ::
1121
1210
  # References
1122
- # :obj_c_super_class_ref::
1211
+ # :obj_c_super_class_ref ::
1123
1212
  # Decl references
1124
- # :obj_c_protocol_ref::
1213
+ # :obj_c_protocol_ref ::
1125
1214
  #
1126
- # :obj_c_class_ref::
1215
+ # :obj_c_class_ref ::
1127
1216
  #
1128
- # :type_ref::
1217
+ # :type_ref ::
1129
1218
  # A reference to a type declaration.
1130
1219
  #
1131
1220
  # A type reference occurs anywhere where a type is named but not
@@ -1139,17 +1228,17 @@ module Clang
1139
1228
  # The typedef is a declaration of size_type (CXCursor_TypedefDecl),
1140
1229
  # while the type of the variable "size" is referenced. The cursor
1141
1230
  # referenced by the type of size is the typedef for size_type.
1142
- # :x_base_specifier::
1231
+ # :x_base_specifier ::
1143
1232
  #
1144
- # :template_ref::
1233
+ # :template_ref ::
1145
1234
  # A reference to a class template, function template, template
1146
1235
  # template parameter, or class template partial specialization.
1147
- # :namespace_ref::
1236
+ # :namespace_ref ::
1148
1237
  # A reference to a namespace or namespace alias.
1149
- # :member_ref::
1238
+ # :member_ref ::
1150
1239
  # A reference to a member of a struct, union, or class that occurs in
1151
1240
  # some non-expression context, e.g., a designated initializer.
1152
- # :label_ref::
1241
+ # :label_ref ::
1153
1242
  # A reference to a labeled statement.
1154
1243
  #
1155
1244
  # This cursor kind is used to describe the jump to "start_over" in the
@@ -1163,7 +1252,7 @@ module Clang
1163
1252
  # \endcode
1164
1253
  #
1165
1254
  # A label reference cursor refers to a label statement.
1166
- # :overloaded_decl_ref::
1255
+ # :overloaded_decl_ref ::
1167
1256
  # A reference to a set of overloaded functions or function templates
1168
1257
  # that has not yet been resolved to a specific function or function template.
1169
1258
  #
@@ -1198,19 +1287,19 @@ module Clang
1198
1287
  # The functions \c clang_getNumOverloadedDecls() and
1199
1288
  # \c clang_getOverloadedDecl() can be used to retrieve the definitions
1200
1289
  # referenced by this cursor.
1201
- # :first_invalid::
1290
+ # :first_invalid ::
1202
1291
  # Error conditions
1203
- # :invalid_file::
1292
+ # :invalid_file ::
1204
1293
  #
1205
- # :no_decl_found::
1294
+ # :no_decl_found ::
1206
1295
  #
1207
- # :not_implemented::
1296
+ # :not_implemented ::
1208
1297
  #
1209
- # :invalid_code::
1298
+ # :invalid_code ::
1210
1299
  #
1211
- # :first_expr::
1300
+ # :first_expr ::
1212
1301
  # Expressions
1213
- # :unexposed_expr::
1302
+ # :unexposed_expr ::
1214
1303
  # An expression whose specific kind is not exposed via this
1215
1304
  # interface.
1216
1305
  #
@@ -1218,61 +1307,61 @@ module Clang
1218
1307
  # of expression; one can extract their location information,
1219
1308
  # spelling, children, etc. However, the specific kind of the
1220
1309
  # expression is not reported.
1221
- # :decl_ref_expr::
1310
+ # :decl_ref_expr ::
1222
1311
  # An expression that refers to some value declaration, such
1223
1312
  # as a function, varible, or enumerator.
1224
- # :member_ref_expr::
1313
+ # :member_ref_expr ::
1225
1314
  # An expression that refers to a member of a struct, union,
1226
1315
  # class, Objective-C class, etc.
1227
- # :call_expr::
1316
+ # :call_expr ::
1228
1317
  # An expression that calls a function.
1229
- # :obj_c_message_expr::
1318
+ # :obj_c_message_expr ::
1230
1319
  # An expression that sends a message to an Objective-C
1231
1320
  # object or class.
1232
- # :block_expr::
1321
+ # :block_expr ::
1233
1322
  # An expression that represents a block literal.
1234
- # :integer_literal::
1323
+ # :integer_literal ::
1235
1324
  # An integer literal.
1236
- # :floating_literal::
1325
+ # :floating_literal ::
1237
1326
  # A floating point number literal.
1238
- # :imaginary_literal::
1327
+ # :imaginary_literal ::
1239
1328
  # An imaginary number literal.
1240
- # :string_literal::
1329
+ # :string_literal ::
1241
1330
  # A string literal.
1242
- # :character_literal::
1331
+ # :character_literal ::
1243
1332
  # A character literal.
1244
- # :paren_expr::
1333
+ # :paren_expr ::
1245
1334
  # A parenthesized expression, e.g. "(1)".
1246
1335
  #
1247
1336
  # This AST node is only formed if full location information is requested.
1248
- # :unary_operator::
1337
+ # :unary_operator ::
1249
1338
  # This represents the unary-expression's (except sizeof and
1250
1339
  # alignof).
1251
- # :array_subscript_expr::
1340
+ # :array_subscript_expr ::
1252
1341
  # (C99 6.5.2.1) Array Subscripting.
1253
- # :binary_operator::
1342
+ # :binary_operator ::
1254
1343
  # A builtin binary operation expression such as "x + y" or
1255
1344
  # "x <= y".
1256
- # :compound_assign_operator::
1345
+ # :compound_assign_operator ::
1257
1346
  # Compound assignment such as "+=".
1258
- # :conditional_operator::
1347
+ # :conditional_operator ::
1259
1348
  # The ?: ternary operator.
1260
- # :c_style_cast_expr::
1349
+ # :c_style_cast_expr ::
1261
1350
  # An explicit cast in C (C99 6.5.4) or a C-style cast in C++
1262
1351
  # (C++ (expr.cast)), which uses the syntax (Type)expr.
1263
1352
  #
1264
1353
  # For example: (int)f.
1265
- # :compound_literal_expr::
1354
+ # :compound_literal_expr ::
1266
1355
  # (C99 6.5.2.5)
1267
- # :init_list_expr::
1356
+ # :init_list_expr ::
1268
1357
  # Describes an C or C++ initializer list.
1269
- # :addr_label_expr::
1358
+ # :addr_label_expr ::
1270
1359
  # The GNU address of label extension, representing &&label.
1271
- # :stmt_expr::
1360
+ # :stmt_expr ::
1272
1361
  # This is the GNU Statement Expression extension: ({int X=4; X;})
1273
- # :generic_selection_expr::
1362
+ # :generic_selection_expr ::
1274
1363
  # Represents a C1X generic selection.
1275
- # :gnu_null_expr::
1364
+ # :gnu_null_expr ::
1276
1365
  # Implements the GNU __null extension, which is a name for a null
1277
1366
  # pointer constant that has integral type (e.g., int or long) and is the same
1278
1367
  # size and alignment as a pointer.
@@ -1280,15 +1369,15 @@ module Clang
1280
1369
  # The __null extension is typically only used by system headers, which define
1281
1370
  # NULL as __null in C++ rather than using 0 (which is an integer that may not
1282
1371
  # match the size of a pointer).
1283
- # :x_static_cast_expr::
1372
+ # :x_static_cast_expr ::
1284
1373
  # C++'s static_cast<> expression.
1285
- # :x_dynamic_cast_expr::
1374
+ # :x_dynamic_cast_expr ::
1286
1375
  # C++'s dynamic_cast<> expression.
1287
- # :x_reinterpret_cast_expr::
1376
+ # :x_reinterpret_cast_expr ::
1288
1377
  # C++'s reinterpret_cast<> expression.
1289
- # :x_const_cast_expr::
1378
+ # :x_const_cast_expr ::
1290
1379
  # C++'s const_cast<> expression.
1291
- # :x_functional_cast_expr::
1380
+ # :x_functional_cast_expr ::
1292
1381
  # Represents an explicit C++ type conversion that uses "functional"
1293
1382
  # notion (C++ (expr.type.conv)).
1294
1383
  #
@@ -1296,43 +1385,43 @@ module Clang
1296
1385
  # \code
1297
1386
  # x = int(0.5);
1298
1387
  # \endcode
1299
- # :x_typeid_expr::
1388
+ # :x_typeid_expr ::
1300
1389
  # A C++ typeid expression (C++ (expr.typeid)).
1301
- # :x_bool_literal_expr::
1390
+ # :x_bool_literal_expr ::
1302
1391
  # (C++ 2.13.5) C++ Boolean Literal.
1303
- # :x_null_ptr_literal_expr::
1392
+ # :x_null_ptr_literal_expr ::
1304
1393
  # (C++0x 2.14.7) C++ Pointer Literal.
1305
- # :x_this_expr::
1394
+ # :x_this_expr ::
1306
1395
  # Represents the "this" expression in C++
1307
- # :x_throw_expr::
1396
+ # :x_throw_expr ::
1308
1397
  # (C++ 15) C++ Throw Expression.
1309
1398
  #
1310
1399
  # This handles 'throw' and 'throw' assignment-expression. When
1311
1400
  # assignment-expression isn't present, Op will be null.
1312
- # :x_new_expr::
1401
+ # :x_new_expr ::
1313
1402
  # A new expression for memory allocation and constructor calls, e.g:
1314
1403
  # "new CXXNewExpr(foo)".
1315
- # :x_delete_expr::
1404
+ # :x_delete_expr ::
1316
1405
  # A delete expression for memory deallocation and destructor calls,
1317
1406
  # e.g. "delete() pArray".
1318
- # :unary_expr::
1407
+ # :unary_expr ::
1319
1408
  # A unary expression.
1320
- # :obj_c_string_literal::
1409
+ # :obj_c_string_literal ::
1321
1410
  # ObjCStringLiteral, used for Objective-C string literals i.e. "foo".
1322
- # :obj_c_encode_expr::
1411
+ # :obj_c_encode_expr ::
1323
1412
  # ObjCEncodeExpr, used for in Objective-C.
1324
- # :obj_c_selector_expr::
1413
+ # :obj_c_selector_expr ::
1325
1414
  # ObjCSelectorExpr used for in Objective-C.
1326
- # :obj_c_protocol_expr::
1415
+ # :obj_c_protocol_expr ::
1327
1416
  # Objective-C's protocol expression.
1328
- # :obj_c_bridged_cast_expr::
1417
+ # :obj_c_bridged_cast_expr ::
1329
1418
  # An Objective-C "bridged" cast expression, which casts between
1330
1419
  # Objective-C pointers and C pointers, transferring ownership in the process.
1331
1420
  #
1332
1421
  # \code
1333
1422
  # NSString *str = (__bridge_transfer NSString *)CFCreateString();
1334
1423
  # \endcode
1335
- # :pack_expansion_expr::
1424
+ # :pack_expansion_expr ::
1336
1425
  # Represents a C++0x pack expansion that produces a sequence of
1337
1426
  # expressions.
1338
1427
  #
@@ -1345,7 +1434,7 @@ module Clang
1345
1434
  # f(static_cast<Types&&>(args)...);
1346
1435
  # }
1347
1436
  # \endcode
1348
- # :size_of_pack_expr::
1437
+ # :size_of_pack_expr ::
1349
1438
  # Represents an expression that computes the length of a parameter
1350
1439
  # pack.
1351
1440
  #
@@ -1355,9 +1444,9 @@ module Clang
1355
1444
  # static const unsigned value = sizeof...(Types);
1356
1445
  # };
1357
1446
  # \endcode
1358
- # :first_stmt::
1447
+ # :first_stmt ::
1359
1448
  # Statements
1360
- # :unexposed_stmt::
1449
+ # :unexposed_stmt ::
1361
1450
  # A statement whose specific kind is not exposed via this
1362
1451
  # interface.
1363
1452
  #
@@ -1365,7 +1454,7 @@ module Clang
1365
1454
  # statement; one can extract their location information, spelling,
1366
1455
  # children, etc. However, the specific kind of the statement is not
1367
1456
  # reported.
1368
- # :label_stmt::
1457
+ # :label_stmt ::
1369
1458
  # A labelled statement in a function.
1370
1459
  #
1371
1460
  # This cursor kind is used to describe the "start_over:" label statement in
@@ -1375,102 +1464,102 @@ module Clang
1375
1464
  # start_over:
1376
1465
  # ++counter;
1377
1466
  # \endcode
1378
- # :compound_stmt::
1467
+ # :compound_stmt ::
1379
1468
  # A group of statements like { stmt stmt }.
1380
1469
  #
1381
1470
  # This cursor kind is used to describe compound statements, e.g. function
1382
1471
  # bodies.
1383
- # :case_stmt::
1472
+ # :case_stmt ::
1384
1473
  # A case statment.
1385
- # :default_stmt::
1474
+ # :default_stmt ::
1386
1475
  # A default statement.
1387
- # :if_stmt::
1476
+ # :if_stmt ::
1388
1477
  # An if statement
1389
- # :switch_stmt::
1478
+ # :switch_stmt ::
1390
1479
  # A switch statement.
1391
- # :while_stmt::
1480
+ # :while_stmt ::
1392
1481
  # A while statement.
1393
- # :do_stmt::
1482
+ # :do_stmt ::
1394
1483
  # A do statement.
1395
- # :for_stmt::
1484
+ # :for_stmt ::
1396
1485
  # A for statement.
1397
- # :goto_stmt::
1486
+ # :goto_stmt ::
1398
1487
  # A goto statement.
1399
- # :indirect_goto_stmt::
1488
+ # :indirect_goto_stmt ::
1400
1489
  # An indirect goto statement.
1401
- # :continue_stmt::
1490
+ # :continue_stmt ::
1402
1491
  # A continue statement.
1403
- # :break_stmt::
1492
+ # :break_stmt ::
1404
1493
  # A break statement.
1405
- # :return_stmt::
1494
+ # :return_stmt ::
1406
1495
  # A return statement.
1407
- # :asm_stmt::
1496
+ # :asm_stmt ::
1408
1497
  # A GNU inline assembly statement extension.
1409
- # :obj_c_at_try_stmt::
1498
+ # :obj_c_at_try_stmt ::
1410
1499
  # Objective-C's overall @try-@catc-@finall statement.
1411
- # :obj_c_at_catch_stmt::
1500
+ # :obj_c_at_catch_stmt ::
1412
1501
  # Objective-C's @catch statement.
1413
- # :obj_c_at_finally_stmt::
1502
+ # :obj_c_at_finally_stmt ::
1414
1503
  # Objective-C's @finally statement.
1415
- # :obj_c_at_throw_stmt::
1504
+ # :obj_c_at_throw_stmt ::
1416
1505
  # Objective-C's @throw statement.
1417
- # :obj_c_at_synchronized_stmt::
1506
+ # :obj_c_at_synchronized_stmt ::
1418
1507
  # Objective-C's @synchronized statement.
1419
- # :obj_c_autorelease_pool_stmt::
1508
+ # :obj_c_autorelease_pool_stmt ::
1420
1509
  # Objective-C's autorelease pool statement.
1421
- # :obj_c_for_collection_stmt::
1510
+ # :obj_c_for_collection_stmt ::
1422
1511
  # Objective-C's collection statement.
1423
- # :x_catch_stmt::
1512
+ # :x_catch_stmt ::
1424
1513
  # C++'s catch statement.
1425
- # :x_try_stmt::
1514
+ # :x_try_stmt ::
1426
1515
  # C++'s try statement.
1427
- # :x_for_range_stmt::
1516
+ # :x_for_range_stmt ::
1428
1517
  # C++'s for (* : *) statement.
1429
- # :seh_try_stmt::
1518
+ # :seh_try_stmt ::
1430
1519
  # Windows Structured Exception Handling's try statement.
1431
- # :seh_except_stmt::
1520
+ # :seh_except_stmt ::
1432
1521
  # Windows Structured Exception Handling's except statement.
1433
- # :seh_finally_stmt::
1522
+ # :seh_finally_stmt ::
1434
1523
  # Windows Structured Exception Handling's finally statement.
1435
- # :null_stmt::
1524
+ # :null_stmt ::
1436
1525
  # The null satement ";": C99 6.8.3p3.
1437
1526
  #
1438
1527
  # This cursor kind is used to describe the null statement.
1439
- # :decl_stmt::
1528
+ # :decl_stmt ::
1440
1529
  # Adaptor class for mixing declarations with statements and
1441
1530
  # expressions.
1442
- # :translation_unit::
1531
+ # :translation_unit ::
1443
1532
  # Cursor that represents the translation unit itself.
1444
1533
  #
1445
1534
  # The translation unit cursor exists primarily to act as the root
1446
1535
  # cursor for traversing the contents of a translation unit.
1447
- # :first_attr::
1536
+ # :first_attr ::
1448
1537
  # Attributes
1449
- # :unexposed_attr::
1538
+ # :unexposed_attr ::
1450
1539
  # An attribute whose specific kind is not exposed via this
1451
1540
  # interface.
1452
- # :ib_action_attr::
1541
+ # :ib_action_attr ::
1453
1542
  #
1454
- # :ib_outlet_attr::
1543
+ # :ib_outlet_attr ::
1455
1544
  #
1456
- # :ib_outlet_collection_attr::
1545
+ # :ib_outlet_collection_attr ::
1457
1546
  #
1458
- # :x_final_attr::
1547
+ # :x_final_attr ::
1459
1548
  #
1460
- # :x_override_attr::
1549
+ # :x_override_attr ::
1461
1550
  #
1462
- # :annotate_attr::
1551
+ # :annotate_attr ::
1463
1552
  #
1464
- # :preprocessing_directive::
1553
+ # :preprocessing_directive ::
1465
1554
  # Preprocessing
1466
- # :macro_definition::
1555
+ # :macro_definition ::
1467
1556
  #
1468
- # :macro_expansion::
1557
+ # :macro_expansion ::
1469
1558
  #
1470
- # :inclusion_directive::
1559
+ # :inclusion_directive ::
1471
1560
  #
1472
1561
  #
1473
- # @return [Array of Symbols]
1562
+ # @return [Array<Symbol>]
1474
1563
  def self.cursor_kind_enum
1475
1564
  [:unexposed_decl, :struct_decl, :union_decl, :class_decl, :enum_decl, :field_decl, :enum_constant_decl, :function_decl, :var_decl, :parm_decl, :obj_c_interface_decl, :obj_c_category_decl, :obj_c_protocol_decl, :obj_c_property_decl, :obj_c_ivar_decl, :obj_c_instance_method_decl, :obj_c_class_method_decl, :obj_c_implementation_decl, :obj_c_category_impl_decl, :typedef_decl, :x_method, :namespace, :linkage_spec, :constructor, :destructor, :conversion_function, :template_type_parameter, :non_type_template_parameter, :template_template_parameter, :function_template, :class_template, :class_template_partial_specialization, :namespace_alias, :using_directive, :using_declaration, :type_alias_decl, :obj_c_synthesize_decl, :obj_c_dynamic_decl, :x_access_specifier, :first_ref, :obj_c_super_class_ref, :obj_c_protocol_ref, :obj_c_class_ref, :type_ref, :x_base_specifier, :template_ref, :namespace_ref, :member_ref, :label_ref, :overloaded_decl_ref, :first_invalid, :invalid_file, :no_decl_found, :not_implemented, :invalid_code, :first_expr, :unexposed_expr, :decl_ref_expr, :member_ref_expr, :call_expr, :obj_c_message_expr, :block_expr, :integer_literal, :floating_literal, :imaginary_literal, :string_literal, :character_literal, :paren_expr, :unary_operator, :array_subscript_expr, :binary_operator, :compound_assign_operator, :conditional_operator, :c_style_cast_expr, :compound_literal_expr, :init_list_expr, :addr_label_expr, :stmt_expr, :generic_selection_expr, :gnu_null_expr, :x_static_cast_expr, :x_dynamic_cast_expr, :x_reinterpret_cast_expr, :x_const_cast_expr, :x_functional_cast_expr, :x_typeid_expr, :x_bool_literal_expr, :x_null_ptr_literal_expr, :x_this_expr, :x_throw_expr, :x_new_expr, :x_delete_expr, :unary_expr, :obj_c_string_literal, :obj_c_encode_expr, :obj_c_selector_expr, :obj_c_protocol_expr, :obj_c_bridged_cast_expr, :pack_expansion_expr, :size_of_pack_expr, :first_stmt, :unexposed_stmt, :label_stmt, :compound_stmt, :case_stmt, :default_stmt, :if_stmt, :switch_stmt, :while_stmt, :do_stmt, :for_stmt, :goto_stmt, :indirect_goto_stmt, :continue_stmt, :break_stmt, :return_stmt, :asm_stmt, :obj_c_at_try_stmt, :obj_c_at_catch_stmt, :obj_c_at_finally_stmt, :obj_c_at_throw_stmt, :obj_c_at_synchronized_stmt, :obj_c_autorelease_pool_stmt, :obj_c_for_collection_stmt, :x_catch_stmt, :x_try_stmt, :x_for_range_stmt, :seh_try_stmt, :seh_except_stmt, :seh_finally_stmt, :null_stmt, :decl_stmt, :translation_unit, :first_attr, :unexposed_attr, :ib_action_attr, :ib_outlet_attr, :ib_outlet_collection_attr, :x_final_attr, :x_override_attr, :annotate_attr, :preprocessing_directive, :macro_definition, :macro_expansion, :inclusion_directive]
1476
1565
  end
@@ -1622,6 +1711,31 @@ module Clang
1622
1711
  :inclusion_directive, 503
1623
1712
  ]
1624
1713
 
1714
+ # A cursor representing some element in the abstract syntax tree for
1715
+ # a translation unit.
1716
+ #
1717
+ # The cursor abstraction unifies the different kinds of entities in a
1718
+ # program--declaration, statements, expressions, references to declarations,
1719
+ # etc.--under a single "cursor" abstraction with a common set of operations.
1720
+ # Common operation for a cursor include: getting the physical location in
1721
+ # a source file where the cursor points, getting the name associated with a
1722
+ # cursor, and retrieving cursors for any child nodes of a particular cursor.
1723
+ #
1724
+ # Cursors can be produced in two specific ways.
1725
+ # clang_getTranslationUnitCursor() produces a cursor for a translation unit,
1726
+ # from which one can use clang_visitChildren() to explore the rest of the
1727
+ # translation unit. clang_getCursor() maps from a physical source location
1728
+ # to the entity that resides at that location, allowing one to map from the
1729
+ # source code into the AST.
1730
+ #
1731
+ # = Fields:
1732
+ # :kind ::
1733
+ # (Symbol from cursor_kind_enum)
1734
+ # :xdata ::
1735
+ # (Integer)
1736
+ # :data ::
1737
+ # (Array<FFI::Pointer(*Void)>)
1738
+ #
1625
1739
  class Cursor < FFI::Struct
1626
1740
  layout :kind, :cursor_kind,
1627
1741
  :xdata, :int,
@@ -1641,7 +1755,7 @@ module Clang
1641
1755
  # various declarations within the given translation unit.
1642
1756
  #
1643
1757
  # @method get_translation_unit_cursor(translation_unit)
1644
- # @param [FFI::Pointer of TranslationUnit] translation_unit
1758
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
1645
1759
  # @return [Cursor]
1646
1760
  # @scope class
1647
1761
  attach_function :get_translation_unit_cursor, :clang_getTranslationUnitCursor, [:pointer], Cursor.by_value
@@ -1681,8 +1795,8 @@ module Clang
1681
1795
 
1682
1796
  # Determine whether the given cursor kind represents a declaration.
1683
1797
  #
1684
- # @method is_declaration(cursor_kind_enum)
1685
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1798
+ # @method is_declaration(cursor_kind)
1799
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1686
1800
  # @return [Integer]
1687
1801
  # @scope class
1688
1802
  attach_function :is_declaration, :clang_isDeclaration, [:cursor_kind], :uint
@@ -1694,32 +1808,32 @@ module Clang
1694
1808
  # other cursors. Use clang_getCursorReferenced() to determine whether a
1695
1809
  # particular cursor refers to another entity.
1696
1810
  #
1697
- # @method is_reference(cursor_kind_enum)
1698
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1811
+ # @method is_reference(cursor_kind)
1812
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1699
1813
  # @return [Integer]
1700
1814
  # @scope class
1701
1815
  attach_function :is_reference, :clang_isReference, [:cursor_kind], :uint
1702
1816
 
1703
1817
  # Determine whether the given cursor kind represents an expression.
1704
1818
  #
1705
- # @method is_expression(cursor_kind_enum)
1706
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1819
+ # @method is_expression(cursor_kind)
1820
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1707
1821
  # @return [Integer]
1708
1822
  # @scope class
1709
1823
  attach_function :is_expression, :clang_isExpression, [:cursor_kind], :uint
1710
1824
 
1711
1825
  # Determine whether the given cursor kind represents a statement.
1712
1826
  #
1713
- # @method is_statement(cursor_kind_enum)
1714
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1827
+ # @method is_statement(cursor_kind)
1828
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1715
1829
  # @return [Integer]
1716
1830
  # @scope class
1717
1831
  attach_function :is_statement, :clang_isStatement, [:cursor_kind], :uint
1718
1832
 
1719
1833
  # Determine whether the given cursor kind represents an attribute.
1720
1834
  #
1721
- # @method is_attribute(cursor_kind_enum)
1722
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1835
+ # @method is_attribute(cursor_kind)
1836
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1723
1837
  # @return [Integer]
1724
1838
  # @scope class
1725
1839
  attach_function :is_attribute, :clang_isAttribute, [:cursor_kind], :uint
@@ -1727,8 +1841,8 @@ module Clang
1727
1841
  # Determine whether the given cursor kind represents an invalid
1728
1842
  # cursor.
1729
1843
  #
1730
- # @method is_invalid(cursor_kind_enum)
1731
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1844
+ # @method is_invalid(cursor_kind)
1845
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1732
1846
  # @return [Integer]
1733
1847
  # @scope class
1734
1848
  attach_function :is_invalid, :clang_isInvalid, [:cursor_kind], :uint
@@ -1736,8 +1850,8 @@ module Clang
1736
1850
  # Determine whether the given cursor kind represents a translation
1737
1851
  # unit.
1738
1852
  #
1739
- # @method is_translation_unit(cursor_kind_enum)
1740
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1853
+ # @method is_translation_unit(cursor_kind)
1854
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1741
1855
  # @return [Integer]
1742
1856
  # @scope class
1743
1857
  attach_function :is_translation_unit, :clang_isTranslationUnit, [:cursor_kind], :uint
@@ -1745,8 +1859,8 @@ module Clang
1745
1859
  # Determine whether the given cursor represents a preprocessing
1746
1860
  # element, such as a preprocessor directive or macro instantiation.
1747
1861
  #
1748
- # @method is_preprocessing(cursor_kind_enum)
1749
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1862
+ # @method is_preprocessing(cursor_kind)
1863
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1750
1864
  # @return [Integer]
1751
1865
  # @scope class
1752
1866
  attach_function :is_preprocessing, :clang_isPreprocessing, [:cursor_kind], :uint
@@ -1754,8 +1868,8 @@ module Clang
1754
1868
  # Determine whether the given cursor represents a currently
1755
1869
  # unexposed piece of the AST (e.g., CXCursor_UnexposedStmt).
1756
1870
  #
1757
- # @method is_unexposed(cursor_kind_enum)
1758
- # @param [Symbol from cursor_kind_enum] cursor_kind_enum
1871
+ # @method is_unexposed(cursor_kind)
1872
+ # @param [Symbol from cursor_kind_enum] cursor_kind
1759
1873
  # @return [Integer]
1760
1874
  # @scope class
1761
1875
  attach_function :is_unexposed, :clang_isUnexposed, [:cursor_kind], :uint
@@ -1763,21 +1877,21 @@ module Clang
1763
1877
  # Describe the linkage of the entity referred to by a cursor.
1764
1878
  #
1765
1879
  # === Options:
1766
- # :invalid::
1880
+ # :invalid ::
1767
1881
  # This value indicates that no linkage information is available
1768
1882
  # for a provided CXCursor.
1769
- # :no_linkage::
1883
+ # :no_linkage ::
1770
1884
  # This is the linkage for variables, parameters, and so on that
1771
1885
  # have automatic storage. This covers normal (non-extern) local variables.
1772
- # :internal::
1886
+ # :internal ::
1773
1887
  # This is the linkage for static variables and static functions.
1774
- # :unique_external::
1888
+ # :unique_external ::
1775
1889
  # This is the linkage for entities with external linkage that live
1776
1890
  # in C++ anonymous namespaces.
1777
- # :external::
1891
+ # :external ::
1778
1892
  # This is the linkage for entities with true, external linkage.
1779
1893
  #
1780
- # @return [Array of Symbols]
1894
+ # @return [Array<Symbol>]
1781
1895
  def self.linkage_kind_enum
1782
1896
  [:invalid, :no_linkage, :internal, :unique_external, :external]
1783
1897
  end
@@ -1808,16 +1922,16 @@ module Clang
1808
1922
  # Describe the "language" of the entity referred to by a cursor.
1809
1923
  #
1810
1924
  # === Options:
1811
- # :invalid::
1925
+ # :invalid ::
1812
1926
  #
1813
- # :c::
1927
+ # :c ::
1814
1928
  #
1815
- # :obj_c::
1929
+ # :obj_c ::
1816
1930
  #
1817
- # :c_plus_plus::
1931
+ # :c_plus_plus ::
1818
1932
  #
1819
1933
  #
1820
- # @return [Array of Symbols]
1934
+ # @return [Array<Symbol>]
1821
1935
  def self.language_kind_enum
1822
1936
  [:invalid, :c, :obj_c, :c_plus_plus]
1823
1937
  end
@@ -1840,21 +1954,28 @@ module Clang
1840
1954
  #
1841
1955
  # @method cursor_get_translation_unit(cursor)
1842
1956
  # @param [Cursor] cursor
1843
- # @return [FFI::Pointer of TranslationUnit]
1957
+ # @return [FFI::Pointer(TranslationUnit)]
1844
1958
  # @scope class
1845
1959
  attach_function :cursor_get_translation_unit, :clang_Cursor_getTranslationUnit, [Cursor.by_value], :pointer
1846
1960
 
1961
+ # A fast container representing a set of CXCursors.
1962
+ #
1963
+ # = Fields:
1964
+ #
1965
+ class CursorSetImpl < FFI::Struct
1966
+ end
1967
+
1847
1968
  # Creates an empty CXCursorSet.
1848
1969
  #
1849
1970
  # @method create_cx_cursor_set()
1850
- # @return [FFI::Pointer of CursorSet]
1971
+ # @return [FFI::Pointer(CursorSet)]
1851
1972
  # @scope class
1852
1973
  attach_function :create_cx_cursor_set, :clang_createCXCursorSet, [], :pointer
1853
1974
 
1854
1975
  # Disposes a CXCursorSet and releases its associated memory.
1855
1976
  #
1856
1977
  # @method dispose_cx_cursor_set(cset)
1857
- # @param [FFI::Pointer of CursorSet] cset
1978
+ # @param [FFI::Pointer(CursorSet)] cset
1858
1979
  # @return [nil]
1859
1980
  # @scope class
1860
1981
  attach_function :dispose_cx_cursor_set, :clang_disposeCXCursorSet, [:pointer], :void
@@ -1862,7 +1983,7 @@ module Clang
1862
1983
  # Queries a CXCursorSet to see if it contains a specific CXCursor.
1863
1984
  #
1864
1985
  # @method cx_cursor_set_contains(cset, cursor)
1865
- # @param [FFI::Pointer of CursorSet] cset
1986
+ # @param [FFI::Pointer(CursorSet)] cset
1866
1987
  # @param [Cursor] cursor
1867
1988
  # @return [Integer] non-zero if the set contains the specified cursor.
1868
1989
  # @scope class
@@ -1871,7 +1992,7 @@ module Clang
1871
1992
  # Inserts a CXCursor into a CXCursorSet.
1872
1993
  #
1873
1994
  # @method cx_cursor_set_insert(cset, cursor)
1874
- # @param [FFI::Pointer of CursorSet] cset
1995
+ # @param [FFI::Pointer(CursorSet)] cset
1875
1996
  # @param [Cursor] cursor
1876
1997
  # @return [Integer] zero if the CXCursor was already in the set, and non-zero otherwise.
1877
1998
  # @scope class
@@ -1985,12 +2106,12 @@ module Clang
1985
2106
  # @param [Cursor] cursor A cursor representing an Objective-C or C++
1986
2107
  # method. This routine will compute the set of methods that this
1987
2108
  # method overrides.
1988
- # @param [FFI::Pointer to ] overridden A pointer whose pointee will be replaced with a
2109
+ # @param [FFI::Pointer(**Cursor)] overridden A pointer whose pointee will be replaced with a
1989
2110
  # pointer to an array of cursors, representing the set of overridden
1990
2111
  # methods. If there are no overridden methods, the pointee will be
1991
2112
  # set to NULL. The pointee must be freed via a call to
1992
2113
  # \c clang_disposeOverriddenCursors().
1993
- # @param [FFI::Pointer to ] num_overridden A pointer to the number of overridden
2114
+ # @param [FFI::Pointer(*UInt)] num_overridden A pointer to the number of overridden
1994
2115
  # functions, will be set to the number of overridden functions in the
1995
2116
  # array pointed to by \p overridden.
1996
2117
  # @return [nil]
@@ -2001,7 +2122,7 @@ module Clang
2001
2122
  # clang_getOverriddenCursors().
2002
2123
  #
2003
2124
  # @method dispose_overridden_cursors(overridden)
2004
- # @param [FFI::Pointer to ] overridden
2125
+ # @param [FFI::Pointer(*Cursor)] overridden
2005
2126
  # @return [nil]
2006
2127
  # @scope class
2007
2128
  attach_function :dispose_overridden_cursors, :clang_disposeOverriddenCursors, [:pointer], :void
@@ -2011,7 +2132,7 @@ module Clang
2011
2132
  #
2012
2133
  # @method get_included_file(cursor)
2013
2134
  # @param [Cursor] cursor
2014
- # @return [FFI::Pointer of File]
2135
+ # @return [FFI::Pointer(File)]
2015
2136
  # @scope class
2016
2137
  attach_function :get_included_file, :clang_getIncludedFile, [Cursor.by_value], :pointer
2017
2138
 
@@ -2027,7 +2148,7 @@ module Clang
2027
2148
  # will return a cursor referring to the "+" expression.
2028
2149
  #
2029
2150
  # @method get_cursor(translation_unit, source_location)
2030
- # @param [FFI::Pointer of TranslationUnit] translation_unit
2151
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
2031
2152
  # @param [SourceLocation] source_location
2032
2153
  # @return [Cursor] a cursor representing the entity at the given source location, or
2033
2154
  # a NULL cursor if no such entity can be found.
@@ -2068,95 +2189,95 @@ module Clang
2068
2189
  # Describes the kind of type
2069
2190
  #
2070
2191
  # === Options:
2071
- # :invalid::
2192
+ # :invalid ::
2072
2193
  # Reprents an invalid type (e.g., where no type is available).
2073
- # :unexposed::
2194
+ # :unexposed ::
2074
2195
  # A type whose specific kind is not exposed via this
2075
2196
  # interface.
2076
- # :void::
2197
+ # :void ::
2077
2198
  # Builtin types
2078
- # :bool::
2199
+ # :bool ::
2079
2200
  #
2080
- # :char_u::
2201
+ # :char_u ::
2081
2202
  #
2082
- # :u_char::
2203
+ # :u_char ::
2083
2204
  #
2084
- # :char16::
2205
+ # :char16 ::
2085
2206
  #
2086
- # :char32::
2207
+ # :char32 ::
2087
2208
  #
2088
- # :u_short::
2209
+ # :u_short ::
2089
2210
  #
2090
- # :u_int::
2211
+ # :u_int ::
2091
2212
  #
2092
- # :u_long::
2213
+ # :u_long ::
2093
2214
  #
2094
- # :u_long_long::
2215
+ # :u_long_long ::
2095
2216
  #
2096
- # :u_int128::
2217
+ # :u_int128 ::
2097
2218
  #
2098
- # :char_s::
2219
+ # :char_s ::
2099
2220
  #
2100
- # :s_char::
2221
+ # :s_char ::
2101
2222
  #
2102
- # :w_char::
2223
+ # :w_char ::
2103
2224
  #
2104
- # :short::
2225
+ # :short ::
2105
2226
  #
2106
- # :int::
2227
+ # :int ::
2107
2228
  #
2108
- # :long::
2229
+ # :long ::
2109
2230
  #
2110
- # :long_long::
2231
+ # :long_long ::
2111
2232
  #
2112
- # :int128::
2233
+ # :int128 ::
2113
2234
  #
2114
- # :float::
2235
+ # :float ::
2115
2236
  #
2116
- # :double::
2237
+ # :double ::
2117
2238
  #
2118
- # :long_double::
2239
+ # :long_double ::
2119
2240
  #
2120
- # :null_ptr::
2241
+ # :null_ptr ::
2121
2242
  #
2122
- # :overload::
2243
+ # :overload ::
2123
2244
  #
2124
- # :dependent::
2245
+ # :dependent ::
2125
2246
  #
2126
- # :obj_c_id::
2247
+ # :obj_c_id ::
2127
2248
  #
2128
- # :obj_c_class::
2249
+ # :obj_c_class ::
2129
2250
  #
2130
- # :obj_c_sel::
2251
+ # :obj_c_sel ::
2131
2252
  #
2132
- # :complex::
2253
+ # :complex ::
2133
2254
  #
2134
- # :pointer::
2255
+ # :pointer ::
2135
2256
  #
2136
- # :block_pointer::
2257
+ # :block_pointer ::
2137
2258
  #
2138
- # :l_value_reference::
2259
+ # :l_value_reference ::
2139
2260
  #
2140
- # :r_value_reference::
2261
+ # :r_value_reference ::
2141
2262
  #
2142
- # :record::
2263
+ # :record ::
2143
2264
  #
2144
- # :enum::
2265
+ # :enum ::
2145
2266
  #
2146
- # :typedef::
2267
+ # :typedef ::
2147
2268
  #
2148
- # :obj_c_interface::
2269
+ # :obj_c_interface ::
2149
2270
  #
2150
- # :obj_c_object_pointer::
2271
+ # :obj_c_object_pointer ::
2151
2272
  #
2152
- # :function_no_proto::
2273
+ # :function_no_proto ::
2153
2274
  #
2154
- # :function_proto::
2275
+ # :function_proto ::
2155
2276
  #
2156
- # :constant_array::
2277
+ # :constant_array ::
2157
2278
  #
2158
2279
  #
2159
- # @return [Array of Symbols]
2280
+ # @return [Array<Symbol>]
2160
2281
  def self.type_kind_enum
2161
2282
  [:invalid, :unexposed, :void, :bool, :char_u, :u_char, :char16, :char32, :u_short, :u_int, :u_long, :u_long_long, :u_int128, :char_s, :s_char, :w_char, :short, :int, :long, :long_long, :int128, :float, :double, :long_double, :null_ptr, :overload, :dependent, :obj_c_id, :obj_c_class, :obj_c_sel, :complex, :pointer, :block_pointer, :l_value_reference, :r_value_reference, :record, :enum, :typedef, :obj_c_interface, :obj_c_object_pointer, :function_no_proto, :function_proto, :constant_array]
2162
2283
  end
@@ -2206,6 +2327,14 @@ module Clang
2206
2327
  :constant_array, 112
2207
2328
  ]
2208
2329
 
2330
+ # The type of an element in the abstract syntax tree.
2331
+ #
2332
+ # = Fields:
2333
+ # :kind ::
2334
+ # (Symbol from type_kind_enum)
2335
+ # :data ::
2336
+ # (Array<FFI::Pointer(*Void)>)
2337
+ #
2209
2338
  class Type < FFI::Struct
2210
2339
  layout :kind, :type_kind,
2211
2340
  :data, [:pointer, 2]
@@ -2360,16 +2489,16 @@ module Clang
2360
2489
  # cursor with kind CX_CXXBaseSpecifier.
2361
2490
  #
2362
2491
  # === Options:
2363
- # :x_invalid_access_specifier::
2492
+ # :x_invalid_access_specifier ::
2364
2493
  #
2365
- # :x_public::
2494
+ # :x_public ::
2366
2495
  #
2367
- # :x_protected::
2496
+ # :x_protected ::
2368
2497
  #
2369
- # :x_private::
2498
+ # :x_private ::
2370
2499
  #
2371
2500
  #
2372
- # @return [Array of Symbols]
2501
+ # @return [Array<Symbol>]
2373
2502
  def self.cxx_access_specifier_enum
2374
2503
  [:x_invalid_access_specifier, :x_public, :x_protected, :x_private]
2375
2504
  end
@@ -2430,16 +2559,16 @@ module Clang
2430
2559
  # \c CXCursorVisitor to indicate how clang_visitChildren() proceed.
2431
2560
  #
2432
2561
  # === Options:
2433
- # :break::
2562
+ # :break ::
2434
2563
  # Terminates the cursor traversal.
2435
- # :continue::
2564
+ # :continue ::
2436
2565
  # Continues the cursor traversal with the next sibling of
2437
2566
  # the cursor just visited, without visiting its children.
2438
- # :recurse::
2567
+ # :recurse ::
2439
2568
  # Recursively traverse the children of this cursor, using
2440
2569
  # the same visitor and client data.
2441
2570
  #
2442
- # @return [Array of Symbols]
2571
+ # @return [Array<Symbol>]
2443
2572
  def self.child_visit_result_enum
2444
2573
  [:break, :continue, :recurse]
2445
2574
  end
@@ -2449,6 +2578,25 @@ module Clang
2449
2578
  :recurse
2450
2579
  ]
2451
2580
 
2581
+ # <em>This is no real method. This entry is only for documentation of the callback.</em>
2582
+ #
2583
+ # Visitor invoked for each cursor found by a traversal.
2584
+ #
2585
+ # This visitor function will be invoked for each cursor found by
2586
+ # clang_visitCursorChildren(). Its first argument is the cursor being
2587
+ # visited, its second argument is the parent visitor for that cursor,
2588
+ # and its third argument is the client data provided to
2589
+ # clang_visitCursorChildren().
2590
+ #
2591
+ # The visitor should return one of the \c CXChildVisitResult values
2592
+ # to direct clang_visitCursorChildren().
2593
+ #
2594
+ # @method cursor_visitor_callback(cursor, parent, client_data)
2595
+ # @param [Cursor] cursor
2596
+ # @param [Cursor] parent
2597
+ # @param [FFI::Pointer(ClientData)] client_data
2598
+ # @return [Symbol from child_visit_result_enum]
2599
+ # @scope class
2452
2600
  callback :cursor_visitor, [Cursor.by_value, Cursor.by_value, :pointer], :child_visit_result
2453
2601
 
2454
2602
  # Visit the children of a particular cursor.
@@ -2463,9 +2611,9 @@ module Clang
2463
2611
  # @param [Cursor] parent the cursor whose child may be visited. All kinds of
2464
2612
  # cursors can be visited, including invalid cursors (which, by
2465
2613
  # definition, have no children).
2466
- # @param [Callback] visitor the visitor function that will be invoked for each
2614
+ # @param [Proc(cursor_visitor_callback)] visitor the visitor function that will be invoked for each
2467
2615
  # child of \p parent.
2468
- # @param [FFI::Pointer of ClientData] client_data pointer data supplied by the client, which will
2616
+ # @param [FFI::Pointer(ClientData)] client_data pointer data supplied by the client, which will
2469
2617
  # be passed to the visitor each time it is invoked.
2470
2618
  # @return [Integer] a non-zero value if the traversal was terminated
2471
2619
  # prematurely by the visitor returning \c CXChildVisit_Break.
@@ -2732,14 +2880,16 @@ module Clang
2732
2880
  # @scope class
2733
2881
  attach_function :get_cursor_reference_name_range, :clang_getCursorReferenceNameRange, [Cursor.by_value, :uint, :uint], SourceRange.by_value
2734
2882
 
2883
+ # (Not documented)
2884
+ #
2735
2885
  # === Options:
2736
- # :want_qualifier::
2886
+ # :want_qualifier ::
2737
2887
  # Include the nested-name-specifier, e.g. Foo:: in x.Foo::y, in the
2738
2888
  # range.
2739
- # :want_template_args::
2889
+ # :want_template_args ::
2740
2890
  # Include the explicit template arguments, e.g. <int> in x.f<int>, in
2741
2891
  # the range.
2742
- # :want_single_piece::
2892
+ # :want_single_piece ::
2743
2893
  # If the name is non-contiguous, return the full spanning range.
2744
2894
  #
2745
2895
  # Non-contiguous names occur in Objective-C when a selector with two or more
@@ -2749,7 +2899,7 @@ module Clang
2749
2899
  # return some_vector(1); // C++
2750
2900
  # \endcode
2751
2901
  #
2752
- # @return [Array of Symbols]
2902
+ # @return [Array<Symbol>]
2753
2903
  def self.name_ref_flags_enum
2754
2904
  [:want_qualifier, :want_template_args, :want_single_piece]
2755
2905
  end
@@ -2762,18 +2912,18 @@ module Clang
2762
2912
  # Describes a kind of token.
2763
2913
  #
2764
2914
  # === Options:
2765
- # :punctuation::
2915
+ # :punctuation ::
2766
2916
  # A token that contains some kind of punctuation.
2767
- # :keyword::
2917
+ # :keyword ::
2768
2918
  # A language keyword.
2769
- # :identifier::
2919
+ # :identifier ::
2770
2920
  # An identifier (that is not a keyword).
2771
- # :literal::
2921
+ # :literal ::
2772
2922
  # A numeric, string, or character literal.
2773
- # :comment::
2923
+ # :comment ::
2774
2924
  # A comment.
2775
2925
  #
2776
- # @return [Array of Symbols]
2926
+ # @return [Array<Symbol>]
2777
2927
  def self.token_kind_enum
2778
2928
  [:punctuation, :keyword, :identifier, :literal, :comment]
2779
2929
  end
@@ -2785,6 +2935,14 @@ module Clang
2785
2935
  :comment
2786
2936
  ]
2787
2937
 
2938
+ # Describes a single preprocessing token.
2939
+ #
2940
+ # = Fields:
2941
+ # :int_data ::
2942
+ # (Array<Integer>)
2943
+ # :ptr_data ::
2944
+ # (FFI::Pointer(*Void))
2945
+ #
2788
2946
  class Token < FFI::Struct
2789
2947
  layout :int_data, [:uint, 4],
2790
2948
  :ptr_data, :pointer
@@ -2804,7 +2962,7 @@ module Clang
2804
2962
  # the text of an identifier or keyword.
2805
2963
  #
2806
2964
  # @method get_token_spelling(translation_unit, token)
2807
- # @param [FFI::Pointer of TranslationUnit] translation_unit
2965
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
2808
2966
  # @param [Token] token
2809
2967
  # @return [String]
2810
2968
  # @scope class
@@ -2813,7 +2971,7 @@ module Clang
2813
2971
  # Retrieve the source location of the given token.
2814
2972
  #
2815
2973
  # @method get_token_location(translation_unit, token)
2816
- # @param [FFI::Pointer of TranslationUnit] translation_unit
2974
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
2817
2975
  # @param [Token] token
2818
2976
  # @return [SourceLocation]
2819
2977
  # @scope class
@@ -2822,7 +2980,7 @@ module Clang
2822
2980
  # Retrieve a source range that covers the given token.
2823
2981
  #
2824
2982
  # @method get_token_extent(translation_unit, token)
2825
- # @param [FFI::Pointer of TranslationUnit] translation_unit
2983
+ # @param [FFI::Pointer(TranslationUnit)] translation_unit
2826
2984
  # @param [Token] token
2827
2985
  # @return [SourceRange]
2828
2986
  # @scope class
@@ -2832,13 +2990,13 @@ module Clang
2832
2990
  # lexical tokens.
2833
2991
  #
2834
2992
  # @method tokenize(tu, range, tokens, num_tokens)
2835
- # @param [FFI::Pointer of TranslationUnit] tu the translation unit whose text is being tokenized.
2993
+ # @param [FFI::Pointer(TranslationUnit)] tu the translation unit whose text is being tokenized.
2836
2994
  # @param [SourceRange] range the source range in which text should be tokenized. All of the
2837
2995
  # tokens produced by tokenization will fall within this source range,
2838
- # @param [FFI::Pointer to ] tokens this pointer will be set to point to the array of tokens
2996
+ # @param [FFI::Pointer(**Token)] tokens this pointer will be set to point to the array of tokens
2839
2997
  # that occur within the given source range. The returned pointer must be
2840
2998
  # freed with clang_disposeTokens() before the translation unit is destroyed.
2841
- # @param [FFI::Pointer to ] num_tokens will be set to the number of tokens in the \c *Tokens
2999
+ # @param [FFI::Pointer(*UInt)] num_tokens will be set to the number of tokens in the \c *Tokens
2842
3000
  # array.
2843
3001
  # @return [nil]
2844
3002
  # @scope class
@@ -2865,10 +3023,10 @@ module Clang
2865
3023
  # not provided as an annotation.
2866
3024
  #
2867
3025
  # @method annotate_tokens(tu, tokens, num_tokens, cursors)
2868
- # @param [FFI::Pointer of TranslationUnit] tu the translation unit that owns the given tokens.
2869
- # @param [FFI::Pointer to ] tokens the set of tokens to annotate.
3026
+ # @param [FFI::Pointer(TranslationUnit)] tu the translation unit that owns the given tokens.
3027
+ # @param [FFI::Pointer(*Token)] tokens the set of tokens to annotate.
2870
3028
  # @param [Integer] num_tokens the number of tokens in \p Tokens.
2871
- # @param [FFI::Pointer to ] cursors an array of \p NumTokens cursors, whose contents will be
3029
+ # @param [FFI::Pointer(*Cursor)] cursors an array of \p NumTokens cursors, whose contents will be
2872
3030
  # replaced with the cursors corresponding to each token.
2873
3031
  # @return [nil]
2874
3032
  # @scope class
@@ -2877,8 +3035,8 @@ module Clang
2877
3035
  # Free the given set of tokens.
2878
3036
  #
2879
3037
  # @method dispose_tokens(tu, tokens, num_tokens)
2880
- # @param [FFI::Pointer of TranslationUnit] tu
2881
- # @param [FFI::Pointer to ] tokens
3038
+ # @param [FFI::Pointer(TranslationUnit)] tu
3039
+ # @param [FFI::Pointer(*Token)] tokens
2882
3040
  # @param [Integer] num_tokens
2883
3041
  # @return [nil]
2884
3042
  # @scope class
@@ -2892,31 +3050,53 @@ module Clang
2892
3050
  # @scope class
2893
3051
  attach_function :get_cursor_kind_spelling, :clang_getCursorKindSpelling, [:cursor_kind], String.by_value
2894
3052
 
3053
+ # (Not documented)
3054
+ #
2895
3055
  # @method get_definition_spelling_and_extent(cursor, start_buf, end_buf, start_line, start_column, end_line, end_column)
2896
3056
  # @param [Cursor] cursor
2897
- # @param [FFI::Pointer to ] start_buf
2898
- # @param [FFI::Pointer to ] end_buf
2899
- # @param [FFI::Pointer to ] start_line
2900
- # @param [FFI::Pointer to ] start_column
2901
- # @param [FFI::Pointer to ] end_line
2902
- # @param [FFI::Pointer to ] end_column
3057
+ # @param [FFI::Pointer(**Char_S)] start_buf
3058
+ # @param [FFI::Pointer(**Char_S)] end_buf
3059
+ # @param [FFI::Pointer(*UInt)] start_line
3060
+ # @param [FFI::Pointer(*UInt)] start_column
3061
+ # @param [FFI::Pointer(*UInt)] end_line
3062
+ # @param [FFI::Pointer(*UInt)] end_column
2903
3063
  # @return [nil]
2904
3064
  # @scope class
2905
3065
  attach_function :get_definition_spelling_and_extent, :clang_getDefinitionSpellingAndExtent, [Cursor.by_value, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :void
2906
3066
 
3067
+ # (Not documented)
3068
+ #
2907
3069
  # @method enable_stack_traces()
2908
3070
  # @return [nil]
2909
3071
  # @scope class
2910
3072
  attach_function :enable_stack_traces, :clang_enableStackTraces, [], :void
2911
3073
 
3074
+ # (Not documented)
3075
+ #
2912
3076
  # @method execute_on_thread(fn, user_data, stack_size)
2913
- # @param [FFI::Pointer to ] fn
2914
- # @param [FFI::Pointer to ] user_data
3077
+ # @param [FFI::Pointer(*)] fn
3078
+ # @param [FFI::Pointer(*Void)] user_data
2915
3079
  # @param [Integer] stack_size
2916
3080
  # @return [nil]
2917
3081
  # @scope class
2918
3082
  attach_function :execute_on_thread, :clang_executeOnThread, [:pointer, :pointer, :uint], :void
2919
3083
 
3084
+ # A single result of code completion.
3085
+ #
3086
+ # = Fields:
3087
+ # :cursor_kind ::
3088
+ # (Symbol from cursor_kind_enum) The kind of entity that this completion refers to.
3089
+ #
3090
+ # The cursor kind will be a macro, keyword, or a declaration (one of the
3091
+ # *Decl cursor kinds), describing the entity that the completion is
3092
+ # referring to.
3093
+ #
3094
+ # \todo In the future, we would like to provide a full cursor, to allow
3095
+ # the client to extract additional information from declaration.
3096
+ # :completion_string ::
3097
+ # (FFI::Pointer(CompletionString)) The code-completion string that describes how to insert this
3098
+ # code-completion result into the editing buffer.
3099
+ #
2920
3100
  class CompletionResult < FFI::Struct
2921
3101
  layout :cursor_kind, :cursor_kind,
2922
3102
  :completion_string, :pointer
@@ -2929,7 +3109,7 @@ module Clang
2929
3109
  # should be interpreted by the client or is another completion string.
2930
3110
  #
2931
3111
  # === Options:
2932
- # :optional::
3112
+ # :optional ::
2933
3113
  # A code-completion string that describes "optional" text that
2934
3114
  # could be a part of the template (but is not required).
2935
3115
  #
@@ -2961,7 +3141,7 @@ module Clang
2961
3141
  # function "f" would only include the first parameter ("int x").
2962
3142
  # - Fully expand all optional chunks, in which case the template for the
2963
3143
  # function "f" would have all of the parameters.
2964
- # :typed_text::
3144
+ # :typed_text ::
2965
3145
  # Text that a user would be expected to type to get this
2966
3146
  # code-completion result.
2967
3147
  #
@@ -2970,13 +3150,13 @@ module Clang
2970
3150
  # declaration that could be used at the current code point. Clients are
2971
3151
  # expected to filter the code-completion results based on the text in this
2972
3152
  # chunk.
2973
- # :text::
3153
+ # :text ::
2974
3154
  # Text that should be inserted as part of a code-completion result.
2975
3155
  #
2976
3156
  # A "text" chunk represents text that is part of the template to be
2977
3157
  # inserted into user code should this particular code-completion result
2978
3158
  # be selected.
2979
- # :placeholder::
3159
+ # :placeholder ::
2980
3160
  # Placeholder text that should be replaced by the user.
2981
3161
  #
2982
3162
  # A "placeholder" chunk marks a place where the user should insert text
@@ -2985,7 +3165,7 @@ module Clang
2985
3165
  # user should provide arguments for each of those parameters. The actual
2986
3166
  # text in a placeholder is a suggestion for the text to display before
2987
3167
  # the user replaces the placeholder with real code.
2988
- # :informative::
3168
+ # :informative ::
2989
3169
  # Informative text that should be displayed but never inserted as
2990
3170
  # part of the template.
2991
3171
  #
@@ -2993,7 +3173,7 @@ module Clang
2993
3173
  # help the user decide whether a particular code-completion result is the
2994
3174
  # right option, but which is not part of the actual template to be inserted
2995
3175
  # by code completion.
2996
- # :current_parameter::
3176
+ # :current_parameter ::
2997
3177
  # Text that describes the current parameter when code-completion is
2998
3178
  # referring to function call, message send, or template specialization.
2999
3179
  #
@@ -3011,45 +3191,45 @@ module Clang
3011
3191
  # parameter. After typing further, to \c add(17, (where the code-completion
3012
3192
  # point is after the ","), the code-completion string will contain a
3013
3193
  # "current paremeter" chunk to "int y".
3014
- # :left_paren::
3194
+ # :left_paren ::
3015
3195
  # A left parenthesis ('('), used to initiate a function call or
3016
3196
  # signal the beginning of a function parameter list.
3017
- # :right_paren::
3197
+ # :right_paren ::
3018
3198
  # A right parenthesis (')'), used to finish a function call or
3019
3199
  # signal the end of a function parameter list.
3020
- # :left_bracket::
3200
+ # :left_bracket ::
3021
3201
  # A left bracket ('(').
3022
- # :right_bracket::
3202
+ # :right_bracket ::
3023
3203
  # A right bracket (')').
3024
- # :left_brace::
3204
+ # :left_brace ::
3025
3205
  # A left brace ('{').
3026
- # :right_brace::
3206
+ # :right_brace ::
3027
3207
  # A right brace ('}').
3028
- # :left_angle::
3208
+ # :left_angle ::
3029
3209
  # A left angle bracket ('<').
3030
- # :right_angle::
3210
+ # :right_angle ::
3031
3211
  # A right angle bracket ('>').
3032
- # :comma::
3212
+ # :comma ::
3033
3213
  # A comma separator (',').
3034
- # :result_type::
3214
+ # :result_type ::
3035
3215
  # Text that specifies the result type of a given result.
3036
3216
  #
3037
3217
  # This special kind of informative chunk is not meant to be inserted into
3038
3218
  # the text buffer. Rather, it is meant to illustrate the type that an
3039
3219
  # expression using the given completion string would have.
3040
- # :colon::
3220
+ # :colon ::
3041
3221
  # A colon (':').
3042
- # :semi_colon::
3222
+ # :semi_colon ::
3043
3223
  # A semicolon (';').
3044
- # :equal::
3224
+ # :equal ::
3045
3225
  # An '=' sign.
3046
- # :horizontal_space::
3226
+ # :horizontal_space ::
3047
3227
  # Horizontal space (' ').
3048
- # :vertical_space::
3228
+ # :vertical_space ::
3049
3229
  # Vertical space ('\n'), after which it is generally a good idea to
3050
3230
  # perform indentation.
3051
3231
  #
3052
- # @return [Array of Symbols]
3232
+ # @return [Array<Symbol>]
3053
3233
  def self.completion_chunk_kind_enum
3054
3234
  [:optional, :typed_text, :text, :placeholder, :informative, :current_parameter, :left_paren, :right_paren, :left_bracket, :right_bracket, :left_brace, :right_brace, :left_angle, :right_angle, :comma, :result_type, :colon, :semi_colon, :equal, :horizontal_space, :vertical_space]
3055
3235
  end
@@ -3080,7 +3260,7 @@ module Clang
3080
3260
  # Determine the kind of a particular chunk within a completion string.
3081
3261
  #
3082
3262
  # @method get_completion_chunk_kind(completion_string, chunk_number)
3083
- # @param [FFI::Pointer of CompletionString] completion_string the completion string to query.
3263
+ # @param [FFI::Pointer(CompletionString)] completion_string the completion string to query.
3084
3264
  # @param [Integer] chunk_number the 0-based index of the chunk in the completion string.
3085
3265
  # @return [Symbol from completion_chunk_kind_enum] the kind of the chunk at the index \c chunk_number.
3086
3266
  # @scope class
@@ -3090,7 +3270,7 @@ module Clang
3090
3270
  # completion string.
3091
3271
  #
3092
3272
  # @method get_completion_chunk_text(completion_string, chunk_number)
3093
- # @param [FFI::Pointer of CompletionString] completion_string the completion string to query.
3273
+ # @param [FFI::Pointer(CompletionString)] completion_string the completion string to query.
3094
3274
  # @param [Integer] chunk_number the 0-based index of the chunk in the completion string.
3095
3275
  # @return [String] the text associated with the chunk at index \c chunk_number.
3096
3276
  # @scope class
@@ -3100,9 +3280,9 @@ module Clang
3100
3280
  # within a completion string.
3101
3281
  #
3102
3282
  # @method get_completion_chunk_completion_string(completion_string, chunk_number)
3103
- # @param [FFI::Pointer of CompletionString] completion_string the completion string to query.
3283
+ # @param [FFI::Pointer(CompletionString)] completion_string the completion string to query.
3104
3284
  # @param [Integer] chunk_number the 0-based index of the chunk in the completion string.
3105
- # @return [FFI::Pointer of CompletionString] the completion string associated with the chunk at index
3285
+ # @return [FFI::Pointer(CompletionString)] the completion string associated with the chunk at index
3106
3286
  # \c chunk_number.
3107
3287
  # @scope class
3108
3288
  attach_function :get_completion_chunk_completion_string, :clang_getCompletionChunkCompletionString, [:pointer, :uint], :pointer
@@ -3110,7 +3290,7 @@ module Clang
3110
3290
  # Retrieve the number of chunks in the given code-completion string.
3111
3291
  #
3112
3292
  # @method get_num_completion_chunks(completion_string)
3113
- # @param [FFI::Pointer of CompletionString] completion_string
3293
+ # @param [FFI::Pointer(CompletionString)] completion_string
3114
3294
  # @return [Integer]
3115
3295
  # @scope class
3116
3296
  attach_function :get_num_completion_chunks, :clang_getNumCompletionChunks, [:pointer], :uint
@@ -3122,7 +3302,7 @@ module Clang
3122
3302
  # priority is selected by various internal heuristics.
3123
3303
  #
3124
3304
  # @method get_completion_priority(completion_string)
3125
- # @param [FFI::Pointer of CompletionString] completion_string The completion string to query.
3305
+ # @param [FFI::Pointer(CompletionString)] completion_string The completion string to query.
3126
3306
  # @return [Integer] The priority of this completion string. Smaller values indicate
3127
3307
  # higher-priority (more likely) completions.
3128
3308
  # @scope class
@@ -3132,7 +3312,7 @@ module Clang
3132
3312
  # string refers to.
3133
3313
  #
3134
3314
  # @method get_completion_availability(completion_string)
3135
- # @param [FFI::Pointer of CompletionString] completion_string The completion string to query.
3315
+ # @param [FFI::Pointer(CompletionString)] completion_string The completion string to query.
3136
3316
  # @return [Symbol from availability_kind_enum] The availability of the completion string.
3137
3317
  # @scope class
3138
3318
  attach_function :get_completion_availability, :clang_getCompletionAvailability, [:pointer], :availability_kind
@@ -3141,7 +3321,7 @@ module Clang
3141
3321
  # completion string.
3142
3322
  #
3143
3323
  # @method get_completion_num_annotations(completion_string)
3144
- # @param [FFI::Pointer of CompletionString] completion_string the completion string to query.
3324
+ # @param [FFI::Pointer(CompletionString)] completion_string the completion string to query.
3145
3325
  # @return [Integer] the number of annotations associated with the given completion
3146
3326
  # string.
3147
3327
  # @scope class
@@ -3150,7 +3330,7 @@ module Clang
3150
3330
  # Retrieve the annotation associated with the given completion string.
3151
3331
  #
3152
3332
  # @method get_completion_annotation(completion_string, annotation_number)
3153
- # @param [FFI::Pointer of CompletionString] completion_string the completion string to query.
3333
+ # @param [FFI::Pointer(CompletionString)] completion_string the completion string to query.
3154
3334
  # @param [Integer] annotation_number the 0-based index of the annotation of the
3155
3335
  # completion string.
3156
3336
  # @return [String] annotation string associated with the completion at index
@@ -3163,11 +3343,24 @@ module Clang
3163
3343
  #
3164
3344
  # @method get_cursor_completion_string(cursor)
3165
3345
  # @param [Cursor] cursor The cursor to query.
3166
- # @return [FFI::Pointer of CompletionString] A non-context-sensitive completion string for declaration and macro
3346
+ # @return [FFI::Pointer(CompletionString)] A non-context-sensitive completion string for declaration and macro
3167
3347
  # definition cursors, or NULL for other kinds of cursors.
3168
3348
  # @scope class
3169
3349
  attach_function :get_cursor_completion_string, :clang_getCursorCompletionString, [Cursor.by_value], :pointer
3170
3350
 
3351
+ # Contains the results of code-completion.
3352
+ #
3353
+ # This data structure contains the results of code completion, as
3354
+ # produced by \c clang_codeCompleteAt(). Its contents must be freed by
3355
+ # \c clang_disposeCodeCompleteResults.
3356
+ #
3357
+ # = Fields:
3358
+ # :results ::
3359
+ # (FFI::Pointer(*CompletionResult)) The code-completion results.
3360
+ # :num_results ::
3361
+ # (Integer) The number of code-completion results stored in the
3362
+ # \c Results array.
3363
+ #
3171
3364
  class CodeCompleteResults < FFI::Struct
3172
3365
  layout :results, :pointer,
3173
3366
  :num_results, :uint
@@ -3180,14 +3373,14 @@ module Clang
3180
3373
  # provide multiple options to \c clang_codeCompleteAt().
3181
3374
  #
3182
3375
  # === Options:
3183
- # :include_macros::
3376
+ # :include_macros ::
3184
3377
  # Whether to include macros within the set of code
3185
3378
  # completions returned.
3186
- # :include_code_patterns::
3379
+ # :include_code_patterns ::
3187
3380
  # Whether to include code patterns for language constructs
3188
3381
  # within the set of code completions, e.g., for loops.
3189
3382
  #
3190
- # @return [Array of Symbols]
3383
+ # @return [Array<Symbol>]
3191
3384
  def self.code_complete_flags_enum
3192
3385
  [:include_macros, :include_code_patterns]
3193
3386
  end
@@ -3202,11 +3395,11 @@ module Clang
3202
3395
  # contexts are occurring simultaneously.
3203
3396
  #
3204
3397
  # === Options:
3205
- # :completion_context_unexposed::
3398
+ # :completion_context_unexposed ::
3206
3399
  # The context for completions is unexposed, as only Clang results
3207
3400
  # should be included. (This is equivalent to having no context bits set.)
3208
3401
  #
3209
- # @return [Array of Symbols]
3402
+ # @return [Array<Symbol>]
3210
3403
  def self.completion_context_enum
3211
3404
  [:completion_context_unexposed]
3212
3405
  end
@@ -3253,7 +3446,7 @@ module Clang
3253
3446
  # have a lower latency.
3254
3447
  #
3255
3448
  # @method code_complete_at(tu, complete_filename, complete_line, complete_column, unsaved_files, num_unsaved_files, options)
3256
- # @param [FFI::Pointer of TranslationUnit] tu The translation unit in which code-completion should
3449
+ # @param [FFI::Pointer(TranslationUnit)] tu The translation unit in which code-completion should
3257
3450
  # occur. The source files for this translation unit need not be
3258
3451
  # completely up-to-date (and the contents of those source files may
3259
3452
  # be overridden via \p unsaved_files). Cursors referring into the
@@ -3265,7 +3458,7 @@ module Clang
3265
3458
  # @param [Integer] complete_column The column at which code-completion should occur.
3266
3459
  # Note that the column should point just after the syntactic construct that
3267
3460
  # initiated code completion, and not in the middle of a lexical token.
3268
- # @param [FFI::Pointer to ] unsaved_files the Tiles that have not yet been saved to disk
3461
+ # @param [FFI::Pointer(*UnsavedFile)] unsaved_files the Tiles that have not yet been saved to disk
3269
3462
  # but may be required for parsing or code completion, including the
3270
3463
  # contents of those files. The contents and name of these files (as
3271
3464
  # specified by CXUnsavedFile) are copied when necessary, so the
@@ -3278,7 +3471,7 @@ module Clang
3278
3471
  # CXCodeComplete_Flags enumeration. The
3279
3472
  # \c clang_defaultCodeCompleteOptions() function returns a default set
3280
3473
  # of code-completion options.
3281
- # @return [FFI::Pointer to ] If successful, a new \c CXCodeCompleteResults structure
3474
+ # @return [FFI::Pointer(*CodeCompleteResults)] If successful, a new \c CXCodeCompleteResults structure
3282
3475
  # containing code-completion results, which should eventually be
3283
3476
  # freed with \c clang_disposeCodeCompleteResults(). If code
3284
3477
  # completion fails, returns NULL.
@@ -3289,7 +3482,7 @@ module Clang
3289
3482
  # order.
3290
3483
  #
3291
3484
  # @method sort_code_completion_results(results, num_results)
3292
- # @param [FFI::Pointer to ] results The set of results to sort.
3485
+ # @param [FFI::Pointer(*CompletionResult)] results The set of results to sort.
3293
3486
  # @param [Integer] num_results The number of results in \p Results.
3294
3487
  # @return [nil]
3295
3488
  # @scope class
@@ -3298,7 +3491,7 @@ module Clang
3298
3491
  # Free the given set of code-completion results.
3299
3492
  #
3300
3493
  # @method dispose_code_complete_results(results)
3301
- # @param [FFI::Pointer to ] results
3494
+ # @param [FFI::Pointer(*CodeCompleteResults)] results
3302
3495
  # @return [nil]
3303
3496
  # @scope class
3304
3497
  attach_function :dispose_code_complete_results, :clang_disposeCodeCompleteResults, [:pointer], :void
@@ -3307,7 +3500,7 @@ module Clang
3307
3500
  # location where code completion was performed.
3308
3501
  #
3309
3502
  # @method code_complete_get_num_diagnostics(results)
3310
- # @param [FFI::Pointer to ] results
3503
+ # @param [FFI::Pointer(*CodeCompleteResults)] results
3311
3504
  # @return [Integer]
3312
3505
  # @scope class
3313
3506
  attach_function :code_complete_get_num_diagnostics, :clang_codeCompleteGetNumDiagnostics, [:pointer], :uint
@@ -3318,9 +3511,9 @@ module Clang
3318
3511
  # the code completion results to query.
3319
3512
  #
3320
3513
  # @method code_complete_get_diagnostic(results, index)
3321
- # @param [FFI::Pointer to ] results
3514
+ # @param [FFI::Pointer(*CodeCompleteResults)] results
3322
3515
  # @param [Integer] index the zero-based diagnostic number to retrieve.
3323
- # @return [FFI::Pointer of Diagnostic] the requested diagnostic. This diagnostic must be freed
3516
+ # @return [FFI::Pointer(Diagnostic)] the requested diagnostic. This diagnostic must be freed
3324
3517
  # via a call to \c clang_disposeDiagnostic().
3325
3518
  # @scope class
3326
3519
  attach_function :code_complete_get_diagnostic, :clang_codeCompleteGetDiagnostic, [:pointer, :uint], :pointer
@@ -3329,7 +3522,7 @@ module Clang
3329
3522
  # the given code completion.
3330
3523
  #
3331
3524
  # @method code_complete_get_contexts(results)
3332
- # @param [FFI::Pointer to ] results the code completion results to query
3525
+ # @param [FFI::Pointer(*CodeCompleteResults)] results the code completion results to query
3333
3526
  # @return [Integer] the kinds of completions that are appropriate for use
3334
3527
  # along with the given code completion results.
3335
3528
  # @scope class
@@ -3342,8 +3535,8 @@ module Clang
3342
3535
  # CXCursor_InvalidCode.
3343
3536
  #
3344
3537
  # @method code_complete_get_container_kind(results, is_incomplete)
3345
- # @param [FFI::Pointer to ] results the code completion results to query
3346
- # @param [FFI::Pointer to ] is_incomplete on return, this value will be false if Clang has complete
3538
+ # @param [FFI::Pointer(*CodeCompleteResults)] results the code completion results to query
3539
+ # @param [FFI::Pointer(*UInt)] is_incomplete on return, this value will be false if Clang has complete
3347
3540
  # information about the container. If Clang does not have complete
3348
3541
  # information, this value will be true.
3349
3542
  # @return [Symbol from cursor_kind_enum] the container kind, or CXCursor_InvalidCode if there is not a
@@ -3356,7 +3549,7 @@ module Clang
3356
3549
  # function will return the empty string.
3357
3550
  #
3358
3551
  # @method code_complete_get_container_usr(results)
3359
- # @param [FFI::Pointer to ] results the code completion results to query
3552
+ # @param [FFI::Pointer(*CodeCompleteResults)] results the code completion results to query
3360
3553
  # @return [String] the USR for the container
3361
3554
  # @scope class
3362
3555
  attach_function :code_complete_get_container_usr, :clang_codeCompleteGetContainerUSR, [:pointer], String.by_value
@@ -3367,7 +3560,7 @@ module Clang
3367
3560
  # CXCompletionContext_ObjCClassMessage.
3368
3561
  #
3369
3562
  # @method code_complete_get_obj_c_selector(results)
3370
- # @param [FFI::Pointer to ] results the code completion results to query
3563
+ # @param [FFI::Pointer(*CodeCompleteResults)] results the code completion results to query
3371
3564
  # @return [String] the selector (or partial selector) that has been entered thus far
3372
3565
  # for an Objective-C message send.
3373
3566
  # @scope class
@@ -3393,6 +3586,24 @@ module Clang
3393
3586
  # @scope class
3394
3587
  attach_function :toggle_crash_recovery, :clang_toggleCrashRecovery, [:uint], :void
3395
3588
 
3589
+ # <em>This is no real method. This entry is only for documentation of the callback.</em>
3590
+ #
3591
+ # Visitor invoked for each file in a translation unit
3592
+ # (used with clang_getInclusions()).
3593
+ #
3594
+ # This visitor function will be invoked by clang_getInclusions() for each
3595
+ # file included (either at the top-level or by #include directives) within
3596
+ # a translation unit. The first argument is the file being included, and
3597
+ # the second and third arguments provide the inclusion stack. The
3598
+ # array is sorted in order of immediate inclusion. For example,
3599
+ # the first element refers to the location that included 'included_file'.
3600
+ #
3601
+ # @method inclusion_visitor_callback(inclusion_stack, include_len, client_data)
3602
+ # @param [FFI::Pointer(*SourceLocation)] inclusion_stack
3603
+ # @param [Integer] include_len
3604
+ # @param [FFI::Pointer(ClientData)] client_data
3605
+ # @return [FFI::Pointer(File)]
3606
+ # @scope class
3396
3607
  callback :inclusion_visitor, [:pointer, :uint, :pointer], :pointer
3397
3608
 
3398
3609
  # Visit the set of preprocessor inclusions in a translation unit.
@@ -3401,9 +3612,9 @@ module Clang
3401
3612
  # is inspecting the inclusions in the PCH file itself).
3402
3613
  #
3403
3614
  # @method get_inclusions(tu, visitor, client_data)
3404
- # @param [FFI::Pointer of TranslationUnit] tu
3405
- # @param [Callback] visitor
3406
- # @param [FFI::Pointer of ClientData] client_data
3615
+ # @param [FFI::Pointer(TranslationUnit)] tu
3616
+ # @param [Proc(inclusion_visitor_callback)] visitor
3617
+ # @param [FFI::Pointer(ClientData)] client_data
3407
3618
  # @return [nil]
3408
3619
  # @scope class
3409
3620
  attach_function :get_inclusions, :clang_getInclusions, [:pointer, :inclusion_visitor, :pointer], :void
@@ -3412,7 +3623,7 @@ module Clang
3412
3623
  #
3413
3624
  # @method get_remappings(path)
3414
3625
  # @param [String] path the path that contains metadata about remappings.
3415
- # @return [FFI::Pointer of Remapping] the requested remapping. This remapping must be freed
3626
+ # @return [FFI::Pointer(Remapping)] the requested remapping. This remapping must be freed
3416
3627
  # via a call to \c clang_remap_dispose(). Can return NULL if an error occurred.
3417
3628
  # @scope class
3418
3629
  attach_function :get_remappings, :clang_getRemappings, [:string], :pointer
@@ -3420,7 +3631,7 @@ module Clang
3420
3631
  # Determine the number of remappings.
3421
3632
  #
3422
3633
  # @method remap_get_num_files(remapping)
3423
- # @param [FFI::Pointer of Remapping] remapping
3634
+ # @param [FFI::Pointer(Remapping)] remapping
3424
3635
  # @return [Integer]
3425
3636
  # @scope class
3426
3637
  attach_function :remap_get_num_files, :clang_remap_getNumFiles, [:pointer], :uint
@@ -3428,10 +3639,10 @@ module Clang
3428
3639
  # Get the original and the associated filename from the remapping.
3429
3640
  #
3430
3641
  # @method remap_get_filenames(remapping, index, original, transformed)
3431
- # @param [FFI::Pointer of Remapping] remapping
3642
+ # @param [FFI::Pointer(Remapping)] remapping
3432
3643
  # @param [Integer] index
3433
- # @param [FFI::Pointer to ] original If non-NULL, will be set to the original filename.
3434
- # @param [FFI::Pointer to ] transformed If non-NULL, will be set to the filename that the original
3644
+ # @param [FFI::Pointer(*String)] original If non-NULL, will be set to the original filename.
3645
+ # @param [FFI::Pointer(*String)] transformed If non-NULL, will be set to the filename that the original
3435
3646
  # is associated with.
3436
3647
  # @return [nil]
3437
3648
  # @scope class
@@ -3440,7 +3651,7 @@ module Clang
3440
3651
  # Dispose the remapping.
3441
3652
  #
3442
3653
  # @method remap_dispose(remapping)
3443
- # @param [FFI::Pointer of Remapping] remapping
3654
+ # @param [FFI::Pointer(Remapping)] remapping
3444
3655
  # @return [nil]
3445
3656
  # @scope class
3446
3657
  attach_function :remap_dispose, :clang_remap_dispose, [:pointer], :void
@@ -3450,12 +3661,12 @@ module Clang
3450
3661
  # @{
3451
3662
  #
3452
3663
  # === Options:
3453
- # :break::
3664
+ # :break ::
3454
3665
  #
3455
- # :continue::
3666
+ # :continue ::
3456
3667
  #
3457
3668
  #
3458
- # @return [Array of Symbols]
3669
+ # @return [Array<Symbol>]
3459
3670
  def self.visitor_result_enum
3460
3671
  [:break, :continue]
3461
3672
  end
@@ -3464,6 +3675,16 @@ module Clang
3464
3675
  :continue
3465
3676
  ]
3466
3677
 
3678
+ # \defgroup CINDEX_HIGH Higher level API functions
3679
+ #
3680
+ # @{
3681
+ #
3682
+ # = Fields:
3683
+ # :context ::
3684
+ # (FFI::Pointer(*Void))
3685
+ # :visit ::
3686
+ # (FFI::Pointer(*))
3687
+ #
3467
3688
  class CursorAndRangeVisitor < FFI::Struct
3468
3689
  layout :context, :pointer,
3469
3690
  :visit, :pointer
@@ -3473,7 +3694,7 @@ module Clang
3473
3694
  #
3474
3695
  # @method find_references_in_file(cursor, file, visitor)
3475
3696
  # @param [Cursor] cursor pointing to a declaration or a reference of one.
3476
- # @param [FFI::Pointer of File] file to search for references.
3697
+ # @param [FFI::Pointer(File)] file to search for references.
3477
3698
  # @param [CursorAndRangeVisitor] visitor callback that will receive pairs of CXCursor/CXSourceRange for
3478
3699
  # each reference found.
3479
3700
  # The CXSourceRange will point inside the file; if the reference is inside