solargraph 0.28.3 → 0.29.0

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/solargraph/api_map/store.rb +13 -0
  3. data/lib/solargraph/api_map.rb +43 -10
  4. data/lib/solargraph/bundle.rb +3 -0
  5. data/lib/solargraph/complex_type.rb +5 -4
  6. data/lib/solargraph/core_fills.rb +3 -2
  7. data/lib/solargraph/language_server/host.rb +0 -1
  8. data/lib/solargraph/language_server/message/completion_item/resolve.rb +0 -3
  9. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +4 -3
  10. data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -0
  11. data/lib/solargraph/language_server/transport/socket.rb +7 -1
  12. data/lib/solargraph/library.rb +1 -1
  13. data/lib/solargraph/page.rb +3 -6
  14. data/lib/solargraph/pin/base.rb +8 -3
  15. data/lib/solargraph/pin/base_variable.rb +1 -1
  16. data/lib/solargraph/pin/block_parameter.rb +5 -0
  17. data/lib/solargraph/pin/conversions.rb +1 -1
  18. data/lib/solargraph/pin/documenting.rb +30 -7
  19. data/lib/solargraph/pin/method.rb +59 -1
  20. data/lib/solargraph/pin/method_alias.rb +19 -0
  21. data/lib/solargraph/pin/yard_pin/method.rb +2 -2
  22. data/lib/solargraph/pin.rb +1 -1
  23. data/lib/solargraph/source/chain/call.rb +39 -20
  24. data/lib/solargraph/source/node_chainer.rb +1 -1
  25. data/lib/solargraph/source/node_methods.rb +81 -0
  26. data/lib/solargraph/source.rb +63 -1
  27. data/lib/solargraph/source_map/clip.rb +1 -1
  28. data/lib/solargraph/source_map/mapper.rb +9 -421
  29. data/lib/solargraph/source_map/node_processor/alias_node.rb +21 -0
  30. data/lib/solargraph/source_map/node_processor/args_node.rb +28 -0
  31. data/lib/solargraph/source_map/node_processor/base.rb +68 -0
  32. data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -0
  33. data/lib/solargraph/source_map/node_processor/block_node.rb +14 -0
  34. data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -0
  35. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -0
  36. data/lib/solargraph/source_map/node_processor/def_node.rb +54 -0
  37. data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -0
  38. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -0
  39. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -0
  40. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -0
  41. data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -0
  42. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -0
  43. data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -0
  44. data/lib/solargraph/source_map/node_processor/send_node.rb +150 -0
  45. data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -0
  46. data/lib/solargraph/source_map/node_processor.rb +75 -0
  47. data/lib/solargraph/source_map/region.rb +58 -0
  48. data/lib/solargraph/source_map.rb +15 -0
  49. data/lib/solargraph/version.rb +1 -1
  50. data/lib/solargraph/workspace.rb +19 -4
  51. data/lib/solargraph/yard_map.rb +17 -10
  52. data/lib/yard-solargraph.rb +0 -2
  53. metadata +60 -55
  54. data/lib/solargraph/pin/helper.rb +0 -41
@@ -2,9 +2,11 @@ module Solargraph
2
2
  # An index of pins and other ApiMap-related data for a Source.
3
3
  #
4
4
  class SourceMap
5
+ autoload :NodeProcessor, 'solargraph/source_map/node_processor'
5
6
  autoload :Mapper, 'solargraph/source_map/mapper'
6
7
  autoload :Clip, 'solargraph/source_map/clip'
7
8
  autoload :Completion, 'solargraph/source_map/completion'
9
+ autoload :Region, 'solargraph/source_map/region'
8
10
 
9
11
  # @return [Source]
10
12
  attr_reader :source
@@ -15,6 +17,9 @@ module Solargraph
15
17
  # @return [Array<Pin::Base>]
16
18
  attr_reader :locals
17
19
 
20
+ # @param source [Source]
21
+ # @param pins [Array<Pin::Base>]
22
+ # @param locals [Array<Pin::Base>]
18
23
  def initialize source, pins, locals
19
24
  # HACK: Keep the library from changing this
20
25
  @source = source.dup
@@ -22,14 +27,17 @@ module Solargraph
22
27
  @locals = locals
23
28
  end
24
29
 
