lib/yard/handlers/ruby/constant_handler.rb in yard-0.9.16 vs lib/yard/handlers/ruby/constant_handler.rb in yard-0.9.17

- old
+ new

@@ -1,59 +1,59 @@ -# frozen_string_literal: true -# Handles any constant assignment -class YARD::Handlers::Ruby::ConstantHandler < YARD::Handlers::Ruby::Base - include YARD::Handlers::Ruby::StructHandlerMethods - handles :assign - namespace_only - - process do - if statement[1].call? && statement[1][0][0] == s(:const, "Struct") && - statement[1][2] == s(:ident, "new") - process_structclass(statement) - elsif statement[0].type == :var_field && statement[0][0].type == :const - process_constant(statement) - elsif statement[0].type == :const_path_field - process_constant(statement) - end - end - - private - - def process_constant(statement) - name = statement[0].source - value = if statement[1].type == :dyna_symbol - statement[1].first.source.intern.inspect - else - statement[1].source - end - obj = P(namespace, name) - if obj.is_a?(NamespaceObject) && obj.namespace == namespace - raise YARD::Parser::UndocumentableError, "constant for existing #{obj.type} #{obj}" - else - ensure_loaded! obj.parent - register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip } - end - end - - def process_structclass(statement) - lhs = statement[0][0] - if lhs.type == :const - klass = create_class(lhs[0], P(:Struct)) - create_attributes(klass, extract_parameters(statement[1])) - parse_block(statement[1].block[1], :namespace => klass) unless statement[1].block.nil? - else - raise YARD::Parser::UndocumentableError, "Struct assignment to #{statement[0].source}" - end - end - - # Extract the parameters from the Struct.new AST node, returning them as a list - # of strings - # - # @param [MethodCallNode] superclass the AST node for the Struct.new call - # @return [Array<String>] the member names to generate methods for - def extract_parameters(superclass) - return [] unless superclass.parameters - members = superclass.parameters.select {|x| x && x.type == :symbol_literal } - members.map! {|x| x.source.strip[1..-1] } - members - end -end +# frozen_string_literal: true +# Handles any constant assignment +class YARD::Handlers::Ruby::ConstantHandler < YARD::Handlers::Ruby::Base + include YARD::Handlers::Ruby::StructHandlerMethods + handles :assign + namespace_only + + process do + if statement[1].call? && statement[1][0][0] == s(:const, "Struct") && + statement[1][2] == s(:ident, "new") + process_structclass(statement) + elsif statement[0].type == :var_field && statement[0][0].type == :const + process_constant(statement) + elsif statement[0].type == :const_path_field + process_constant(statement) + end + end + + private + + def process_constant(statement) + name = statement[0].source + value = if statement[1].type == :dyna_symbol + statement[1].first.source.intern.inspect + else + statement[1].source + end + obj = P(namespace, name) + if obj.is_a?(NamespaceObject) && obj.namespace == namespace + raise YARD::Parser::UndocumentableError, "constant for existing #{obj.type} #{obj}" + else + ensure_loaded! obj.parent + register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip } + end + end + + def process_structclass(statement) + lhs = statement[0][0] + if lhs.type == :const + klass = create_class(lhs[0], P(:Struct)) + create_attributes(klass, extract_parameters(statement[1])) + parse_block(statement[1].block[1], :namespace => klass) unless statement[1].block.nil? + else + raise YARD::Parser::UndocumentableError, "Struct assignment to #{statement[0].source}" + end + end + + # Extract the parameters from the Struct.new AST node, returning them as a list + # of strings + # + # @param [MethodCallNode] superclass the AST node for the Struct.new call + # @return [Array<String>] the member names to generate methods for + def extract_parameters(superclass) + return [] unless superclass.parameters + members = superclass.parameters.select {|x| x && x.type == :symbol_literal } + members.map! {|x| x.source.strip[1..-1] } + members + end +end