solargraph 0.41.2 → 0.42.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4533d6cac061c01e292b70313f68a9de816c8af4ca6d34ddf7bde467d0428b0
4
- data.tar.gz: 1fd4959f4e1652c8725fcc79f5da92df9f91a90eb5462879f87c30c0c8f2ada2
3
+ metadata.gz: ee62ce435bde441d527641ea98d3f448d36ce67f575f35d16927c315a98f1401
4
+ data.tar.gz: 514c7a0540e0bce8b050e9da507ed6d778b0ba482c5c73bef6ebc54360d93367
5
5
  SHA512:
6
- metadata.gz: 48b7f57a7b84140cb4ff9b1f2428fb1dfe2c814ef9fca26585bec17ea61a122a8755ab60e8da52969942c5ab674501332f6fc0655fcceb77606f1ab353899a4b
7
- data.tar.gz: cd817d200a9579e66f612a100b17096fb56eb468c356de4c75d7c5d0f5621f6e734596f9babe809398f26bd2bcc2226bf424215393fe03626adf03f856eb24b9
6
+ metadata.gz: fec2a060f92ba925c0911b41025033afb6821e0f5758de849c2722a03b9b102b97f437dad23097d442546e254f21ec407fdf3ca494ee311ce3d2f26396cc9e1d
7
+ data.tar.gz: 919ae0f90af0de75228cf2c42eb5ab22a9f9ef3af9c9f7003c4fdf746d0b2ee43375f006a08b926f4d5135facfd97f4cacd5df47e2a1862c3d17a96d4c11b004
data/.travis.yml CHANGED
@@ -8,15 +8,10 @@ rvm:
8
8
  - jruby-head
9
9
  matrix:
10
10
  include:
11
- - rvm: 2.4
12
- os: osx
13
- - rvm: 2.6
14
- os: osx
15
11
  - rvm: 2.7
16
12
  os: osx
17
13
  allow_failures:
18
14
  - rvm: jruby-head
19
- - rvm: 3.0
20
15
  before_install:
21
16
  - gem update --system