30
+ # @return [String]
25
31
  def filename
26
32
  source.filename
27
33
  end
28
34
 
35
+ # @return [String]
29
36
  def code
30
37
  source.code
31
38
  end
32
39
 
40
+ # @return [Array<Pin::Reference::Require>]
33
41
  def requires
34
42
  @requires ||= pins.select{|p| p.kind == Pin::REQUIRE_REFERENCE}
35
43
  end
@@ -46,12 +54,15 @@ module Solargraph
46
54
  @source.comment_at?(position)
47
55
  end
48
56
 
57
+ # @return [Array<Pin::Base>]
49
58
  def document_symbols
50
59
  @document_symbols ||= pins.select { |pin|
51
60
  [Pin::ATTRIBUTE, Pin::CONSTANT, Pin::METHOD, Pin::NAMESPACE].include?(pin.kind) and !pin.path.empty?
52
61
  }
53
62
  end
54
63
 
64
+ # @param query [String]
65
+ # @return [Array<Pin::Base>]
55
66
  def query_symbols query
56
67
  document_symbols.select{|pin| pin.path.include?(query)}
57
68
  end
@@ -82,6 +93,7 @@ module Solargraph
82
93
  end
83
94
 
84
95
  # @param other_map [SourceMap]
96
+ # @return Boolean
85
97
  def try_merge! other_map
86
98
  return false if pins.length != other_map.pins.length || locals.length != other_map.locals.length || requires.map(&:name).uniq.sort != other_map.requires.map(&:name).uniq.sort
87
99
  pins.each_index do |i|
@@ -101,12 +113,15 @@ module Solargraph
101
113
  end
102
114
 
103
115
  class << self
116
+ # @param filename [String]
104
117
  # @return [SourceMap]
105
118
  def load filename
106
119
  source = Solargraph::Source.load(filename)
107
120
  SourceMap.map(source)
108
121
  end
109
122
 
123
+ # @param code [String]
124
+ # @param filename [String, nil]
110
125
  # @return [SourceMap]
111
126
  def load_string code, filename = nil
112
127
  source = Solargraph::Source.load_string(code, filename)
@@ -1,3 +1,3 @@
1
1
  module Solargraph
2
- VERSION = '0.28.3'
2
+ VERSION = '0.29.0'
3
3
  end
@@ -139,23 +139,38 @@ module Solargraph
139
139
  end
140
140
  end
141
141
 
142
+ # Generate require paths from gemspecs if they exist or assume the default
143
+ # lib directory.
144
+ #
145
+ # @return [Array<String>]
142
146
  def generate_require_paths
143
147
  return configured_require_paths if directory.empty? || !gemspec?
144
148
  result = []
145
149
  gemspecs.each do |file|
150
+ base = File.dirname(file)
146
151
  # @todo Evaluating gemspec files violates the goal of not running
147
152
  # workspace code, but this is how Gem::Specification.load does it
148
153
  # anyway.
149
- spec = eval(File.read(file), binding, file)
150
- next unless Gem::Specification === spec
151
- base = File.dirname(file)
152
- result.concat spec.require_paths.map{ |path| File.join(base, path) } unless spec.nil?
154
+ begin
155
+ spec = eval(File.read(file), binding, file)
156
+ next unless Gem::Specification === spec
157
+ result.concat spec.require_paths.map{ |path| File.join(base, path) } unless spec.nil?
158
+ rescue Exception => e
159
+ # Don't die if we have an error during eval-ing a gem spec.
160
+ # Concat the default lib directory instead.
161
+ # @todo Should the client be informed of the error through
162
+ # diagnostics or some other mechanism?
163
+ result.push File.join(base, 'lib')
164
+ end
153
165
  end
154
166
  result.concat config.require_paths
155
167
  result.push File.join(directory, 'lib') if result.empty?
156
168
  result
157
169
  end
158
170
 
171
+ # Get additional require paths defined in the configuration.
172
+ #
173
+ # @return [Array<String>]
159
174
  def configured_require_paths
160
175
  return ['lib'] if directory.empty?
161
176
  return [File.join(directory, 'lib')] if config.require_paths.empty?
@@ -23,10 +23,14 @@ module Solargraph
23
23
  # @return [Array<String>]
24
24
  attr_reader :required
25
25
 
