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
data/lib/solargraph/live_map.rb
CHANGED
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
# The LiveMap allows extensions to add their own completion suggestions.
|
|
3
|
-
#
|
|
4
|
-
class LiveMap
|
|
5
|
-
autoload :Cache, 'solargraph/live_map/cache'
|
|
6
|
-
|
|
7
|
-
@@plugin_registry = {}
|
|
8
|
-
|
|
9
|
-
# @return [Solargraph::ApiMap]
|
|
10
|
-
attr_reader :api_map
|
|
11
|
-
|
|
12
|
-
# @param api_map [Solargraph::ApiMap]
|
|
13
|
-
def initialize api_map
|
|
14
|
-
@api_map = api_map
|
|
15
|
-
runners
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def get_path_pin path
|
|
19
|
-
cache.get_path_pin(path)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
23
|
-
def get_methods(namespace, root = '', scope = 'instance', with_private = false)
|
|
24
|
-
fqns = api_map.qualify(namespace, root)
|
|
25
|
-
params = {
|
|
26
|
-
namespace: namespace, root: root, scope: scope, with_private: with_private
|
|
27
|
-
}
|
|
28
|
-
cached = cache.get_methods(params)
|
|
29
|
-
return cached unless cached.nil?
|
|
30
|
-
did_runtime = false
|
|
31
|
-
result = []
|
|
32
|
-
runners.each do |p|
|
|
33
|
-
next if did_runtime and p.runtime?
|
|
34
|
-
p.get_methods(namespace: namespace, root: root, scope: scope, with_private: with_private).each do |m|
|
|
35
|
-
result.push Solargraph::Pin::Method.new(nil, namespace, m['name'], YARD::Docstring.new('(defined at runtime)'), scope.to_sym, nil, [])
|
|
36
|
-
end
|
|
37
|
-
did_runtime = true if p.runtime?
|
|
38
|
-
end
|
|
39
|
-
cache.set_methods(params, result)
|
|
40
|
-
result
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @return [Array<Solargraph::Pin::Base>]
|
|
44
|
-
def get_constants(namespace, root = '')
|
|
45
|
-
cached = cache.get_constants(namespace, root)
|
|
46
|
-
return cached unless cached.nil?
|
|
47
|
-
did_runtime = false
|
|
48
|
-
result = []
|
|
49
|
-
runners.each do |p|
|
|
50
|
-
next if did_runtime and p.runtime?
|
|
51
|
-
result.concat p.get_constants(namespace, root)
|
|
52
|
-
did_runtime = true if p.runtime?
|
|
53
|
-
end
|
|
54
|
-
suggestions = []
|
|
55
|
-
result.uniq.each do |r|
|
|
56
|
-
path = (r['namespace'].empty? ? '' : "#{r['namespace']}::") + r['name']
|
|
57
|
-
kind = Pin::CONSTANT
|
|
58
|
-
if r['class'] == 'Class'
|
|
59
|
-
suggestions.push Pin::Namespace.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime)"), :class, :public, nil)
|
|
60
|
-
elsif r['class'] == 'Module'
|
|
61
|
-
suggestions.push Pin::Namespace.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime)"), :module, :public, nil)
|
|
62
|
-
else
|
|
63
|
-
suggestions.push Pin::Constant.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime"), nil, nil, nil, :public)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
cache.set_constants(namespace, root, suggestions)
|
|
67
|
-
suggestions
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def get_fqns(namespace, root)
|
|
71
|
-
did_runtime = false
|
|
72
|
-
runners.each do |p|
|
|
73
|
-
next if did_runtime and p.runtime?
|
|
74
|
-
result = p.get_fqns(namespace, root)
|
|
75
|
-
return result unless result.nil?
|
|
76
|
-
did_runtime = true if p.runtime?
|
|
77
|
-
end
|
|
78
|
-
nil
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def self.register name, klass
|
|
82
|
-
raise ArgumentError.new("A Solargraph plugin named #{name} already exists") if @@plugin_registry.has_key?(name)
|
|
83
|
-
@@plugin_registry[name] = klass
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def refresh
|
|
87
|
-
changed = false
|
|
88
|
-
runners.each do |p|
|
|
89
|
-
changed ||= p.refresh
|
|
90
|
-
end
|
|
91
|
-
if changed
|
|
92
|
-
Solargraph::Logging.logger.debug "Resetting LiveMap cache"
|
|
93
|
-
cache.clear
|
|
94
|
-
get_constants('')
|
|
95
|
-
get_methods('', '', 'class')
|
|
96
|
-
get_methods('', '', 'instance')
|
|
97
|
-
get_methods('Kernel', '', 'class')
|
|
98
|
-
get_methods('Kernel', '', 'instance')
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
private
|
|
103
|
-
|
|
104
|
-
# @return [Solargraph::LiveMap::Cache]
|
|
105
|
-
def cache
|
|
106
|
-
@cache ||= Solargraph::LiveMap::Cache.new
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# @return [Array<Solargraph::Plugin::Base>]
|
|
110
|
-
def runners
|
|
111
|
-
@runners ||= load_runners
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# @return [Array<Solargraph::Plugin::Base>]
|
|
115
|
-
def load_runners
|
|
116
|
-
result = []
|
|
117
|
-
api_map.workspace.config.plugins.each do |name|
|
|
118
|
-
r = @@plugin_registry[name].new(api_map)
|
|
119
|
-
result.push r
|
|
120
|
-
end
|
|
121
|
-
result
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
Solargraph::LiveMap.register 'runtime', Solargraph::Plugin::Runtime
|
|
1
|
+
module Solargraph
|
|
2
|
+
# The LiveMap allows extensions to add their own completion suggestions.
|
|
3
|
+
#
|
|
4
|
+
class LiveMap
|
|
5
|
+
autoload :Cache, 'solargraph/live_map/cache'
|
|
6
|
+
|
|
7
|
+
@@plugin_registry = {}
|
|
8
|
+
|
|
9
|
+
# @return [Solargraph::ApiMap]
|
|
10
|
+
attr_reader :api_map
|
|
11
|
+
|
|
12
|
+
# @param api_map [Solargraph::ApiMap]
|
|
13
|
+
def initialize api_map
|
|
14
|
+
@api_map = api_map
|
|
15
|
+
runners
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_path_pin path
|
|
19
|
+
cache.get_path_pin(path)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
23
|
+
def get_methods(namespace, root = '', scope = 'instance', with_private = false)
|
|
24
|
+
fqns = api_map.qualify(namespace, root)
|
|
25
|
+
params = {
|
|
26
|
+
namespace: namespace, root: root, scope: scope, with_private: with_private
|
|
27
|
+
}
|
|
28
|
+
cached = cache.get_methods(params)
|
|
29
|
+
return cached unless cached.nil?
|
|
30
|
+
did_runtime = false
|
|
31
|
+
result = []
|
|
32
|
+
runners.each do |p|
|
|
33
|
+
next if did_runtime and p.runtime?
|
|
34
|
+
p.get_methods(namespace: namespace, root: root, scope: scope, with_private: with_private).each do |m|
|
|
35
|
+
result.push Solargraph::Pin::Method.new(nil, namespace, m['name'], YARD::Docstring.new('(defined at runtime)'), scope.to_sym, nil, [])
|
|
36
|
+
end
|
|
37
|
+
did_runtime = true if p.runtime?
|
|
38
|
+
end
|
|
39
|
+
cache.set_methods(params, result)
|
|
40
|
+
result
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @return [Array<Solargraph::Pin::Base>]
|
|
44
|
+
def get_constants(namespace, root = '')
|
|
45
|
+
cached = cache.get_constants(namespace, root)
|
|
46
|
+
return cached unless cached.nil?
|
|
47
|
+
did_runtime = false
|
|
48
|
+
result = []
|
|
49
|
+
runners.each do |p|
|
|
50
|
+
next if did_runtime and p.runtime?
|
|
51
|
+
result.concat p.get_constants(namespace, root)
|
|
52
|
+
did_runtime = true if p.runtime?
|
|
53
|
+
end
|
|
54
|
+
suggestions = []
|
|
55
|
+
result.uniq.each do |r|
|
|
56
|
+
path = (r['namespace'].empty? ? '' : "#{r['namespace']}::") + r['name']
|
|
57
|
+
kind = Pin::CONSTANT
|
|
58
|
+
if r['class'] == 'Class'
|
|
59
|
+
suggestions.push Pin::Namespace.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime)"), :class, :public, nil)
|
|
60
|
+
elsif r['class'] == 'Module'
|
|
61
|
+
suggestions.push Pin::Namespace.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime)"), :module, :public, nil)
|
|
62
|
+
else
|
|
63
|
+
suggestions.push Pin::Constant.new(nil, r['namespace'], r['name'], YARD::Docstring.new("(defined at runtime"), nil, nil, nil, :public)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
cache.set_constants(namespace, root, suggestions)
|
|
67
|
+
suggestions
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def get_fqns(namespace, root)
|
|
71
|
+
did_runtime = false
|
|
72
|
+
runners.each do |p|
|
|
73
|
+
next if did_runtime and p.runtime?
|
|
74
|
+
result = p.get_fqns(namespace, root)
|
|
75
|
+
return result unless result.nil?
|
|
76
|
+
did_runtime = true if p.runtime?
|
|
77
|
+
end
|
|
78
|
+
nil
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.register name, klass
|
|
82
|
+
raise ArgumentError.new("A Solargraph plugin named #{name} already exists") if @@plugin_registry.has_key?(name)
|
|
83
|
+
@@plugin_registry[name] = klass
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def refresh
|
|
87
|
+
changed = false
|
|
88
|
+
runners.each do |p|
|
|
89
|
+
changed ||= p.refresh
|
|
90
|
+
end
|
|
91
|
+
if changed
|
|
92
|
+
Solargraph::Logging.logger.debug "Resetting LiveMap cache"
|
|
93
|
+
cache.clear
|
|
94
|
+
get_constants('')
|
|
95
|
+
get_methods('', '', 'class')
|
|
96
|
+
get_methods('', '', 'instance')
|
|
97
|
+
get_methods('Kernel', '', 'class')
|
|
98
|
+
get_methods('Kernel', '', 'instance')
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
# @return [Solargraph::LiveMap::Cache]
|
|
105
|
+
def cache
|
|
106
|
+
@cache ||= Solargraph::LiveMap::Cache.new
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @return [Array<Solargraph::Plugin::Base>]
|
|
110
|
+
def runners
|
|
111
|
+
@runners ||= load_runners
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# @return [Array<Solargraph::Plugin::Base>]
|
|
115
|
+
def load_runners
|
|
116
|
+
result = []
|
|
117
|
+
api_map.workspace.config.plugins.each do |name|
|
|
118
|
+
r = @@plugin_registry[name].new(api_map)
|
|
119
|
+
result.push r
|
|
120
|
+
end
|
|
121
|
+
result
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
Solargraph::LiveMap.register 'runtime', Solargraph::Plugin::Runtime
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
class LiveMap
|
|
3
|
-
class Cache
|
|
4
|
-
def initialize
|
|
5
|
-
@method_cache = {}
|
|
6
|
-
@constant_cache = {}
|
|
7
|
-
@path_cache = {}
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def get_methods options
|
|
11
|
-
@method_cache[options]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def set_methods options, values
|
|
15
|
-
@method_cache[options] = values
|
|
16
|
-
values.each { |pin| @path_cache[pin.path] = pin }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def get_constants namespace, root
|
|
20
|
-
@constant_cache[[namespace, root]]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def set_constants namespace, root, values
|
|
24
|
-
@constant_cache[[namespace, root]] = values
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def get_path_pin path
|
|
28
|
-
@path_cache[path]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def clear
|
|
32
|
-
@method_cache.clear
|
|
33
|
-
@constant_cache.clear
|
|
34
|
-
@path_cache.clear
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
class LiveMap
|
|
3
|
+
class Cache
|
|
4
|
+
def initialize
|
|
5
|
+
@method_cache = {}
|
|
6
|
+
@constant_cache = {}
|
|
7
|
+
@path_cache = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get_methods options
|
|
11
|
+
@method_cache[options]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def set_methods options, values
|
|
15
|
+
@method_cache[options] = values
|
|
16
|
+
values.each { |pin| @path_cache[pin.path] = pin }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_constants namespace, root
|
|
20
|
+
@constant_cache[[namespace, root]]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_constants namespace, root, values
|
|
24
|
+
@constant_cache[[namespace, root]] = values
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def get_path_pin path
|
|
28
|
+
@path_cache[path]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def clear
|
|
32
|
+
@method_cache.clear
|
|
33
|
+
@constant_cache.clear
|
|
34
|
+
@path_cache.clear
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/solargraph/location.rb
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
# A section of text identified by its filename and range.
|
|
3
|
-
#
|
|
4
|
-
class Location
|
|
5
|
-
# @return [String]
|
|
6
|
-
attr_reader :filename
|
|
7
|
-
|
|
8
|
-
# @return [Solargraph::Range]
|
|
9
|
-
attr_reader :range
|
|
10
|
-
|
|
11
|
-
# @param filename [String]
|
|
12
|
-
# @param range [Solargraph::Range]
|
|
13
|
-
def initialize filename, range
|
|
14
|
-
@filename = filename
|
|
15
|
-
@range = range
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @return [Hash]
|
|
19
|
-
def to_hash
|
|
20
|
-
{
|
|
21
|
-
filename: filename,
|
|
22
|
-
range: range.to_hash
|
|
23
|
-
}
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def == other
|
|
27
|
-
return false unless other.is_a?(Location)
|
|
28
|
-
filename == other.filename and range == other.range
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
# A section of text identified by its filename and range.
|
|
3
|
+
#
|
|
4
|
+
class Location
|
|
5
|
+
# @return [String]
|
|
6
|
+
attr_reader :filename
|
|
7
|
+
|
|
8
|
+
# @return [Solargraph::Range]
|
|
9
|
+
attr_reader :range
|
|
10
|
+
|
|
11
|
+
# @param filename [String]
|
|
12
|
+
# @param range [Solargraph::Range]
|
|
13
|
+
def initialize filename, range
|
|
14
|
+
@filename = filename
|
|
15
|
+
@range = range
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @return [Hash]
|
|
19
|
+
def to_hash
|
|
20
|
+
{
|
|
21
|
+
filename: filename,
|
|
22
|
+
range: range.to_hash
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def == other
|
|
27
|
+
return false unless other.is_a?(Location)
|
|
28
|
+
filename == other.filename and range == other.range
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/solargraph/logging.rb
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
require 'logger'
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Logging
|
|
5
|
-
DEFAULT_LOG_LEVEL = Logger::WARN
|
|
6
|
-
|
|
7
|
-
LOG_LEVELS = {
|
|
8
|
-
'warn' => Logger::WARN,
|
|
9
|
-
'info' => Logger::INFO,
|
|
10
|
-
'debug' => Logger::DEBUG
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
@@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
|
|
14
|
-
@@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
15
|
-
"[#{severity}] #{msg}\n"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
module_function
|
|
19
|
-
|
|
20
|
-
# @return [Logger]
|
|
21
|
-
def logger
|
|
22
|
-
@@logger
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
1
|
+
require 'logger'
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Logging
|
|
5
|
+
DEFAULT_LOG_LEVEL = Logger::WARN
|
|
6
|
+
|
|
7
|
+
LOG_LEVELS = {
|
|
8
|
+
'warn' => Logger::WARN,
|
|
9
|
+
'info' => Logger::INFO,
|
|
10
|
+
'debug' => Logger::DEBUG
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
|
|
14
|
+
@@logger.formatter = proc do |severity, datetime, progname, msg|
|
|
15
|
+
"[#{severity}] #{msg}\n"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module_function
|
|
19
|
+
|
|
20
|
+
# @return [Logger]
|
|
21
|
+
def logger
|
|
22
|
+
@@logger
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/solargraph/page.rb
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
require 'ostruct'
|
|
2
|
-
require 'tilt'
|
|
3
|
-
require 'kramdown'
|
|
4
|
-
require 'htmlentities'
|
|
5
|
-
require 'cgi'
|
|
6
|
-
|
|
7
|
-
module Solargraph
|
|
8
|
-
class Page
|
|
9
|
-
class Binder < OpenStruct
|
|
10
|
-
def initialize locals, render_method
|
|
11
|
-
super(locals)
|
|
12
|
-
define_singleton_method :render do |template, layout: false, locals: {}|
|
|
13
|
-
render_method.call(template, layout: layout, locals: locals)
|
|
14
|
-
end
|
|
15
|
-
define_singleton_method :erb do |template, layout: false, locals: {}|
|
|
16
|
-
render_method.call(template, layout: layout, locals: locals)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def htmlify text
|
|
21
|
-
Kramdown::Document.new(
|
|
22
|
-
text.to_s.lines.map{|l| l.gsub(/^ /, "\t")}.join,
|
|
23
|
-
input: 'GFM',
|
|
24
|
-
entity_output: :symbolic,
|
|
25
|
-
syntax_highlighter_opts: {
|
|
26
|
-
block: {
|
|
27
|
-
line_numbers: false
|
|
28
|
-
},
|
|
29
|
-
default_lang: :ruby
|
|
30
|
-
},
|
|
31
|
-
).to_html
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def ruby_to_html code
|
|
35
|
-
code
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
private_constant :Binder
|
|
39
|
-
|
|
40
|
-
def initialize directory = VIEWS_PATH
|
|
41
|
-
directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
|
|
42
|
-
directories = [directory]
|
|
43
|
-
directories.push VIEWS_PATH if directory != VIEWS_PATH
|
|
44
|
-
@render_method = proc { |template, layout: false, locals: {}|
|
|
45
|
-
binder = Binder.new(locals, @render_method)
|
|
46
|
-
if layout
|
|
47
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
|
|
48
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
49
|
-
end
|
|
50
|
-
else
|
|
51
|
-
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
52
|
-
end
|
|
53
|
-
}
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def render template, layout: true, locals: {}
|
|
57
|
-
@render_method.call(template, layout: layout, locals: locals)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def self.select_template directories, name
|
|
61
|
-
directories.each do |dir|
|
|
62
|
-
path = File.join(dir, "#{name}.erb")
|
|
63
|
-
return path if File.file?(path)
|
|
64
|
-
end
|
|
65
|
-
raise FileNotFoundError, "Template not found: #{name}"
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
require 'kramdown'
|
|
4
|
+
require 'htmlentities'
|
|
5
|
+
require 'cgi'
|
|
6
|
+
|
|
7
|
+
module Solargraph
|
|
8
|
+
class Page
|
|
9
|
+
class Binder < OpenStruct
|
|
10
|
+
def initialize locals, render_method
|
|
11
|
+
super(locals)
|
|
12
|
+
define_singleton_method :render do |template, layout: false, locals: {}|
|
|
13
|
+
render_method.call(template, layout: layout, locals: locals)
|
|
14
|
+
end
|
|
15
|
+
define_singleton_method :erb do |template, layout: false, locals: {}|
|
|
16
|
+
render_method.call(template, layout: layout, locals: locals)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def htmlify text
|
|
21
|
+
Kramdown::Document.new(
|
|
22
|
+
text.to_s.lines.map{|l| l.gsub(/^ /, "\t")}.join,
|
|
23
|
+
input: 'GFM',
|
|
24
|
+
entity_output: :symbolic,
|
|
25
|
+
syntax_highlighter_opts: {
|
|
26
|
+
block: {
|
|
27
|
+
line_numbers: false
|
|
28
|
+
},
|
|
29
|
+
default_lang: :ruby
|
|
30
|
+
},
|
|
31
|
+
).to_html
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def ruby_to_html code
|
|
35
|
+
code
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
private_constant :Binder
|
|
39
|
+
|
|
40
|
+
def initialize directory = VIEWS_PATH
|
|
41
|
+
directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
|
|
42
|
+
directories = [directory]
|
|
43
|
+
directories.push VIEWS_PATH if directory != VIEWS_PATH
|
|
44
|
+
@render_method = proc { |template, layout: false, locals: {}|
|
|
45
|
+
binder = Binder.new(locals, @render_method)
|
|
46
|
+
if layout
|
|
47
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
|
|
48
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
49
|
+
end
|
|
50
|
+
else
|
|
51
|
+
Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
|
|
52
|
+
end
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def render template, layout: true, locals: {}
|
|
57
|
+
@render_method.call(template, layout: layout, locals: locals)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.select_template directories, name
|
|
61
|
+
directories.each do |dir|
|
|
62
|
+
path = File.join(dir, "#{name}.erb")
|
|
63
|
+
return path if File.file?(path)
|
|
64
|
+
end
|
|
65
|
+
raise FileNotFoundError, "Template not found: #{name}"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|