22
17
  - gem install bundler
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.42.0 - June 11, 2021
2
+ - Improve YardMap efficiency
3
+ - Bench includes Workspace for cataloging
4
+ - Initialize confirms static features from options (#436)
5
+ - Enable simple repairs without incremental sync (#416)
6
+ - Discard unrecognized client responses
7
+ - Notify on use of closest match for core (#390)
8
+
1
9
  ## 0.41.2 - June 9, 2021
2
10
  - Rescue InvalidOffset in async diagnosis
3
11
  - Remove erroneous escaping from Hover
data/lib/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
- Layout/EndOfLine:
2
- EnforcedStyle: lf
1
+ AllCops:
2
+ NewCops: enable
3
3
  Style/MethodDefParentheses:
4
4
  Enabled: false
5
5
  Layout/EmptyLineAfterGuardClause:
@@ -10,6 +10,8 @@ Lint/RaiseException:
10
10
  Enabled: true
11
11
  Lint/StructNewOverride:
12
12
  Enabled: true
13
+ Metrics/MethodLength:
14
+ Max: 25
13
15
  Style/ExponentialNotation:
14
16
  Enabled: true
15
17
  Style/HashEachMethods:
@@ -18,4 +20,3 @@ Style/HashTransformKeys:
18
20
  Enabled: true
19
21
  Style/HashTransformValues:
20
22
  Enabled: true
21
-
@@ -17,7 +17,6 @@ module Solargraph
17
17
  autoload :BundlerMethods, 'solargraph/api_map/bundler_methods'
18
18
 
19
19
  include SourceToYard
20
- include BundlerMethods
21
20
 
22
21
  # @return [Array<String>]
23
22
  attr_reader :unresolved_requires
@@ -59,30 +58,14 @@ module Solargraph
59
58
  implicit.clear
60
59
  @cache.clear
61
60
  @source_map_hash = bench.source_maps.map { |s| [s.filename, s] }.to_h
62
- pins = []
63
- @required = Set.new
64
- local_path_hash.clear
61
+ pins = bench.source_maps.map(&:pins).flatten
62
+ external_requires = bench.external_requires
65
63
  source_map_hash.each_value do |map|
66
- pins.concat map.pins
67
- @required.merge map.requires.map(&:name)
68
64
  implicit.merge map.environ
69
65
  end
70
- @required.merge implicit.requires
71
- external_requires = []
72
- @required.each do |req|
73
- result = bench.load_paths.find do |path|
74
- full = Pathname.new(path).join("#{req}.rb").to_s
75
- @source_map_hash.key?(full)
76
- end
77
- if result
78
- local_path_hash[req] = Pathname.new(result).join("#{req}.rb").to_s
79
- else
80
- external_requires.push req unless result
81
- end
82
- end
83
- br = @required.include?('bundler/require') ? require_from_bundle(bench.directory) : {}
84
- @required.merge br.keys
85
- yard_map.change(external_requires, br, bench.gemnames)
66
+ external_requires.merge implicit.requires
67
+ external_requires.merge bench.workspace.config.required
68
+ yard_map.change(external_requires, bench.workspace.directory, bench.workspace.source_gems)
86
69
  @store = Store.new(yard_map.pins + implicit.pins + pins)
87
70
  @unresolved_requires = yard_map.unresolved_requires
88
71
  @rebindable_method_names = nil
@@ -105,11 +88,6 @@ module Solargraph
105
88
  @implicit ||= Environ.new
106
89
  end
107
90
 
108
- # @return [Hash{String => String}]
109
- def local_path_hash
110
- @local_paths ||= {}
111
- end
112
-
113
91
  # @param filename [String]
114
92
  # @param position [Position, Array(Integer, Integer)]
115
93
  # @return [Source::Cursor]
@@ -456,27 +434,6 @@ module Solargraph
456
434
  source_map_hash.keys.include?(filename)
457
435
  end
458
436
 
459
- # True if the specified file is included in the workspace.
460
- #
461
- # @param filename [String]
462
- def workspaced? filename
463
- workspace_filenames.include?(filename)
464
- end
465
-
466
- # @param location [Location]
467
- # @return [Location]
468
- def require_reference_at location
469
- map = source_map(location.filename)
470
- pin = map.requires.select { |p| p.location.range.contain?(location.range.start) }.first
471
- return nil if pin.nil?
472
- if local_path_hash.key?(pin.name)
473
- return Location.new(local_path_hash[pin.name], Solargraph::Range.from_to(0, 0, 0, 0))
474
- end
475
- yard_map.require_reference(pin.name)
476
- rescue FileNotFoundError
477
- nil
478
- end
479
-
480
437
  # Check if a class is a superclass of another class.
481
438
  #
482
439
  # @param sup [String] The superclass
@@ -508,11 +465,6 @@ module Solargraph
508
465
 
509
466
  private
510
467
 
511
- # @return [Array<String>]
512
- def workspace_filenames
513
- @workspace_filenames ||= []
514
- end
515
-
516
468
  # A hash of source maps with filename keys.
517
469
  #
518
470
  # @return [Hash{String => SourceMap}]
@@ -9,23 +9,19 @@ module Solargraph
9
9
  # @return [Set<SourceMap>]
10
10
  attr_reader :source_maps
11
11
 
12
- # @return [Set<String>]
13
- attr_reader :load_paths
12
+ # @return [Workspace]
13
+ attr_reader :workspace
14
14
 
15
15
  # @return [Set<String>]
16
- attr_reader :gemnames
17
-
18
- # @return [String]
19
- attr_reader :directory
16
+ attr_reader :external_requires
20
17
 
21
18
  # @param source_maps [Array<SourceMap>, Set<SourceMap>]
22
- # @param load_paths [Array<String>, Set<String>]
23
- # @param gemnames [Array<String>, Set<String>]
24
- def initialize source_maps: [], load_paths: [], gemnames: [], directory: ''
19
+ # @param workspace [Workspace]
20
+ # @param external_requires [Array<String>, Set<String>]
21
+ def initialize source_maps: [], workspace: Workspace.new, external_requires: []
25
22
  @source_maps = source_maps.to_set
26
- @load_paths = load_paths.to_set
27
- @gemnames = gemnames.to_set
28
- @directory = directory
23
+ @workspace = workspace
24
+ @external_requires = external_requires.to_set
29
25
  end
30
26
  end
31
27
  end
@@ -7,7 +7,7 @@ module Solargraph
7
7
  #
8
8
  class TypeCheck < Base
9
9
  def diagnose source, api_map
10
- return [] unless args.include?('always') || api_map.workspaced?(source.filename)
10
+ # return [] unless args.include?('always') || api_map.workspaced?(source.filename)
11
11
  severity = Diagnostics::Severities::ERROR
12
12
  level = (args.reverse.find { |a| ['normal', 'typed', 'strict', 'strong'].include?(a) }) || :normal
13
13
  checker = Solargraph::TypeChecker.new(source.filename, api_map: api_map, level: level.to_sym)
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'diff/lcs'
3
4
  require 'observer'
4
- require 'set'
5
5
  require 'securerandom'
6
+ require 'set'
6
7
 
7
8
  module Solargraph
8
9
  module LanguageServer
@@ -107,9 +108,12 @@ module Solargraph
107
108
  end
108
109
  message
109
110
  elsif request['id']
110
- # @todo What if the id is invalid?
111
- requests[request['id']].process(request['result'])
112
- requests.delete request['id']
111
+ if requests[request['id']]
112
+ requests[request['id']].process(request['result'])
113
+ requests.delete request['id']
114
+ else
115
+ logger.warn "Discarding client response to unrecognized message #{request['id']}"
116
+ end
113
117
  else
114
118
  logger.warn "Invalid message received."
115
119
  logger.debug request
@@ -165,8 +169,6 @@ module Solargraph
165
169
  # @return [void]
166
170
  def open_from_disk uri
167
171
  sources.open_from_disk(uri)
168
- library = library_for(uri)
169
- # library.open_from_disk uri_to_file(uri)
170
172
  diagnoser.schedule uri
171
173
  end
172
174
 
@@ -672,7 +674,8 @@ module Solargraph
672
674
  # @return [Source::Updater]
673
675
  def generate_updater params
674
676
  changes = []
675
- params['contentChanges'].each do |chng|
677
+ params['contentChanges'].each do |recvd|
678
+ chng = check_diff(params['textDocument']['uri'], recvd)
676
679
  changes.push Solargraph::Source::Change.new(
677
680
  (chng['range'].nil? ?
678
681
  nil :
@@ -688,6 +691,36 @@ module Solargraph
688
691
  )
689
692
  end
690
693
 
694
+ # @param uri [String]
695
+ # @param change [Hash]
696
+ # @return [Hash]
697
+ def check_diff uri, change
698
+ return change if change['range']
699
+ source = sources.find(uri)
700
+ return change if source.code.length + 1 != change['text'].length
701
+ diffs = Diff::LCS.diff(source.code, change['text'])
702
+ return change if diffs.length.zero? || diffs.length > 1 || diffs.first.length > 1
703
+ # @type [Diff::LCS::Change]
704
+ diff = diffs.first.first
705
+ return change unless diff.adding? && ['.', ':'].include?(diff.element)
706
+ position = Solargraph::Position.from_offset(source.code, diff.position)
707
+ {
708
+ 'range' => {
709
+ 'start' => {
710
+ 'line' => position.line,
711
+ 'character' => position.character
712
+ },
713
+ 'end' => {
714
+ 'line' => position.line,
715
+ 'character' => position.character
716
+ }
717
+ },
718
+ 'text' => diff.element
719
+ }
720
+ rescue Solargraph::FileNotFoundError
721
+ change
722
+ end
723
+
691
724
  # @return [Hash]
692
725
  def dynamic_capability_options
693
726
  @dynamic_capability_options ||= {
@@ -787,7 +820,7 @@ module Solargraph
787
820
  next unless uuid
788
821
  cur = ((library.source_map_hash.keys.length.to_f / total.to_f) * 100).to_i
789
822
  if cur > pct && cur % mod == 0
790
- pct = cur
823
+ pct = cur
791
824
  send_notification '$/progress', {
792
825
  token: uuid,
793
826
  value: {
@@ -76,7 +76,7 @@ module Solargraph
76
76
  source = Solargraph::Source.load(UriHelpers.uri_to_file(uri))
77
77
  open_source_hash[uri] = source
78
78
  end
79
-
79
+
80
80
  # Update an existing source.
81
81
  #
82
82
  # @raise [FileNotFoundError] if the URI does not match an open source.
@@ -51,6 +51,7 @@ module Solargraph
51
51
  end
52
52
 
53
53
  def static_completion
54
+ return {} unless host.options['completion']
54
55
  {
55
56
  completionProvider: {
56
57
  resolveProvider: true,
@@ -84,18 +85,21 @@ module Solargraph
84
85
  end
85
86
 
86
87
  def static_hover
88
+ return {} unless host.options['hover']
87
89
  {
88
90
  hoverProvider: true
89
91
  }
90
92
  end
91
93
 
92
94
  def static_document_formatting
95
+ return {} unless host.options['formatting']
93
96
  {
94
97
  documentFormattingProvider: true
95
98
  }
96
99
  end
97
100
 
98
101
  def static_document_symbols
102
+ return {} unless host.options['symbols']
99
103
  {
100
104
  documentSymbolProvider: true
101
105
  }
@@ -108,6 +112,7 @@ module Solargraph
108
112
  end
109
113
 
110
114
  def static_definitions
115
+ return {} unless host.options['definitions']
111
116
  {
112
117
  definitionProvider: true
113
118
  }
@@ -120,12 +125,14 @@ module Solargraph
120
125
  end
121
126
 
122
127
  def static_references
128
+ return {} unless host.options['references']
123
129
  {
124
130
  referencesProvider: true
125
131
  }
126
132
  end
127
133
 
128
134
  def static_folding_range
135
+ return {} unless host.options['folding']
129
136
  {
130
137
  foldingRangeProvider: true
131
138
  }
@@ -48,6 +48,8 @@ module Solargraph
48
48
  mutex.synchronize do
49
49
  if @current && @current.filename != source.filename && source_map_hash.key?(@current.filename) && !workspace.has_file?(@current.filename)
50
50
  source_map_hash.delete @current.filename
51
+ source_map_external_require_hash.delete @current.filename
52
+ @external_requires = nil
51
53
  @synchronized = false
52
54
  end
53
55
  @current = source
@@ -252,7 +254,18 @@ module Solargraph
252
254
  end
253
255
 
254
256
  def locate_ref location
255
- api_map.require_reference_at location
257
+ map = source_map_hash[location.filename]
258
+ return if map.nil?
259
+ pin = map.requires.select { |p| p.location.range.contain?(location.range.start) }.first
260
+ return nil if pin.nil?
261
+ workspace.require_paths.each do |path|
262
+ full = Pathname.new(path).join("#{pin.name}.rb").to_s
263
+ next unless source_map_hash.key?(full)
264
+ return Location.new(full, Solargraph::Range.from_to(0, 0, 0, 0))
265
+ end
266
+ api_map.yard_map.require_reference(pin.name)
267
+ rescue FileNotFoundError
268
+ nil
256
269
  end
257
270
 
258
271
  # Get an array of pins that match a path.
@@ -326,6 +339,7 @@ module Solargraph
326
339
  return [] unless open?(filename)
327
340
  result = []
328
341
  source = read(filename)
342
+ catalog
329
343
  repargs = {}
330
344
  workspace.config.reporters.each do |line|
331
345
  if line == 'all!'
@@ -361,13 +375,10 @@ module Solargraph
361
375
  end
362
376
 
363
377
  def bench
364
- source_maps = @current ? [@current] : []
365
- source_maps.concat source_map_hash.values
366
378
  Bench.new(
367
- source_maps: source_maps,
368
- load_paths: workspace.require_paths,
369
- gemnames: workspace.gemnames,
370
- directory: workspace.directory
379
+ source_maps: source_map_hash.values,
380
+ workspace: workspace,
381
+ external_requires: external_requires
371
382
  )
372
383
  end
373
384
 
@@ -423,6 +434,8 @@ module Solargraph
423
434
  if src
424
435
  Logging.logger.debug "Mapping #{src.filename}"
425
436
  source_map_hash[src.filename] = Solargraph::SourceMap.map(src)
437
+ find_external_requires(source_map_hash[src.filename])
438
+ source_map_hash[src.filename]
426
439
  else
427
440
  false
428
441
  end
@@ -432,6 +445,7 @@ module Solargraph
432
445
  def map!
433
446
  workspace.sources.each do |src|
434
447
  source_map_hash[src.filename] = Solargraph::SourceMap.map(src)
448
+ find_external_requires(source_map_hash[src.filename])
435
449
  end
436
450
  self
437
451
  end
@@ -440,8 +454,29 @@ module Solargraph
440
454
  @pins ||= []
441
455
  end
442
456
 
457
+ def external_requires
458
+ @external_requires ||= source_map_external_require_hash.values.flatten.to_set
459
+ end
460
+
443
461
  private
444
462
 
463
+ def source_map_external_require_hash
464
+ @source_map_external_require_hash ||= {}
465
+ end
466
+
467
+ # @param source_map [SourceMap]
468
+ def find_external_requires source_map
469
+ new_set = source_map.requires.map(&:name).to_set
470
+ # return if new_set == source_map_external_require_hash[source_map.filename]
471
+ source_map_external_require_hash[source_map.filename] = new_set.reject do |path|
472
+ workspace.require_paths.any? do |base|
473
+ full = Pathname.new(base).join("#{path}.rb").to_s
474
+ workspace.filenames.include?(full)
475
+ end
476
+ end
477
+ @external_requires = nil
478
+ end
479
+
445
480
  # @return [Mutex]
446
481
  def mutex
447
482
  @mutex ||= Mutex.new
@@ -484,6 +519,7 @@ module Solargraph
484
519
  new_map = Solargraph::SourceMap.map(source)
485
520
  unless source_map_hash[source.filename].try_merge!(new_map)
486
521
  source_map_hash[source.filename] = new_map
522
+ find_external_requires(source_map_hash[source.filename])
487
523
  @synchronized = false
488
524
  end
489
525
  else
@@ -492,6 +528,7 @@ module Solargraph
492
528
  end
493
529
  else
494
530
  source_map_hash[source.filename] = Solargraph::SourceMap.map(source)
531
+ find_external_requires(source_map_hash[source.filename])
495
532
  @synchronized = false
496
533
  end
497
534
  end
@@ -74,7 +74,11 @@ module Solargraph
74
74
  desc 'download-core [VERSION]', 'Download core documentation'
75
75
  def download_core version = nil
76
76
  ver = version || Solargraph::YardMap::CoreDocs.best_download
77
- puts "Downloading docs for #{ver}..."
77
+ if RUBY_VERSION != ver
78
+ puts "Documentation for #{RUBY_VERSION} is not available. Reverting to closest match..."
79
+ else
80
+ puts "Downloading docs for #{ver}..."
81
+ end
78
82
  Solargraph::YardMap::CoreDocs.download ver
79
83
  # Clear cached documentation if it exists
80
84
  FileUtils.rm_rf Dir.glob(File.join(Solargraph::YardMap::CoreDocs.cache_dir, ver, '*.ser'))
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.41.2'
4
+ VERSION = '0.42.0'
5
5
  end
@@ -18,6 +18,7 @@ module Solargraph
18
18
 
19
19
  # @return [Array<String>]
20
20
  attr_reader :gemnames
21
+ alias source_gems gemnames
21
22
 
22
23
  # @param directory [String]
23
24
  # @param config [Config, nil]
@@ -20,6 +20,8 @@ module Solargraph
20
20
  autoload :Helpers, 'solargraph/yard_map/helpers'
21
21
  autoload :ToMethod, 'solargraph/yard_map/to_method'
22
22
 
23
+ include ApiMap::BundlerMethods
24
+
23
25
  CoreDocs.require_minimum
24
26
 
25
27
  def stdlib_paths
@@ -37,33 +39,16 @@ module Solargraph
37
39
  end
38
40
  end
39
41
 
40
- # @return [Array<String>]
41
- attr_reader :required
42
-
43
42
  # @return [Boolean]
44
43
  attr_writer :with_dependencies
45
44
 
46
- # A hash of gem names and the version numbers to include in the map.
47
- #
48
- # @return [Hash{String => String}]
49
- attr_reader :gemset
50
-
51
- # @param required [Array<String>]
52
- # @param gemset [Hash{String => String}]
45
+ # @param required [Array<String>, Set<String>]
46
+ # @param directory [String]
47
+ # @param source_gems [Array<String>, Set<String>]
53
48
  # @param with_dependencies [Boolean]
54
- def initialize(required: [], gemset: {}, with_dependencies: true)
55
- # HACK: YardMap needs its own copy of this array
56
- @required = required.clone
57
- # HACK: Hardcoded YAML handling
58
- @required.push 'psych' if @required.include?('yaml')
49
+ def initialize(required: [], directory: '', source_gems: [], with_dependencies: true)
59
50
  @with_dependencies = with_dependencies
60
- @gem_paths = {}
61
- @stdlib_namespaces = []
62
- @gemset = gemset
63
- @source_gems = []
64
- process_requires
65
- yardocs.uniq!
66
- @pin_select_cache = {}
51
+ change required.to_set, directory, source_gems.to_set
67
52
  end
68
53
 
69
54
  # @return [Array<Solargraph::Pin::Base>]
@@ -76,25 +61,24 @@ module Solargraph
76
61
  @with_dependencies
77
62
  end
78
63
 
79
- # @param new_requires [Array<String>]
80
- # @param new_gemset [Hash{String => String}]
64
+ # @param new_requires [Set<String>] Required paths to use for loading gems
65
+ # @param new_directory [String] The workspace directory
66
+ # @param new_source_gems [Set<String>] Gems under local development (i.e., part of the workspace)
81
67
  # @return [Boolean]
82
- def change new_requires, new_gemset, source_gems = []
68
+ def change new_requires, new_directory, new_source_gems
69
+ return false if new_requires == base_required && new_directory == @directory && new_source_gems == @source_gems
70
+ @gem_paths = {}
71
+ base_required.replace new_requires
72
+ required.replace new_requires
83
73
  # HACK: Hardcoded YAML handling
84
- new_requires.push 'psych' if new_requires.include?('yaml')
85
- if new_requires.uniq.sort == required.uniq.sort && new_gemset == gemset && @source_gems.uniq.sort == source_gems.uniq.sort
86
- false
87
- else
88
- required.clear
89
- required.concat new_requires
90
- @gemset = new_gemset
91
- @source_gems = source_gems
92
- process_requires
93
- @rebindable_method_names = nil
94
- @pin_class_hash = nil
95
- @pin_select_cache = {}
96
- true
97
- end
74
+ required.add 'psych' if new_requires.include?('yaml')
75
+ @source_gems = new_source_gems
76
+ @directory = directory
77
+ process_requires
78
+ @rebindable_method_names = nil
79
+ @pin_class_hash = nil
80
+ @pin_select_cache = {}
81
+ true
98
82
  end
99
83
 
100
84
  # @return [Set<String>]
@@ -111,6 +95,11 @@ module Solargraph
111
95
  @yardocs ||= []
112
96
  end
113
97
 
98
+ # @return [Set<String>]
99
+ def required
100
+ @required ||= Set.new
101
+ end
102
+
114
103
  # @return [Array<String>]
115
104
  def unresolved_requires
116
105
  @unresolved_requires ||= []
@@ -163,8 +152,16 @@ module Solargraph
163
152
  @stdlib_pins ||= []
164
153
  end
165
154
 
155
+ def base_required
156
+ @base_required ||= Set.new
157
+ end
158
+
166
159
  private
167
160
 
161
+ def directory
162
+ @directory ||= ''
163
+ end
164
+
168
165
  # @return [YardMap::Cache]
169
166
  def cache
170
167
  @cache ||= YardMap::Cache.new
@@ -193,6 +190,11 @@ module Solargraph
193
190
 
194
191
  # @return [void]
195
192
  def process_requires
193
+ @gemset = if required.include?('bundler/require')
194
+ require_from_bundle(directory)
195
+ else
196
+ {}
197
+ end
196
198
  pins.replace core_pins
197
199
  unresolved_requires.clear
198
200
  stdlib_pins.clear
data/solargraph.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency 'backport', '~> 1.1'
23
23
  s.add_runtime_dependency 'benchmark'
24
24
  s.add_runtime_dependency 'bundler', '>= 1.17.2'
25
+ s.add_runtime_dependency 'diff-lcs', '~> 1.4'
25
26
  s.add_runtime_dependency 'e2mmap'
26
27
  s.add_runtime_dependency 'jaro_winkler', '~> 1.5'
27
28
  s.add_runtime_dependency 'kramdown', '~> 2.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.41.2
4
+ version: 0.42.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: 2021-06-09 00:00:00.000000000 Z
11
+ date: 2021-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.17.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: diff-lcs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: e2mmap
57
71
  requirement: !ruby/object:Gem::Requirement