26
+ attr_writer :with_dependencies
27
+
26
28
  # @param required [Array<String>]
27
- def initialize(required: [])
29
+ # @param skip_dependencies [Boolean]
30
+ def initialize(required: [], with_dependencies: true)
28
31
  # HACK: YardMap needs its own copy of this array
29
32
  @required = required.clone
33
+ @with_dependencies = with_dependencies
30
34
  @gem_paths = {}
31
35
  @stdlib_namespaces = []
32
36
  process_requires
@@ -38,6 +42,11 @@ module Solargraph
38
42
  @pins ||= []
39
43
  end
40
44
 
45
+ def with_dependencies?
46
+ @with_dependencies ||= true unless @with_dependencies == false
47
+ @with_dependencies
48
+ end
49
+
41
50
  # @param new_requires [Array<String>]
42
51
  # @return [Boolean]
43
52
  def change new_requires
@@ -176,8 +185,7 @@ module Solargraph
176
185
  unless yardocs.include?(yd)
177
186
  yardocs.unshift yd
178
187
  result.concat process_yardoc yd
179
- # @todo Testing performance
180
- # result.concat add_gem_dependencies spec
188
+ result.concat add_gem_dependencies(spec) if with_dependencies?
181
189
  end
182
190
  end
183
191
  rescue Gem::LoadError => e
@@ -231,17 +239,16 @@ module Solargraph
231
239
  (spec.dependencies - spec.development_dependencies).each do |dep|
232
240
  begin
233
241
  depspec = Gem::Specification.find_by_name(dep.name)
234
- @gem_paths[depspec.name] = depspec.full_gem_path unless depspec.nil?
242
+ next if depspec.nil? || @gem_paths.key?(depspec.name)
243
+ @gem_paths[depspec.name] = depspec.full_gem_path
235
244
  gy = YARD::Registry.yardoc_file_for_gem(dep.name)
236
245
  if gy.nil?
237
246
  unresolved_requires.push dep.name
238
247
  else
239
- unless yardocs.include?(gy)
240
- yardocs.unshift gy
241
- result.concat process_yardoc gy
242
- # @todo Trying only one level of dependencies
243
- # result.concat add_gem_dependencies(depspec)
244
- end
248
+ next if yardocs.include?(gy)
249
+ yardocs.unshift gy
250
+ result.concat process_yardoc gy
251
+ result.concat add_gem_dependencies(depspec)
245
252
  end
246
253
  rescue Gem::LoadError
247
254
  # This error probably indicates a bug in an installed gem
@@ -1,6 +1,4 @@
1
1
  require 'yard'
2
- require 'yard/templates/helpers/markup_helper'
3
- require 'yard/templates/helpers/html_helper'
4
2
 
5
3
  # Define a @type tag for documenting variables
6
4
  YARD::Tags::Library.define_tag("Type", :type, :with_types_and_name)
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.3
4
+ version: 0.29.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-22 00:00:00.000000000 Z
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: parser
14
+ name: eventmachine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.4'
19
+ version: '1.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.5
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '2.4'
29
+ version: '1.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.5
27
33
  - !ruby/object:Gem::Dependency
28
- name: thor
34
+ name: htmlentities
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0.19'
39
+ version: '4.3'
34
40
  - - ">="
35
41
  - !ruby/object:Gem::Version
36
- version: 0.19.4
42
+ version: 4.3.4
37
43
  type: :runtime
38
44
  prerelease: false
39
45
  version_requirements: !ruby/object:Gem::Requirement
40
46
  requirements:
41
47
  - - "~>"
42
48
  - !ruby/object:Gem::Version
43
- version: '0.19'
49
+ version: '4.3'
44
50
  - - ">="
45
51
  - !ruby/object:Gem::Version
46
- version: 0.19.4
52
+ version: 4.3.4
47
53
  - !ruby/object:Gem::Dependency
48
- name: yard
54
+ name: kramdown
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - "~>"
52
58
  - !ruby/object:Gem::Version
53
- version: '0.9'
59
+ version: '1.16'
54
60
  type: :runtime
55
61
  prerelease: false
56
62
  version_requirements: !ruby/object:Gem::Requirement
57
63
  requirements:
58
64
  - - "~>"
59
65
  - !ruby/object:Gem::Version
