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
|
# File 'lib/solargraph/source_map.rb', line 35
def initialize source
@source = source
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
164
165
166
|
# File 'lib/solargraph/source_map.rb', line 164
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.
60
61
62
|
# File 'lib/solargraph/source_map.rb', line 60
def api_hash
@api_hash ||= (pins_by_class(Pin::Constant) + pins_by_class(Pin::Namespace).select { |pin| pin.namespace.to_s > '' } + pins_by_class(Pin::Reference) + pins_by_class(Pin::Method).map(&:node) + locals).hash
end
|
#code ⇒ String
70
71
72
|
# File 'lib/solargraph/source_map.rb', line 70
def code
source.code
end
|
#conventions_environ ⇒ Environ
80
81
82
|
# File 'lib/solargraph/source_map.rb', line 80
def conventions_environ
@conventions_environ ||= Environ.new
end
|
100
101
102
|
# File 'lib/solargraph/source_map.rb', line 100
def cursor_at position
Source::Cursor.new(source, position)
end
|
#document_symbols ⇒ Array<Pin::Base>
all pins except Solargraph::Pin::Reference::Reference
86
87
88
89
90
|
# File 'lib/solargraph/source_map.rb', line 86
def document_symbols
@document_symbols ||= (pins + convention_pins).select do |pin|
pin.path && !pin.path.empty?
end
end
|
#filename ⇒ String
65
66
67
|
# File 'lib/solargraph/source_map.rb', line 65
def filename
source.filename
end
|
#first_pin(path) ⇒ Pin::Base
106
107
108
|
# File 'lib/solargraph/source_map.rb', line 106
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
|
139
140
141
142
143
|
# File 'lib/solargraph/source_map.rb', line 139
def locals_at(location)
return [] if location.filename != filename
closure = locate_named_path_pin(location.range.start.line, location.range.start.character)
locals.select { |pin| pin.visible_at?(closure, location) }
end
|
#locate_block_pin(line, character) ⇒ Pin::Namespace, ...
127
128
129
|
# File 'lib/solargraph/source_map.rb', line 127
def locate_block_pin line, character
_locate_pin line, character, Pin::Namespace, Pin::Method, Pin::Block
end
|
120
121
122
|
# File 'lib/solargraph/source_map.rb', line 120
def locate_named_path_pin line, character
_locate_pin line, character, Pin::Namespace, Pin::Method
end
|
112
113
114
115
|
# File 'lib/solargraph/source_map.rb', line 112
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>>
50
51
52
|
# File 'lib/solargraph/source_map.rb', line 50
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>
94
95
96
|
# File 'lib/solargraph/source_map.rb', line 94
def query_symbols query
Pin::Search.new(document_symbols, query).results
end
|
#references(name) ⇒ Array<Location>
133
134
135
|
# File 'lib/solargraph/source_map.rb', line 133
def references name
source.references name
end
|
75
76
77
|
# File 'lib/solargraph/source_map.rb', line 75
def requires
pins_by_class(Pin::Reference::Require)
end
|