Class: Solargraph::Pin::BaseMethod

Inherits:
Closure show all
Defined in:
lib/solargraph/pin/base_method.rb

Overview

The base class for method and attribute pins.

Direct Known Subclasses

Attribute, Method, MethodAlias

Instance Attribute Summary collapse

Attributes inherited from Closure

#scope

Attributes inherited from Base

#code_object, #location, #name

Attributes included from Common

#closure, #location

Instance Method Summary collapse

Methods inherited from Closure

#binder, #context, #gates

Methods inherited from Base

#==, #comments, #completion_item_kind, #deprecated?, #directives, #docstring, #filename, #identity, #infer, #inspect, #macros, #maybe_directives?, #nearly?, #probe, #probed?, #proxied?, #proxy, #realize, #symbol_kind, #to_s, #try_merge!, #variable?

Methods included from Conversions

#completion_item, #detail, #link_documentation, #reset_conversions, #resolve_completion_item, #signature_help, #text_documentation

Methods included from Common

#binder, #comments, #context, #name, #namespace

Constructor Details

#initialize(visibility: :public, explicit: true, **splat) ⇒ BaseMethod

Returns a new instance of BaseMethod.

Parameters:

  • visibility (::Symbol) (defaults to: :public)

    :public, :protected, or :private

  • explicit (Boolean) (defaults to: true)


16
17
18
19
20
# File 'lib/solargraph/pin/base_method.rb', line 16

def initialize visibility: :public, explicit: true, **splat
  super(**splat)
  @visibility = visibility
  @explicit = explicit
end

Instance Attribute Details

#nodeParser::AST::Node (readonly)

Returns:

  • (Parser::AST::Node)


12
13
14
# File 'lib/solargraph/pin/base_method.rb', line 12

def node
  @node
end

#visibility::Symbol (readonly)

Returns :public, :private, or :protected.

Returns:

  • (::Symbol)

    :public, :private, or :protected



9
10
11
# File 'lib/solargraph/pin/base_method.rb', line 9

def visibility
  @visibility
end

Instance Method Details

#documentationObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/solargraph/pin/base_method.rb', line 48

def documentation
  if @documentation.nil?
    @documentation ||= super || ''
    param_tags = docstring.tags(:param)
    unless param_tags.nil? or param_tags.empty?
      @documentation += "\n\n" unless @documentation.empty?
      @documentation += "Params:\n"
      lines = []
      param_tags.each do |p|
        l = "* #{p.name}"
        l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil? or p.types.empty?
        l += " #{p.text}"
        lines.push l
      end
      @documentation += lines.join("\n")
    end
    return_tags = docstring.tags(:return)
    unless return_tags.empty?
      @documentation += "\n\n" unless @documentation.empty?
      @documentation += "Returns:\n"
      lines = []
      return_tags.each do |r|
        l = "*"
        l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil? or r.types.empty?
        l += " #{r.text}"
        lines.push l
      end
      @documentation += lines.join("\n")
    end
    @documentation += "\n\n" unless @documentation.empty?
    @documentation += "Visibility: #{visibility}"
  end
  @documentation.to_s
end

#explicit?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/solargraph/pin/base_method.rb', line 83

def explicit?
  @explicit
end

#parameter_namesArray<String>

Returns:

  • (Array<String>)


44
45
46
# File 'lib/solargraph/pin/base_method.rb', line 44

def parameter_names
  parameters.map(&:name)
end

#parametersArray<Pin::Parameter>

Returns:



39
40
41
# File 'lib/solargraph/pin/base_method.rb', line 39

def parameters
  @parameters ||= []
end

#pathObject



26
27
28
# File 'lib/solargraph/pin/base_method.rb', line 26

def path
  @path ||= "#{namespace}#{(scope == :instance ? '#' : '.')}#{name}"
end

#return_typeObject



22
23
24
# File 'lib/solargraph/pin/base_method.rb', line 22

def return_type
  @return_type ||= generate_complex_type
end

#typify(api_map) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/solargraph/pin/base_method.rb', line 30

def typify api_map
  decl = super
  return decl unless decl.undefined?
  type = see_reference(api_map) || typify_from_super(api_map)
  return type.qualify(api_map, namespace) unless type.nil?
  name.end_with?('?') ? ComplexType::BOOLEAN : ComplexType::UNDEFINED
end