60
- version: '0.9'
66
+ version: '1.16'
61
67
  - !ruby/object:Gem::Dependency
62
- name: eventmachine
68
+ name: parser
63
69
  requirement: !ruby/object:Gem::Requirement
64
70
  requirements:
65
71
  - - "~>"
66
72
  - !ruby/object:Gem::Version
67
- version: '1.2'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 1.2.5
73
+ version: '2.3'
71
74
  type: :runtime
72
75
  prerelease: false
73
76
  version_requirements: !ruby/object:Gem::Requirement
74
77
  requirements:
75
78
  - - "~>"
76
79
  - !ruby/object:Gem::Version
77
- version: '1.2'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 1.2.5
80
+ version: '2.3'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: reverse_markdown
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -99,81 +99,81 @@ dependencies:
99
99
  - !ruby/object:Gem::Version
100
100
  version: 1.0.5
101
101
  - !ruby/object:Gem::Dependency
102
- name: kramdown
102
+ name: rubocop
103
103
  requirement: !ruby/object:Gem::Requirement
104
104
  requirements:
105
105
  - - "~>"
106
106
  - !ruby/object:Gem::Version
107
- version: '1.16'
107
+ version: '0.52'
108
108
  type: :runtime
109
109
  prerelease: false
110
110
  version_requirements: !ruby/object:Gem::Requirement
111
111
  requirements:
112
112
  - - "~>"
113
113
  - !ruby/object:Gem::Version
114
- version: '1.16'
114
+ version: '0.52'
115
115
  - !ruby/object:Gem::Dependency
116
- name: htmlentities
116
+ name: thor
117
117
  requirement: !ruby/object:Gem::Requirement
118
118
  requirements:
119
119
  - - "~>"
120
120
  - !ruby/object:Gem::Version
121
- version: '4.3'
121
+ version: '0.19'
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 4.3.4
124
+ version: 0.19.4
125
125
  type: :runtime
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '4.3'
131
+ version: '0.19'
132
132
  - - ">="
133
133
  - !ruby/object:Gem::Version
134
- version: 4.3.4
134
+ version: 0.19.4
135
135
  - !ruby/object:Gem::Dependency
136
- name: coderay
136
+ name: tilt
137
137
  requirement: !ruby/object:Gem::Requirement
138
138
  requirements:
139
139
  - - "~>"
140
140
  - !ruby/object:Gem::Version
141
- version: '1.1'
141
+ version: '2.0'
142
142
  type: :runtime
143
143
  prerelease: false
144
144
  version_requirements: !ruby/object:Gem::Requirement
145
145
  requirements:
146
146
  - - "~>"
147
147
  - !ruby/object:Gem::Version
148
- version: '1.1'
148
+ version: '2.0'
149
149
  - !ruby/object:Gem::Dependency
150
- name: rubocop
150
+ name: yard
151
151
  requirement: !ruby/object:Gem::Requirement
152
152
  requirements:
153
153
  - - "~>"
154
154
  - !ruby/object:Gem::Version
155
- version: '0.52'
155
+ version: '0.9'
156
156
  type: :runtime
157
157
  prerelease: false
158
158
  version_requirements: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - "~>"
161
161
  - !ruby/object:Gem::Version
162
- version: '0.52'
162
+ version: '0.9'
163
163
  - !ruby/object:Gem::Dependency
164
- name: tilt
164
+ name: pry
165
165
  requirement: !ruby/object:Gem::Requirement
166
166
  requirements:
167
167
  - - "~>"
168
168
  - !ruby/object:Gem::Version
169
- version: '2.0'
170
- type: :runtime
169
+ version: 0.11.3
170
+ type: :development
171
171
  prerelease: false
172
172
  version_requirements: !ruby/object:Gem::Requirement
173
173
  requirements:
174
174
  - - "~>"
175
175
  - !ruby/object:Gem::Version
176
- version: '2.0'
176
+ version: 0.11.3
177
177
  - !ruby/object:Gem::Dependency
178
178
  name: rspec
179
179
  requirement: !ruby/object:Gem::Requirement
