Class: Solargraph::ApiMap::Store

Inherits:
Object
  • Object
show all
Defined in:
lib/solargraph/api_map/store.rb

Overview

Queryable collection of Pins representing a Workspace, gems and the Ruby core.

Instance Method Summary collapse

Constructor Details

#initialize(static = [], dynamic = []) ⇒ Store

Returns a new instance of Store.

Parameters:

  • static (Enumerable<Pin::Base>) (defaults to: [])
  • dynamic (Enumerable<Pin::Base>) (defaults to: [])


12
13
14
15
16
# File 'lib/solargraph/api_map/store.rb', line 12

def initialize static = [], dynamic = []
  @static_index = Index.new(static)
  @dynamic = dynamic
  @index = @static_index.merge(dynamic)
end

Instance Method Details

#block_pinsEnumerable<Pin::Block>

Returns:



165
166
167
# File 'lib/solargraph/api_map/store.rb', line 165

def block_pins
  pins_by_class(Pin::Block)
end

#domains(fqns) ⇒ Array<String>

Parameters:

  • fqns (String)

Returns:

  • (Array<String>)


142
143
144
145
146
147
148
# File 'lib/solargraph/api_map/store.rb', line 142

def domains(fqns)
  result = []
  fqns_pins(fqns).each do |nspin|
    result.concat nspin.domains
  end
  result
end

#fqns_pins(fqns) ⇒ Array<Solargraph::Pin::Namespace>

Parameters:

  • fqns (String)

Returns:



178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/solargraph/api_map/store.rb', line 178

def fqns_pins fqns
  return [] if fqns.nil?
  if fqns.include?('::')
    parts = fqns.split('::')
    name = parts.pop
    base = parts.join('::')
  else
    base = ''
    name = fqns
  end
  fqns_pins_map[[base, name]]
end

#get_class_variables(fqns) ⇒ Enumerable<Solargraph::Pin::Base>

Parameters:

  • fqns (String)

Returns:



110
111
112
# File 'lib/solargraph/api_map/store.rb', line 110

def get_class_variables(fqns)
  namespace_children(fqns).select{|pin| pin.is_a?(Pin::ClassVariable)}
end

#get_constants(fqns, visibility = [:public]) ⇒ Enumerable<Solargraph::Pin::Base>

Parameters:

  • fqns (String)
  • visibility (Array<Symbol>) (defaults to: [:public])

Returns:



49
50
51
52
53
# File 'lib/solargraph/api_map/store.rb', line 49

def get_constants fqns, visibility = [:public]
  namespace_children(fqns).select { |pin|
    !pin.name.empty? && (pin.is_a?(Pin::Namespace) || pin.is_a?(Pin::Constant)) && visibility.include?(pin.visibility)
  }
end

#get_extends(fqns) ⇒ Array<String>

Parameters:

  • fqns (String)

Returns:

  • (Array<String>)


89
90
91
# File 'lib/solargraph/api_map/store.rb', line 89

def get_extends fqns
  extend_references[fqns] || []
end

#get_includes(fqns) ⇒ Array<String>

Parameters:

  • fqns (String)

Returns:

  • (Array<String>)


77
78
79
# File 'lib/solargraph/api_map/store.rb', line 77

def get_includes fqns
  include_references[fqns] || []
end

#get_instance_variables(fqns, scope = :instance) ⇒ Enumerable<Solargraph::Pin::Base>

Parameters:

  • fqns (String)
  • scope (Symbol) (defaults to: :instance)

    :class or :instance

Returns:



102
103
104
105
106
# File 'lib/solargraph/api_map/store.rb', line 102

def get_instance_variables(fqns, scope = :instance)
  all_instance_variables.select { |pin|
    pin.binder.namespace == fqns && pin.binder.scope == scope
  }
end

#get_methods(fqns, scope: :instance, visibility: [:public]) ⇒ Enumerable<Solargraph::Pin::Method>

Parameters:

  • fqns (String)
  • scope (Symbol) (defaults to: :instance)
  • visibility (Array<Symbol>) (defaults to: [:public])

Returns:



59
60
61
62
63
# File 'lib/solargraph/api_map/store.rb', line 59

def get_methods fqns, scope: :instance, visibility: [:public]
  namespace_children(fqns).select do |pin|
    pin.is_a?(Pin::Method) && pin.scope == scope && visibility.include?(pin.visibility)
  end
