Class: Solargraph::SourceMap
- Inherits:
-
Object
- Object
- Solargraph::SourceMap
show all
- Defined in:
- lib/solargraph/source_map.rb,
lib/solargraph/source_map/clip.rb,
lib/solargraph/source_map/data.rb,
lib/solargraph/source_map/mapper.rb,
lib/solargraph/source_map/completion.rb
Overview
An index of Pins and other ApiMap-related data for a single Source that can be queried.
Defined Under Namespace
Classes: Clip, Completion, Data, Mapper
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(source) ⇒ SourceMap
Returns a new instance of SourceMap.
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/solargraph/source_map.rb', line 35
def initialize source
@source = source
@convention_pins = nil
conventions_environ.merge Convention.for_local(self) unless filename.nil?
@document_symbols = nil
self.convention_pins = conventions_environ.pins
@pin_select_cache = {}
end
|
Instance Attribute Details
17
18
19
|
# File 'lib/solargraph/source_map.rb', line 17
def source
@source
end
|
Class Method Details
.load_string(code, filename = nil) ⇒ SourceMap
174
175
176
|
# File 'lib/solargraph/source_map.rb', line 174
def map source
new(source)
end
|
Instance Method Details
#all_pins ⇒ Array<Pin::Base>
25
26
27
|
# File 'lib/solargraph/source_map.rb', line 25
def all_pins
pins + convention_pins
end
|
#api_hash ⇒ Integer
A hash representing the state of the source map’s API.
ApiMap#catalog uses this value to determine whether it needs to clear its cache.
64
65
66
67
68
|
# File 'lib/solargraph/source_map.rb', line 64
def api_hash
@api_hash ||= (pins_by_class(Pin::Constant) + pins_by_class(Pin::Namespace).select do |pin|
pin.namespace.to_s > ''
end + pins_by_class(Pin::Reference) + pins_by_class(Pin::Method).map(&:node) + locals).hash
end
|
#code ⇒ String
76
77
78
|
# File 'lib/solargraph/source_map.rb', line 76
def code
source.code
end
|
#conventions_environ ⇒ Environ
86
87
88
|
# File 'lib/solargraph/source_map.rb', line 86
def conventions_environ
@conventions_environ ||= Environ.new
end
|
107
108
109
|
# File 'lib/solargraph/source_map.rb', line 107
def cursor_at position
Source::Cursor.new(source, position)
end
|
#document_symbols ⇒ Array<Pin::Base>
all pins except Solargraph::Pin::Reference::Reference
93
94
95
96
97
|
# File 'lib/solargraph/source_map.rb', line 93
def document_symbols
@document_symbols ||= (pins + convention_pins).select do |pin|
pin.path && !pin.path.empty?
end
end
|
#filename ⇒ String?
71
72
73
|
# File 'lib/solargraph/source_map.rb', line 71
def filename
source.filename
end
|
#first_pin(path) ⇒ Pin::Base
113
114
115
|
# File 'lib/solargraph/source_map.rb', line 113
def first_pin path
pins.select { |p| p.path == path }.first
end
|
30
31
32
|
# File 'lib/solargraph/source_map.rb', line 30
def locals
data.locals
end
|
149
150
151
152
153
|
# File 'lib/solargraph/source_map.rb', line 149
def locals_at location
return [] if location.filename != filename
closure = locate_closure_pin(location.range.start.line, location.range.start.character)
locals.select { |pin| pin.visible_at?(closure, location) }
end
|
#locate_closure_pin(line, character) ⇒ Pin::Closure
Also known as:
locate_block_pin
134
135
136
|
# File 'lib/solargraph/source_map.rb', line 134
def locate_closure_pin line, character
_locate_pin line, character, Pin::Closure
end
|
127
128
129
|
# File 'lib/solargraph/source_map.rb', line 127
def locate_named_path_pin line, character
_locate_pin line, character, Pin::Namespace, Pin::Method
end
|
119
120
121
122
|
# File 'lib/solargraph/source_map.rb', line 119
def locate_pins location
(pins + locals).select { |pin| pin.location == location }
end
|
20
21
22
|
# File 'lib/solargraph/source_map.rb', line 20
def pins
data.pins
end
|
#pins_by_class(klass) ⇒ Array<generic<T>>
54
55
56
|
# File 'lib/solargraph/source_map.rb', line 54
def pins_by_class klass
@pin_select_cache[klass] ||= pin_class_hash.select { |key, _| key <= klass }.values.flatten
end
|
#query_symbols(query) ⇒ Array<Pin::Base>
101
102
103
|
# File 'lib/solargraph/source_map.rb', line 101
def query_symbols query
Pin::Search.new(document_symbols, query).results
end
|
#references(name) ⇒ Array<Location>
143
144
145
|
# File 'lib/solargraph/source_map.rb', line 143
def references name
source.references name
end
|
81
82
83
|
# File 'lib/solargraph/source_map.rb', line 81
def requires
pins_by_class(Pin::Reference::Require)
end
|