Class: YARD::Tags::MethodDirective

Inherits:
Directive
  • Object
show all
Defined in:
lib/yard/tags/directives.rb

Overview

Note:

For backwards compatibility support, you do not need to indent the method’s docstring text. If a @!method directive is seen with no indented block, the entire docstring is used as the new method’s docstring text.

Defines a method object with a given method signature, using indented block data as the method’s docstring. The signature is similar to the @overload tag. The comment containing this directive does not need to be attached to any source, but if it is, that source code will be used as the method’s source.

To define an attribute method, see @!attribute

Examples:

Defining a simple method

# @!method quit(username, message = "Quit")
#   Sends a quit message to the server for a +username+.
#   @param [String] username the username to quit
#   @param [String] message the quit message
quit_message_method

Attaching multiple methods to the same source

# @!method method1
# @!method method2
create_methods :method1, :method2

See Also:

Since:

  • 0.7.0

Direct Known Subclasses

AttributeDirective

Parser callbacks collapse

SCOPE_MATCH =

Since:

  • 0.7.0

/\A\s*self\s*\.\s*/

Parser callbacks collapse

Constructor Details

This class inherits a constructor from YARD::Tags::Directive

Instance Method Details

#after_parseObject

Since:

  • 0.7.0



362
363
364
365
366
# File 'lib/yard/tags/directives.rb', line 362

def after_parse
  return unless handler
  use_indented_text
  create_object
end

#callObject

Since:

  • 0.7.0



360
# File 'lib/yard/tags/directives.rb', line 360

def call; end

#create_objectObject (protected)

Since:

  • 0.7.0



402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
# File 'lib/yard/tags/directives.rb', line 402

def create_object
  name = method_name
  scope = parser.state.scope || handler.scope
  visibility = parser.state.visibility || handler.visibility
  ns = CodeObjects::NamespaceObject === object ? object : handler.namespace
  obj = CodeObjects::MethodObject.new(ns, name, scope)
  handler.register_file_info(obj)
  handler.register_source(obj)
  handler.register_visibility(obj, visibility)
  handler.register_group(obj)
  obj.signature = method_signature
  obj.parameters = OverloadTag.new(:overload, method_signature).parameters
  obj.docstring = Docstring.new!(parser.text, parser.tags, obj,
    parser.raw_text, parser.reference)
  handler.register_module_function(obj)
  old_obj = parser.object
  parser.object = obj
  parser.post_process
  parser.object = old_obj
  obj
end

#method_nameObject (protected)

Since:

  • 0.7.0



370
371
372
373
374
375
376
377
# File 'lib/yard/tags/directives.rb', line 370

def method_name
  sig = sanitized_tag_signature
  if sig && sig =~ /^#{CodeObjects::METHODNAMEMATCH}(\s|\(|$)/
    sig[/\A\s*([^\(; \t]+)/, 1]
  else
    handler.call_params.first
  end
end

#method_signatureObject (protected)

Since:

  • 0.7.0



379
380
381
# File 'lib/yard/tags/directives.rb', line 379

def method_signature
  "def #{sanitized_tag_signature || method_name}"
end

#sanitized_tag_signatureObject (protected)

Since:

  • 0.7.0



383
384
385
386
387
388
389
390
# File 'lib/yard/tags/directives.rb', line 383

def sanitized_tag_signature
  if tag.name && tag.name =~ SCOPE_MATCH
    parser.state.scope = :class
    $'
  else
    tag.name
  end
end

#use_indented_textObject (protected)

Since:

  • 0.7.0



392
393
394
395
396
397
398
399
400
# File 'lib/yard/tags/directives.rb', line 392

def use_indented_text
  return if tag.text.empty?
  handler = parser.handler
  object = parser.object
  self.parser = parser.class.new(parser.library)
  parser.state.inside_directive = true
  parser.parse(tag.text, object, handler)
  parser.state.inside_directive = false
end