Class: YARD::Handlers::Ruby::ModuleFunctionHandler

Inherits:
Base
  • Object
show all
Includes:
DecoratorHandlerMethods
Defined in:
lib/yard/handlers/ruby/module_function_handler.rb

Overview

Handles module_function calls to turn methods into public class methods. Also creates a private instance copy of the method.

Constant Summary

Constants included from CodeObjects

CodeObjects::BUILTIN_ALL, CodeObjects::BUILTIN_CLASSES, CodeObjects::BUILTIN_EXCEPTIONS, CodeObjects::BUILTIN_EXCEPTIONS_HASH, CodeObjects::BUILTIN_MODULES, CodeObjects::CONSTANTMATCH, CodeObjects::CONSTANTSTART, CodeObjects::CSEP, CodeObjects::CSEPQ, CodeObjects::ISEP, CodeObjects::ISEPQ, CodeObjects::METHODMATCH, CodeObjects::METHODNAMEMATCH, CodeObjects::NAMESPACEMATCH, CodeObjects::NSEP, CodeObjects::NSEPQ

Instance Method Summary collapse

Methods included from DecoratorHandlerMethods

#process_decorator

Methods included from Parser::Ruby

#s

Methods included from CodeObjects::NamespaceMapper

#clear_separators, #default_separator, on_invalidate, #register_separator, #separators, #separators_for_type, #separators_match, #types_for_separator, #unregister_separator_by_type

Constructor Details

This class inherits a constructor from YARD::Handlers::Base

Instance Method Details

#make_module_function(instance_method, namespace) ⇒ Object


34
35
36
37
38
# File 'lib/yard/handlers/ruby/module_function_handler.rb', line 34

def make_module_function(instance_method, namespace)
  class_method = MethodObject.new(namespace, instance_method.name, :module)
  instance_method.copy_to(class_method)
  class_method.visibility = :public
end

#processvoid

This method returns an undefined value.

Main processing callback


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/yard/handlers/ruby/module_function_handler.rb', line 10

process do
  return if statement.jump(:ident) == statement
  case statement.type
  when :var_ref, :vcall
    self.scope = :module
  when :fcall, :command
    statement[1].traverse do |node|
      case node.type
      when :def
        process_decorator do |instance_method|
          make_module_function(instance_method, namespace)
        end
        break
      when :symbol; name = node.first.source
      when :string_content; name = node.source
      else next
      end

      instance_method = MethodObject.new(namespace, name)
      make_module_function(instance_method, namespace)
    end
  end
end