end

#get_path_pins(path) ⇒ Array<Solargraph::Pin::Base>

Parameters:

  • path (String)

Returns:



95
96
97
# File 'lib/solargraph/api_map/store.rb', line 95

def get_path_pins path
  index.path_pin_hash[path]
end

#get_prepends(fqns) ⇒ Array<String>

Parameters:

  • fqns (String)

Returns:

  • (Array<String>)


83
84
85
# File 'lib/solargraph/api_map/store.rb', line 83

def get_prepends fqns
  prepend_references[fqns] || []
end

#get_superclass(fqns) ⇒ String?

Parameters:

  • fqns (String)

Returns:

  • (String, nil)


67
68
69
70
71
72
73
# File 'lib/solargraph/api_map/store.rb', line 67

def get_superclass fqns
  raise "Do not prefix fully qualified namespaces with '::' - #{fqns.inspect}" if fqns.start_with?('::')
  return superclass_references[fqns].first if superclass_references.key?(fqns)
  return 'Object' if fqns != 'BasicObject' && namespace_exists?(fqns)
  return 'Object' if fqns == 'Boolean'
  nil
end

#get_symbolsEnumerable<Solargraph::Pin::Base>

Returns:



115
116
117
# File 'lib/solargraph/api_map/store.rb', line 115

def get_symbols
  symbols.uniq(&:name)
end

#inspectObject



42
43
44
# File 'lib/solargraph/api_map/store.rb', line 42

def inspect
  to_s
end

#method_pinsEnumerable<Solargraph::Pin::Method>

Returns:



136
137
138
# File 'lib/solargraph/api_map/store.rb', line 136

def method_pins
  pins_by_class(Solargraph::Pin::Method)
end

#named_macrosHash{String => YARD::Tags::MacroDirective}

Returns:

  • (Hash{String => YARD::Tags::MacroDirective})


151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/solargraph/api_map/store.rb', line 151

def named_macros
  @named_macros ||= begin
    result = {}
    pins.each do |pin|
      pin.macros.select{|m| m.tag.tag_name == 'macro' && !m.tag.text.empty? }.each do |macro|
        next if macro.tag.name.nil? || macro.tag.name.empty?
        result[macro.tag.name] = macro
      end
    end
    result
  end
end

#namespace_exists?(fqns) ⇒ Boolean

Parameters:

  • fqns (String)

Returns:

  • (Boolean)


121
122
123
# File 'lib/solargraph/api_map/store.rb', line 121

def namespace_exists?(fqns)
  fqns_pins(fqns).any?
end

#namespace_pinsEnumerable<Solargraph::Pin::Namespace>

Returns:



131
132
133
# File 'lib/solargraph/api_map/store.rb', line 131

def namespace_pins
  pins_by_class(Solargraph::Pin::Namespace)
end

#namespacesSet<String>

Returns:

  • (Set<String>)


126
127
128
# File 'lib/solargraph/api_map/store.rb', line 126

def namespaces
  index.namespaces
end

#pinsArray<Solargraph::Pin::Base>

Returns:



19
20
21
# File 'lib/solargraph/api_map/store.rb', line 19

def pins
  index.pins
end

#pins_by_class(klass) ⇒ Set<generic<T>>

Parameters:

  • klass (Class<generic<T>>)

Returns:

  • (Set<generic<T>>)


172
173
174
# File 'lib/solargraph/api_map/store.rb', line 172

def pins_by_class klass
  index.pins_by_class klass
end

#to_sObject



38
39
40
# File 'lib/solargraph/api_map/store.rb', line 38

def to_s
  self.class.to_s
end

#update!(static = [], dynamic = []) ⇒ Object

Parameters:

  • static (Enumerable<Pin::Base>) (defaults to: [])
  • dynamic (Enumerable<Pin::Base>) (defaults to: [])


25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/solargraph/api_map/store.rb', line 25

def update! static = [], dynamic = []
  # @todo Fix this map
  @fqns_pins_map = nil
  if @static_index.pins == static
    return self if @dynamic == dynamic
  else
    @static_index = Index.new(static)
  end
  @dynamic = dynamic
  @index = @static_index.merge(dynamic)
  self
end