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

Inherits:
  Base
  - Object
  - Base
  - Base
  - YARD::Handlers::Ruby::ModuleFunctionHandler
  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

- #make_module_function(instance_method, namespace) ⇒ Object
- #process ⇒ void

  Main processing callback.

### 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

### #process ⇒ `void`

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