Sha256: eb6dff480a6b7ee1bf534ffd91691c93bec1a41e0874fcc220a72822734b2eb1

Contents?: true

Size: 1.14 KB

Versions: 6

Compression:

Stored size: 1.14 KB

Contents

class YARD::Handlers::Ruby::Legacy::ConstantHandler < YARD::Handlers::Ruby::Legacy::Base
  HANDLER_MATCH = /\A[A-Z]\w*\s*=[^=]\s*/m
  handles HANDLER_MATCH
  
  def process
    # Don't document CONSTANTS if they're set in second class objects (methods) because
    # they're not "static" when executed from a method
    return unless owner.is_a? NamespaceObject
    
    name, value = *statement.tokens.to_s.split(/\s*=\s*/, 2)
    if value =~ /\A\s*Struct.new(?:\s*\(?|\b)/
      process_structclass(name, $')
    else
      register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip }
    end
  end
  
  private
  
  def process_structclass(classname, parameters)
    scope = :instance
    klass = register ClassObject.new(namespace, classname)
    klass.superclass = P(:Struct)

    tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(parameters), TkSYMBOL).each do |name|
      klass.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
      {:read => name, :write => "#{name}="}.each do |type, meth|
        klass.attributes[scope][name][type] = MethodObject.new(klass, meth, scope)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
yard-0.5.3 lib/yard/handlers/ruby/legacy/constant_handler.rb
yard-0.5.2 lib/yard/handlers/ruby/legacy/constant_handler.rb
yard-0.5.1p1 lib/yard/handlers/ruby/legacy/constant_handler.rb
yard-0.5.1 lib/yard/handlers/ruby/legacy/constant_handler.rb
yard-0.5.0 lib/yard/handlers/ruby/legacy/constant_handler.rb
yard-0.4.0 lib/yard/handlers/ruby/legacy/constant_handler.rb