@@ -104,33 +104,42 @@ def extract_enum_definitions
104
104
def __extract_function_definitions ( c_kinds :, kind :, is_parse_multiline_definition :)
105
105
stdout = execute_ctags ( "--c-kinds=#{ c_kinds } --fields=+nS --extras=+q" )
106
106
107
- stdout . each_line . with_object ( [ ] ) do |line , definitions |
108
- parts = line . split ( "\t " )
107
+ stdout . each_line . map do |line |
108
+ generate_function_definition_from_line ( line :, kind :, is_parse_multiline_definition :)
109
+ end . compact . uniq ( &:name )
110
+ end
111
+
112
+ # @param line [String]
113
+ # @param kind [String]
114
+ # @param is_parse_multiline_definition [Boolean]
115
+ #
116
+ # @param [Array<RubyHeaderParser::FunctionDefinition>, nil]
117
+ def generate_function_definition_from_line ( line :, kind :, is_parse_multiline_definition :)
118
+ parts = line . split ( "\t " )
109
119
110
- function_name = parts [ 0 ]
111
- filepath = parts [ 1 ]
120
+ function_name = parts [ 0 ]
121
+ filepath = parts [ 1 ]
112
122
113
- next unless data . should_generate_function? ( function_name )
123
+ return nil unless data . should_generate_function? ( function_name )
114
124
115
- next unless parts [ 3 ] == kind
125
+ return nil unless parts [ 3 ] == kind
116
126
117
- line_num = Util . find_field ( parts , "line" ) . to_i
118
- definition = parse_function_definition ( filepath :, pattern : parts [ 2 ] , line_num :, is_parse_multiline_definition :)
127
+ line_num = Util . find_field ( parts , "line" ) . to_i
128
+ definition = parse_function_definition ( filepath :, pattern : parts [ 2 ] , line_num :, is_parse_multiline_definition :)
119
129
120
- args = parse_definition_args ( function_name , Util . find_field ( parts , "signature" ) )
130
+ args = parse_definition_args ( function_name , Util . find_field ( parts , "signature" ) )
121
131
122
- # Exclude functions with variable-length arguments
123
- next if args &.last &.type == "..."
132
+ # Exclude functions with variable-length arguments
133
+ return nil if args &.last &.type == "..."
124
134
125
- typeref_field = Util . find_field ( parts , "typeref:typename" )
135
+ typeref_field = Util . find_field ( parts , "typeref:typename" )
126
136
127
- definitions << FunctionDefinition . new (
128
- definition :,
129
- name : function_name ,
130
- typeref : create_typeref ( definition :, function_name :, typeref_field :, filepath :, line_num :) ,
131
- args :,
132
- )
133
- end . uniq ( &:name )
137
+ FunctionDefinition . new (
138
+ definition :,
139
+ name : function_name ,
140
+ typeref : create_typeref ( definition :, function_name :, typeref_field :, filepath :, line_num :) ,
141
+ args :,
142
+ )
134
143
end
135
144
136
145
# @param args [String]
0 commit comments