solargraph 0.32.1 → 0.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +6 -0
- data/.travis.yml +25 -0
- data/EXAMPLES.md +76 -0
- data/Gemfile +3 -0
- data/LANGUAGE_SERVER.md +51 -0
- data/LICENSE +21 -0
- data/OVERVIEW.md +37 -0
- data/README.md +106 -0
- data/Rakefile +14 -0
- data/SERVER.md +95 -0
- data/bin/solargraph +0 -0
- data/bin/solargraph-runtime +5 -5
- data/lib/solargraph.rb +54 -54
- data/lib/solargraph/api_map.rb +659 -659
- data/lib/solargraph/api_map/cache.rb +49 -49
- data/lib/solargraph/api_map/source_to_yard.rb +67 -67
- data/lib/solargraph/api_map/store.rb +201 -201
- data/lib/solargraph/bundle.rb +24 -24
- data/lib/solargraph/complex_type.rb +150 -150
- data/lib/solargraph/complex_type/type_methods.rb +124 -124
- data/lib/solargraph/complex_type/unique_type.rb +44 -44
- data/lib/solargraph/core_fills.rb +37 -37
- data/lib/solargraph/diagnostics.rb +52 -52
- data/lib/solargraph/diagnostics/base.rb +20 -20
- data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
- data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
- data/lib/solargraph/diagnostics/update_errors.rb +38 -38
- data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
- data/lib/solargraph/language_server/error_codes.rb +18 -18
- data/lib/solargraph/language_server/host.rb +684 -681
- data/lib/solargraph/language_server/host/cataloger.rb +54 -79
- data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
- data/lib/solargraph/language_server/host/dispatch.rb +112 -113
- data/lib/solargraph/language_server/host/sources.rb +138 -138
- data/lib/solargraph/language_server/message.rb +90 -90
- data/lib/solargraph/language_server/message/base.rb +83 -83
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
- data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
- data/lib/solargraph/language_server/message/extended.rb +19 -19
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
- data/lib/solargraph/language_server/message/extended/document.rb +18 -18
- data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
- data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
- data/lib/solargraph/language_server/message/extended/search.rb +18 -18
- data/lib/solargraph/language_server/message/initialize.rb +141 -141
- data/lib/solargraph/language_server/message/initialized.rb +23 -23
- data/lib/solargraph/language_server/message/shutdown.rb +11 -11
- data/lib/solargraph/language_server/message/text_document.rb +25 -25
- data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
- data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
- data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
- data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
- data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
- data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
- data/lib/solargraph/language_server/message/workspace.rb +12 -12
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
- data/lib/solargraph/language_server/request.rb +22 -22
- data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
- data/lib/solargraph/language_server/transport.rb +11 -11
- data/lib/solargraph/language_server/transport/adapter.rb +60 -60
- data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
- data/lib/solargraph/language_server/uri_helpers.rb +25 -25
- data/lib/solargraph/library.rb +421 -419
- data/lib/solargraph/live_map.rb +126 -126
- data/lib/solargraph/live_map/cache.rb +38 -38
- data/lib/solargraph/location.rb +31 -31
- data/lib/solargraph/logging.rb +25 -25
- data/lib/solargraph/page.rb +68 -68
- data/lib/solargraph/pin.rb +50 -50
- data/lib/solargraph/pin/attribute.rb +41 -41
- data/lib/solargraph/pin/base.rb +280 -280
- data/lib/solargraph/pin/base_method.rb +76 -76
- data/lib/solargraph/pin/base_variable.rb +72 -72
- data/lib/solargraph/pin/block.rb +32 -32
- data/lib/solargraph/pin/block_parameter.rb +103 -103
- data/lib/solargraph/pin/class_variable.rb +9 -9
- data/lib/solargraph/pin/constant.rb +30 -30
- data/lib/solargraph/pin/conversions.rb +79 -79
- data/lib/solargraph/pin/documenting.rb +41 -41
- data/lib/solargraph/pin/duck_method.rb +14 -14
- data/lib/solargraph/pin/global_variable.rb +9 -9
- data/lib/solargraph/pin/instance_variable.rb +9 -9
- data/lib/solargraph/pin/keyword.rb +17 -17
- data/lib/solargraph/pin/local_variable.rb +23 -23
- data/lib/solargraph/pin/localized.rb +22 -22
- data/lib/solargraph/pin/method.rb +126 -126
- data/lib/solargraph/pin/method_alias.rb +30 -30
- data/lib/solargraph/pin/method_parameter.rb +40 -40
- data/lib/solargraph/pin/namespace.rb +54 -54
- data/lib/solargraph/pin/plugin/method.rb +25 -25
- data/lib/solargraph/pin/proxy_type.rb +35 -35
- data/lib/solargraph/pin/reference.rb +22 -22
- data/lib/solargraph/pin/reference/extend.rb +11 -11
- data/lib/solargraph/pin/reference/include.rb +11 -11
- data/lib/solargraph/pin/reference/require.rb +15 -15
- data/lib/solargraph/pin/reference/superclass.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +44 -44
- data/lib/solargraph/pin/yard_pin.rb +10 -10
- data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
- data/lib/solargraph/pin/yard_pin/method.rb +35 -35
- data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
- data/lib/solargraph/plugin.rb +8 -8
- data/lib/solargraph/plugin/base.rb +41 -41
- data/lib/solargraph/plugin/canceler.rb +11 -11
- data/lib/solargraph/plugin/process.rb +172 -172
- data/lib/solargraph/plugin/runtime.rb +134 -134
- data/lib/solargraph/position.rb +110 -110
- data/lib/solargraph/range.rb +83 -83
- data/lib/solargraph/server_methods.rb +14 -14
- data/lib/solargraph/shell.rb +102 -102
- data/lib/solargraph/source.rb +521 -521
- data/lib/solargraph/source/chain.rb +120 -120
- data/lib/solargraph/source/chain/call.rb +107 -107
- data/lib/solargraph/source/chain/class_variable.rb +11 -11
- data/lib/solargraph/source/chain/constant.rb +30 -30
- data/lib/solargraph/source/chain/global_variable.rb +11 -11
- data/lib/solargraph/source/chain/head.rb +33 -33
- data/lib/solargraph/source/chain/instance_variable.rb +11 -11
- data/lib/solargraph/source/chain/link.rb +33 -33
- data/lib/solargraph/source/chain/literal.rb +21 -21
- data/lib/solargraph/source/chain/variable.rb +11 -11
- data/lib/solargraph/source/change.rb +77 -77
- data/lib/solargraph/source/cursor.rb +157 -157
- data/lib/solargraph/source/node_chainer.rb +96 -96
- data/lib/solargraph/source/node_methods.rb +225 -225
- data/lib/solargraph/source/source_chainer.rb +183 -183
- data/lib/solargraph/source_map.rb +169 -169
- data/lib/solargraph/source_map/clip.rb +145 -145
- data/lib/solargraph/source_map/completion.rb +21 -21
- data/lib/solargraph/source_map/mapper.rb +149 -149
- data/lib/solargraph/source_map/node_processor.rb +78 -78
- data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
- data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
- data/lib/solargraph/source_map/node_processor/base.rb +68 -68
- data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
- data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
- data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
- data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
- data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
- data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
- data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
- data/lib/solargraph/source_map/region.rb +58 -58
- data/lib/solargraph/version.rb +3 -3
- data/lib/solargraph/views/environment.erb +53 -53
- data/lib/solargraph/workspace.rb +183 -183
- data/lib/solargraph/workspace/config.rb +170 -170
- data/lib/solargraph/yard_map.rb +298 -298
- data/lib/solargraph/yard_map/cache.rb +17 -17
- data/lib/solargraph/yard_map/core_docs.rb +163 -163
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/yard-coregen.rb +16 -16
- data/lib/yard-solargraph.rb +18 -18
- data/solargraph.gemspec +37 -0
- data/travis-bundler.rb +10 -0
- metadata +19 -6
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
class ApiMap
|
|
3
|
-
class Cache
|
|
4
|
-
def initialize
|
|
5
|
-
@methods = {}
|
|
6
|
-
@constants = {}
|
|
7
|
-
@qualified_namespaces = {}
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def get_methods fqns, scope, visibility, deep
|
|
11
|
-
@methods[[fqns, scope, visibility.sort, deep]]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def set_methods fqns, scope, visibility, deep, value
|
|
15
|
-
@methods[[fqns, scope, visibility.sort, deep]] = value
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def get_constants namespace, context
|
|
19
|
-
@constants[[namespace, context]]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def set_constants namespace, context, value
|
|
23
|
-
@constants[[namespace, context]] = value
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def get_qualified_namespace name, context
|
|
27
|
-
@qualified_namespaces[[name, context]]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def set_qualified_namespace name, context, value
|
|
31
|
-
@qualified_namespaces[[name, context]] = value
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# @return [void]
|
|
35
|
-
def clear
|
|
36
|
-
@methods.clear
|
|
37
|
-
@constants.clear
|
|
38
|
-
@qualified_namespaces.clear
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# @return [Boolean]
|
|
42
|
-
def empty?
|
|
43
|
-
@methods.empty? &&
|
|
44
|
-
@constants.empty? &&
|
|
45
|
-
@qualified_namespaces.empty?
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
class ApiMap
|
|
3
|
+
class Cache
|
|
4
|
+
def initialize
|
|
5
|
+
@methods = {}
|
|
6
|
+
@constants = {}
|
|
7
|
+
@qualified_namespaces = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get_methods fqns, scope, visibility, deep
|
|
11
|
+
@methods[[fqns, scope, visibility.sort, deep]]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def set_methods fqns, scope, visibility, deep, value
|
|
15
|
+
@methods[[fqns, scope, visibility.sort, deep]] = value
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_constants namespace, context
|
|
19
|
+
@constants[[namespace, context]]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def set_constants namespace, context, value
|
|
23
|
+
@constants[[namespace, context]] = value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get_qualified_namespace name, context
|
|
27
|
+
@qualified_namespaces[[name, context]]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def set_qualified_namespace name, context, value
|
|
31
|
+
@qualified_namespaces[[name, context]] = value
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @return [void]
|
|
35
|
+
def clear
|
|
36
|
+
@methods.clear
|
|
37
|
+
@constants.clear
|
|
38
|
+
@qualified_namespaces.clear
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
def empty?
|
|
43
|
+
@methods.empty? &&
|
|
44
|
+
@constants.empty? &&
|
|
45
|
+
@qualified_namespaces.empty?
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
class ApiMap
|
|
3
|
-
module SourceToYard
|
|
4
|
-
|
|
5
|
-
# Get the YARD CodeObject at the specified path.
|
|
6
|
-
#
|
|
7
|
-
# @param path [String]
|
|
8
|
-
# @return [YARD::CodeObjects::Base]
|
|
9
|
-
def code_object_at path
|
|
10
|
-
code_object_map[path]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @return [Array<String>]
|
|
14
|
-
def code_object_paths
|
|
15
|
-
code_object_map.keys
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @param store [Array<Store>] ApiMap pin store
|
|
19
|
-
# @return [void]
|
|
20
|
-
def rake_yard store
|
|
21
|
-
code_object_map.clear
|
|
22
|
-
store.namespace_pins.each do |pin|
|
|
23
|
-
next if pin.path.nil? or pin.path.empty?
|
|
24
|
-
if pin.type == :class
|
|
25
|
-
code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path)
|
|
26
|
-
else
|
|
27
|
-
code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path)
|
|
28
|
-
end
|
|
29
|
-
code_object_map[pin.path].docstring = pin.docstring
|
|
30
|
-
code_object_map[pin.path].files.push pin.location.filename unless pin.location.nil?
|
|
31
|
-
end
|
|
32
|
-
store.namespace_pins.each do |pin|
|
|
33
|
-
# pin.include_references.each do |ref|
|
|
34
|
-
store.get_includes(pin.path).each do |ref|
|
|
35
|
-
code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
store.method_pins.each do |pin|
|
|
39
|
-
code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, pin.scope)
|
|
40
|
-
code_object_map[pin.path].docstring = pin.docstring
|
|
41
|
-
code_object_map[pin.path].visibility = pin.visibility || :public
|
|
42
|
-
code_object_map[pin.path].files.push pin.location.filename unless pin.location.nil?
|
|
43
|
-
code_object_map[pin.path].parameters = pin.parameters.map do |p|
|
|
44
|
-
n = p.match(/^[a-z0-9_]*:?/i)[0]
|
|
45
|
-
v = nil
|
|
46
|
-
if p.length > n.length
|
|
47
|
-
v = p[n.length..-1].gsub(/^ = /, '')
|
|
48
|
-
end
|
|
49
|
-
[n, v]
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
|
|
56
|
-
# @return [Hash]
|
|
57
|
-
def code_object_map
|
|
58
|
-
@code_object_map ||= {}
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @return [YARD::CodeObjects::RootObject]
|
|
62
|
-
def root_code_object
|
|
63
|
-
@root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
class ApiMap
|
|
3
|
+
module SourceToYard
|
|
4
|
+
|
|
5
|
+
# Get the YARD CodeObject at the specified path.
|
|
6
|
+
#
|
|
7
|
+
# @param path [String]
|
|
8
|
+
# @return [YARD::CodeObjects::Base]
|
|
9
|
+
def code_object_at path
|
|
10
|
+
code_object_map[path]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @return [Array<String>]
|
|
14
|
+
def code_object_paths
|
|
15
|
+
code_object_map.keys
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @param store [Array<Store>] ApiMap pin store
|
|
19
|
+
# @return [void]
|
|
20
|
+
def rake_yard store
|
|
21
|
+
code_object_map.clear
|
|
22
|
+
store.namespace_pins.each do |pin|
|
|
23
|
+
next if pin.path.nil? or pin.path.empty?
|
|
24
|
+
if pin.type == :class
|
|
25
|
+
code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path)
|
|
26
|
+
else
|
|
27
|
+
code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path)
|
|
28
|
+
end
|
|
29
|
+
code_object_map[pin.path].docstring = pin.docstring
|
|
30
|
+
code_object_map[pin.path].files.push pin.location.filename unless pin.location.nil?
|
|
31
|
+
end
|
|
32
|
+
store.namespace_pins.each do |pin|
|
|
33
|
+
# pin.include_references.each do |ref|
|
|
34
|
+
store.get_includes(pin.path).each do |ref|
|
|
35
|
+
code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
store.method_pins.each do |pin|
|
|
39
|
+
code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, pin.scope)
|
|
40
|
+
code_object_map[pin.path].docstring = pin.docstring
|
|
41
|
+
code_object_map[pin.path].visibility = pin.visibility || :public
|
|
42
|
+
code_object_map[pin.path].files.push pin.location.filename unless pin.location.nil?
|
|
43
|
+
code_object_map[pin.path].parameters = pin.parameters.map do |p|
|
|
44
|
+
n = p.match(/^[a-z0-9_]*:?/i)[0]
|
|
45
|
+
v = nil
|
|
46
|
+
if p.length > n.length
|
|
47
|
+
v = p[n.length..-1].gsub(/^ = /, '')
|
|
48
|
+
end
|
|
49
|
+
[n, v]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# @return [Hash]
|
|
57
|
+
def code_object_map
|
|
58
|
+
@code_object_map ||= {}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @return [YARD::CodeObjects::RootObject]
|
|
62
|
+
def root_code_object
|
|
63
|
+
@root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class ApiMap
|
|
5
|
-
class Store
|
|
6
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
7
|
-
attr_reader :pins
|
|
8
|
-
|
|
9
|
-
# @param pins [Array<Solargraph::Source>]
|
|
10
|
-
def initialize pins = []
|
|
11
|
-
@pins = pins
|
|
12
|
-
index
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# @param fqns [String]
|
|
16
|
-
# @param visibility [Array<Symbol>]
|
|
17
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
18
|
-
def get_constants fqns, visibility = [:public]
|
|
19
|
-
namespace_children(fqns).select { |pin|
|
|
20
|
-
!pin.name.empty? and (pin.kind == Pin::NAMESPACE or pin.kind == Pin::CONSTANT) and visibility.include?(pin.visibility)
|
|
21
|
-
}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# @param fqns [String]
|
|
25
|
-
# @param scope [Symbol]
|
|
26
|
-
# @param visibility [Array<Symbol>]
|
|
27
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
28
|
-
def get_methods fqns, scope: :instance, visibility: [:public]
|
|
29
|
-
kinds = [Pin::METHOD, Pin::ATTRIBUTE]
|
|
30
|
-
namespace_children(fqns).select{ |pin|
|
|
31
|
-
kinds.include?(pin.kind) && pin.scope == scope && visibility.include?(pin.visibility)
|
|
32
|
-
}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# @param fqns [String]
|
|
36
|
-
# @return [String]
|
|
37
|
-
def get_superclass fqns
|
|
38
|
-
return superclass_references[fqns].first if superclass_references.has_key?(fqns)
|
|
39
|
-
nil
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# @param fqns [String]
|
|
43
|
-
# @return [Array<String>]
|
|
44
|
-
def get_includes fqns
|
|
45
|
-
include_references[fqns] || []
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# @param fqns [String]
|
|
49
|
-
# @return [Array<String>]
|
|
50
|
-
def get_extends fqns
|
|
51
|
-
extend_references[fqns] || []
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# @param path [String]
|
|
55
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
56
|
-
def get_path_pins path
|
|
57
|
-
return [] if path.nil? # @todo Should be '' instead?
|
|
58
|
-
pins.select { |pin| pin.path == path }
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @param fqns [String]
|
|
62
|
-
# @param scope [Symbol] :class or :instance
|
|
63
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
64
|
-
def get_instance_variables(fqns, scope = :instance)
|
|
65
|
-
namespace_children(fqns).select{|pin| pin.kind == Pin::INSTANCE_VARIABLE and pin.context.scope == scope}
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @param fqns [String]
|
|
69
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
70
|
-
def get_class_variables(fqns)
|
|
71
|
-
namespace_children(fqns).select{|pin| pin.kind == Pin::CLASS_VARIABLE}
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
75
|
-
def get_symbols
|
|
76
|
-
symbols.uniq(&:name)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# @param fqns [String]
|
|
80
|
-
# @return [Boolean]
|
|
81
|
-
def namespace_exists?(fqns)
|
|
82
|
-
fqns_pins(fqns).any?
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @return [Set<String>]
|
|
86
|
-
def namespaces
|
|
87
|
-
@namespaces ||= Set.new
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
91
|
-
def namespace_pins
|
|
92
|
-
@namespace_pins ||= pins.select{|p| p.kind == Pin::NAMESPACE}
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
96
|
-
def method_pins
|
|
97
|
-
@method_pins ||= pins.select{|p| p.kind == Pin::METHOD or p.kind == Pin::ATTRIBUTE}
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# @param fqns [String]
|
|
101
|
-
# @return [Array<String>]
|
|
102
|
-
def domains(fqns)
|
|
103
|
-
result = []
|
|
104
|
-
fqns_pins(fqns).each do |nspin|
|
|
105
|
-
result.concat nspin.domains
|
|
106
|
-
end
|
|
107
|
-
result
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# @return [Hash]
|
|
111
|
-
def named_macros
|
|
112
|
-
@named_macros ||= begin
|
|
113
|
-
result = {}
|
|
114
|
-
pins.each do |pin|
|
|
115
|
-
pin.macros.select{|m| m.tag.tag_name == 'macro'}.each do |macro|
|
|
116
|
-
next if macro.tag.name.nil? || macro.tag.name.empty?
|
|
117
|
-
result[macro.tag.name] = macro
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
result
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def inspect
|
|
125
|
-
# Avoid insane dumps in specs
|
|
126
|
-
to_s
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
private
|
|
130
|
-
|
|
131
|
-
# @param fqns [String]
|
|
132
|
-
# @return [Array<Solargraph::Pin::Namespace>]
|
|
133
|
-
def fqns_pins fqns
|
|
134
|
-
return [] if fqns.nil?
|
|
135
|
-
if fqns.include?('::')
|
|
136
|
-
parts = fqns.split('::')
|
|
137
|
-
name = parts.pop
|
|
138
|
-
base = parts.join('::')
|
|
139
|
-
else
|
|
140
|
-
base = ''
|
|
141
|
-
name = fqns
|
|
142
|
-
end
|
|
143
|
-
namespace_children(base).select{|pin| pin.name == name and pin.kind == Pin::NAMESPACE}
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
# @return [Array<Solargraph::Pin::Symbol>]
|
|
147
|
-
def symbols
|
|
148
|
-
@symbols ||= []
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def superclass_references
|
|
152
|
-
@superclass_references ||= {}
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
def include_references
|
|
156
|
-
@include_references ||= {}
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
def extend_references
|
|
160
|
-
@extend_references ||= {}
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# @param name [String]
|
|
164
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
165
|
-
def namespace_children name
|
|
166
|
-
namespace_map[name] || []
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# @return [Hash]
|
|
170
|
-
def namespace_map
|
|
171
|
-
@namespace_map ||= {}
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
# @return [void]
|
|
175
|
-
def index
|
|
176
|
-
namespace_map.clear
|
|
177
|
-
namespaces.clear
|
|
178
|
-
symbols.clear
|
|
179
|
-
namespace_map[''] = []
|
|
180
|
-
pins.each do |pin|
|
|
181
|
-
namespace_map[pin.namespace] ||= []
|
|
182
|
-
namespace_map[pin.namespace].push pin
|
|
183
|
-
namespaces.add pin.path if pin.kind == Pin::NAMESPACE and !pin.path.empty?
|
|
184
|
-
symbols.push pin if pin.kind == Pin::SYMBOL
|
|
185
|
-
if pin.kind == Pin::INCLUDE_REFERENCE
|
|
186
|
-
include_references[pin.namespace] ||= []
|
|
187
|
-
include_references[pin.namespace].push pin.name
|
|
188
|
-
elsif pin.kind == Pin::EXTEND_REFERENCE
|
|
189
|
-
extend_references[pin.namespace] ||= []
|
|
190
|
-
extend_references[pin.namespace].push pin.name
|
|
191
|
-
elsif pin.kind == Pin::SUPERCLASS_REFERENCE
|
|
192
|
-
superclass_references[pin.namespace] ||= []
|
|
193
|
-
superclass_references[pin.namespace].push pin.name
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
@namespace_pins = nil
|
|
197
|
-
@method_pins = nil
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
1
|
+
require 'set'
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class ApiMap
|
|
5
|
+
class Store
|
|
6
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
7
|
+
attr_reader :pins
|
|
8
|
+
|
|
9
|
+
# @param pins [Array<Solargraph::Source>]
|
|
10
|
+
def initialize pins = []
|
|
11
|
+
@pins = pins
|
|
12
|
+
index
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param fqns [String]
|
|
16
|
+
# @param visibility [Array<Symbol>]
|
|
17
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
18
|
+
def get_constants fqns, visibility = [:public]
|
|
19
|
+
namespace_children(fqns).select { |pin|
|
|
20
|
+
!pin.name.empty? and (pin.kind == Pin::NAMESPACE or pin.kind == Pin::CONSTANT) and visibility.include?(pin.visibility)
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param fqns [String]
|
|
25
|
+
# @param scope [Symbol]
|
|
26
|
+
# @param visibility [Array<Symbol>]
|
|
27
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
28
|
+
def get_methods fqns, scope: :instance, visibility: [:public]
|
|
29
|
+
kinds = [Pin::METHOD, Pin::ATTRIBUTE]
|
|
30
|
+
namespace_children(fqns).select{ |pin|
|
|
31
|
+
kinds.include?(pin.kind) && pin.scope == scope && visibility.include?(pin.visibility)
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @param fqns [String]
|
|
36
|
+
# @return [String]
|
|
37
|
+
def get_superclass fqns
|
|
38
|
+
return superclass_references[fqns].first if superclass_references.has_key?(fqns)
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @param fqns [String]
|
|
43
|
+
# @return [Array<String>]
|
|
44
|
+
def get_includes fqns
|
|
45
|
+
include_references[fqns] || []
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @param fqns [String]
|
|
49
|
+
# @return [Array<String>]
|
|
50
|
+
def get_extends fqns
|
|
51
|
+
extend_references[fqns] || []
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @param path [String]
|
|
55
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
56
|
+
def get_path_pins path
|
|
57
|
+
return [] if path.nil? # @todo Should be '' instead?
|
|
58
|
+
pins.select { |pin| pin.path == path }
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @param fqns [String]
|
|
62
|
+
# @param scope [Symbol] :class or :instance
|
|
63
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
64
|
+
def get_instance_variables(fqns, scope = :instance)
|
|
65
|
+
namespace_children(fqns).select{|pin| pin.kind == Pin::INSTANCE_VARIABLE and pin.context.scope == scope}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @param fqns [String]
|
|
69
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
70
|
+
def get_class_variables(fqns)
|
|
71
|
+
namespace_children(fqns).select{|pin| pin.kind == Pin::CLASS_VARIABLE}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
75
|
+
def get_symbols
|
|
76
|
+
symbols.uniq(&:name)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @param fqns [String]
|
|
80
|
+
# @return [Boolean]
|
|
81
|
+
def namespace_exists?(fqns)
|
|
82
|
+
fqns_pins(fqns).any?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @return [Set<String>]
|
|
86
|
+
def namespaces
|
|
87
|
+
@namespaces ||= Set.new
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
91
|
+
def namespace_pins
|
|
92
|
+
@namespace_pins ||= pins.select{|p| p.kind == Pin::NAMESPACE}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
96
|
+
def method_pins
|
|
97
|
+
@method_pins ||= pins.select{|p| p.kind == Pin::METHOD or p.kind == Pin::ATTRIBUTE}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @param fqns [String]
|
|
101
|
+
# @return [Array<String>]
|
|
102
|
+
def domains(fqns)
|
|
103
|
+
result = []
|
|
104
|
+
fqns_pins(fqns).each do |nspin|
|
|
105
|
+
result.concat nspin.domains
|
|
106
|
+
end
|
|
107
|
+
result
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# @return [Hash]
|
|
111
|
+
def named_macros
|
|
112
|
+
@named_macros ||= begin
|
|
113
|
+
result = {}
|
|
114
|
+
pins.each do |pin|
|
|
115
|
+
pin.macros.select{|m| m.tag.tag_name == 'macro'}.each do |macro|
|
|
116
|
+
next if macro.tag.name.nil? || macro.tag.name.empty?
|
|
117
|
+
result[macro.tag.name] = macro
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
result
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def inspect
|
|
125
|
+
# Avoid insane dumps in specs
|
|
126
|
+
to_s
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
|
|
131
|
+
# @param fqns [String]
|
|
132
|
+
# @return [Array<Solargraph::Pin::Namespace>]
|
|
133
|
+
def fqns_pins fqns
|
|
134
|
+
return [] if fqns.nil?
|
|
135
|
+
if fqns.include?('::')
|
|
136
|
+
parts = fqns.split('::')
|
|
137
|
+
name = parts.pop
|
|
138
|
+
base = parts.join('::')
|
|
139
|
+
else
|
|
140
|
+
base = ''
|
|
141
|
+
name = fqns
|
|
142
|
+
end
|
|
143
|
+
namespace_children(base).select{|pin| pin.name == name and pin.kind == Pin::NAMESPACE}
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# @return [Array<Solargraph::Pin::Symbol>]
|
|
147
|
+
def symbols
|
|
148
|
+
@symbols ||= []
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def superclass_references
|
|
152
|
+
@superclass_references ||= {}
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def include_references
|
|
156
|
+
@include_references ||= {}
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def extend_references
|
|
160
|
+
@extend_references ||= {}
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# @param name [String]
|
|
164
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
165
|
+
def namespace_children name
|
|
166
|
+
namespace_map[name] || []
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @return [Hash]
|
|
170
|
+
def namespace_map
|
|
171
|
+
@namespace_map ||= {}
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @return [void]
|
|
175
|
+
def index
|
|
176
|
+
namespace_map.clear
|
|
177
|
+
namespaces.clear
|
|
178
|
+
symbols.clear
|
|
179
|
+
namespace_map[''] = []
|
|
180
|
+
pins.each do |pin|
|
|
181
|
+
namespace_map[pin.namespace] ||= []
|
|
182
|
+
namespace_map[pin.namespace].push pin
|
|
183
|
+
namespaces.add pin.path if pin.kind == Pin::NAMESPACE and !pin.path.empty?
|
|
184
|
+
symbols.push pin if pin.kind == Pin::SYMBOL
|
|
185
|
+
if pin.kind == Pin::INCLUDE_REFERENCE
|
|
186
|
+
include_references[pin.namespace] ||= []
|
|
187
|
+
include_references[pin.namespace].push pin.name
|
|
188
|
+
elsif pin.kind == Pin::EXTEND_REFERENCE
|
|
189
|
+
extend_references[pin.namespace] ||= []
|
|
190
|
+
extend_references[pin.namespace].push pin.name
|
|
191
|
+
elsif pin.kind == Pin::SUPERCLASS_REFERENCE
|
|
192
|
+
superclass_references[pin.namespace] ||= []
|
|
193
|
+
superclass_references[pin.namespace].push pin.name
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
@namespace_pins = nil
|
|
197
|
+
@method_pins = nil
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|