@@ -208,20 +208,6 @@ dependencies:
208
208
  - - "~>"
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0.14'
211
- - !ruby/object:Gem::Dependency
212
- name: pry
213
- requirement: !ruby/object:Gem::Requirement
214
- requirements:
215
- - - "~>"
216
- - !ruby/object:Gem::Version
217
- version: 0.11.3
218
- type: :development
219
- prerelease: false
220
- version_requirements: !ruby/object:Gem::Requirement
221
- requirements:
222
- - - "~>"
223
- - !ruby/object:Gem::Version
224
- version: 0.11.3
225
211
  description: IDE tools for code completion and inline documentation
226
212
  email: admin@castwide.com
227
213
  executables:
@@ -319,12 +305,12 @@ files:
319
305
  - lib/solargraph/pin/documenting.rb
320
306
  - lib/solargraph/pin/duck_method.rb
321
307
  - lib/solargraph/pin/global_variable.rb
322
- - lib/solargraph/pin/helper.rb
323
308
  - lib/solargraph/pin/instance_variable.rb
324
309
  - lib/solargraph/pin/keyword.rb
325
310
  - lib/solargraph/pin/local_variable.rb
326
311
  - lib/solargraph/pin/localized.rb
327
312
  - lib/solargraph/pin/method.rb
313
+ - lib/solargraph/pin/method_alias.rb
328
314
  - lib/solargraph/pin/method_parameter.rb
329
315
  - lib/solargraph/pin/namespace.rb
330
316
  - lib/solargraph/pin/plugin/method.rb
@@ -372,6 +358,25 @@ files:
372
358
  - lib/solargraph/source_map/clip.rb
373
359
  - lib/solargraph/source_map/completion.rb
374
360
  - lib/solargraph/source_map/mapper.rb
361
+ - lib/solargraph/source_map/node_processor.rb
362
+ - lib/solargraph/source_map/node_processor/alias_node.rb
363
+ - lib/solargraph/source_map/node_processor/args_node.rb
364
+ - lib/solargraph/source_map/node_processor/base.rb
365
+ - lib/solargraph/source_map/node_processor/begin_node.rb
366
+ - lib/solargraph/source_map/node_processor/block_node.rb
367
+ - lib/solargraph/source_map/node_processor/casgn_node.rb
368
+ - lib/solargraph/source_map/node_processor/cvasgn_node.rb
369
+ - lib/solargraph/source_map/node_processor/def_node.rb
370
+ - lib/solargraph/source_map/node_processor/defs_node.rb
371
+ - lib/solargraph/source_map/node_processor/gvasgn_node.rb
372
+ - lib/solargraph/source_map/node_processor/ivasgn_node.rb
373
+ - lib/solargraph/source_map/node_processor/lvasgn_node.rb
374
+ - lib/solargraph/source_map/node_processor/namespace_node.rb
375
+ - lib/solargraph/source_map/node_processor/orasgn_node.rb
376
+ - lib/solargraph/source_map/node_processor/sclass_node.rb
377
+ - lib/solargraph/source_map/node_processor/send_node.rb
378
+ - lib/solargraph/source_map/node_processor/sym_node.rb
379
+ - lib/solargraph/source_map/region.rb
375
380
  - lib/solargraph/version.rb
376
381
  - lib/solargraph/views/_method.erb
377
382
  - lib/solargraph/views/_name_type_tag.erb
@@ -1,41 +0,0 @@
1
- require 'yard'
2
-
3
- module Solargraph
4
- module Pin
5
- class Helper
6
- include YARD::Templates::Helpers::HtmlHelper
7
-
8
- attr_accessor :object
9
- attr_accessor :serializer
10
-
11
- def initialize object = nil
12
- @object = object
13
- end
14
-
15
- def url_for(object)
16
- '.'
17
- end
18
-
19
- def html_markup_rdoc(text)
20
- # @todo The :rdoc markup class might not be immediately available.
21
- # If not, return nil for now under the assumption that the problem
22
- # will eventually fix itself.
23
- return nil if markup_class(:rdoc).nil?
24
- super
25
- end
26
-
27
- def options
28
- if @options.nil?
29
- @options = YARD::Templates::TemplateOptions.new
30
- @options[:type] = :rdoc
31
- end
32
- @options
33
- end
34
-
35
- # HACK: The linkify method just returns the arguments as plain text
36
- def linkify *args
37
- args.join(', ')
38
- end
39
- end
40
- end
41
- end