solargraph 0.44.1 → 0.45.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 346926f891270e103d6c7170fe5897587c1d5da45ea33b2a7f4238914b38b236
4
- data.tar.gz: 451b09bf70dc9d760ebfdeb726821e6e653f196bd867da8c7638888803e33a72
3
+ metadata.gz: 99cf1c663bb1a93324ff9c860b82e60d47988a4c48e9c0e977176cb94852f29c
4
+ data.tar.gz: 9b10324bcf7493f9ed5f8a67a8d47e4f0a379b76ed2aeb31514d1fa06b88dbf6
5
5
  SHA512:
6
- metadata.gz: 624d1de49ef2762477d7a413adf282a058143a71689ea8cdfcc91177db94c765b997fca00fefd8d0d4915e44e6cd4ae1867297671611ba6d119d610116c5b80a
7
- data.tar.gz: 9f146a371e075407cb8be7b96de08ff24583cf18eb1a29310c1a711c1bd347715d07b0ff6603e9a98b71be7406148e17c907abdcf3bd1a2aba58bd5aeff14685
6
+ metadata.gz: a981e45a500d2469972d0fab1e4bcfdbde99dc46de7ef7b377d486a9a027ce617b8806790ed3565a673fbf3d3fd206d246408b5ce744a0b575e02ee3a3a9b699
7
+ data.tar.gz: 0bcb7a9957581cac9c066076938dbbdcbcc596bf7ddc8f4cd4539d71dadabab68cfdbc18f59df8daedd02dcff8f45b671a0a742c6ec1afbd39ede15fb3db381b
@@ -0,0 +1,41 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with rspec.
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: RSpec
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ test:
21
+
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ ruby-version: ['2.4', '2.5', '2.6', '2.7', '3.0']
26
+
27
+ steps:
28
+ - uses: actions/checkout@v3
29
+ - name: Set up Ruby
30
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
31
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
32
+ # uses: ruby/setup-ruby@v1
33
+ uses: ruby/setup-ruby@2b019609e2b0f1ea1a2bc8ca11cb82ab46ada124
34
+ with:
35
+ ruby-version: ${{ matrix.ruby-version }}
36
+ bundler-cache: false
37
+ - run: bundle install
38
+ - name: Set up yardocs
39
+ run: bundle exec yard gems
40
+ - name: Run tests
41
+ run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## 0.45.0 - May 23, 2022
2
+ - Basic support for RSpec #describe and #it
3
+ - fix: domain can complete private method (#490)
4
+ - Update README.md (#533)
5
+ - Doc: update readme.md for add solargraph support (#536)
6
+ - Process DASGN node in Ruby 3
7
+ - File.open core fill
8
+ - replace with_unbundled_env with with_original_env (#489)
9
+ - Require specific version of gem (#509)
10
+ - Support URIs prefixed with single slashed file scheme (#529)
11
+ - Fix typo in README.md (#549)
12
+ - details on config behavior (#556)
13
+ - Consider overloads in arity checks
14
+ - ENV core fill for Hash-like methods (#537)
15
+ - Fix string ranges with substitutions (#463)
16
+
17
+ ## 0.44.3 - January 22, 2022
18
+ - TypeChecker validates aliased namespaces (#497)
19
+ - Always use reference YARD tags when resolving param types (#515) (#516)
20
+ - Skip method aliases in strict type checking
21
+
22
+ ## 0.44.2 - November 23, 2021
23
+ - Scope local variables in class_eval blocks (#503)
24
+ - Fix invalid UTF-8 in node comments (#504)
25
+
1
26
  ## 0.44.1 - November 18, 2021
2
27
  - Chain nil safety navigation operator (#420)
3
28
  - Update closure and context for class_eval receiver (#487)
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Solargraph
2
2
 
3
+ [![RSpec](https://github.com/castwide/solargraph/actions/workflows/rspec.yml/badge.svg)](https://github.com/castwide/solargraph/actions/workflows/rspec.yml)
4
+
3
5
  ## A Ruby Language Server
4
6
 
5
7
  Solargraph provides a comprehensive suite of tools for Ruby programming: intellisense, diagnostics, inline documentation, and type checking.
@@ -31,7 +33,9 @@ Plug-ins and extensions are available for the following editors:
31
33
  * GitHub: https://github.com/castwide/atom-solargraph
32
34
 
33
35
  * **Vim**
34
- * GitHub: https://github.com/autozimu/LanguageClient-neovim
36
+ * GitHub: `LanguageClient-neovim`, https://github.com/autozimu/LanguageClient-neovim
37
+ * GitHub: `coc`, https://github.com/neoclide/coc-solargraph
38
+ * GitHub: `Vim-EasyComplete`, https://github.com/jayli/vim-easycomplete
35
39
 
36
40
  * **Emacs**
37
41
  * GitHub: `eglot.el`, https://github.com/joaotavora/eglot
@@ -41,13 +45,17 @@ Plug-ins and extensions are available for the following editors:
41
45
  * Plugin: https://marketplace.eclipse.org/content/ruby-solargraph
42
46
  * GitHub: https://github.com/PyvesB/eclipse-solargraph
43
47
 
48
+ ### Configuration
49
+
50
+ Solargraph's behavior can be controlled via optional [configuration](https://solargraph.org/guides/configuration) files. The highest priority file is a `.solargraph.yml` file at the root of the project. If not present, any global configuration at `~/.config/solargraph/config.yml` will apply. The path to the global configuration can be overridden with the `SOLARGRAPH_GLOBAL_CONFIG` environment variable.
51
+
44
52
  ### Gem Support
45
53
 
46
54
  Solargraph is capable of providing code completion and documentation for gems that have YARD documentation. You can make sure your gems are documented by running `yard gems` from the command line. (YARD is included as one of Solargraph's gem dependencies. The first time you run it might take a while if you have a lot of gems installed).
47
55
 
48
56
  When editing code, a `require` call that references a gem will pull the documentation into the code maps and include the gem's API in code completion and intellisense.
49
57
 
50
- If your project automatically requires bundled gems (e.g., `require 'bundler/require'`), Solargraph will add all of the Gemfile's default dependecies to the map.
58
+ If your project automatically requires bundled gems (e.g., `require 'bundler/require'`), Solargraph will add all of the Gemfile's default dependencies to the map.
51
59
 
52
60
  ### Type Checking
53
61
 
data/SPONSORS.md CHANGED
@@ -13,3 +13,5 @@ The following people and organizations provide funding or other resources. [Beco
13
13
  - Emily Strickland
14
14
  - Tom de Grunt
15
15
  - Akira Yamada
16
+ - Erlend Finvåg
17
+ - Matt Massicotte
@@ -255,7 +255,7 @@ module Solargraph
255
255
  implicit.domains.each do |domain|
256
256
  type = ComplexType.try_parse(domain)
257
257
  next if type.undefined?
258
- result.concat inner_get_methods(type.name, type.scope, [:public], deep, skip)
258
+ result.concat inner_get_methods(type.name, type.scope, visibility, deep, skip)
259
259
  end
260
260
  result.concat inner_get_methods(fqns, :class, visibility, deep, skip)
261
261
  result.concat inner_get_methods(fqns, :instance, visibility, deep, skip)
@@ -525,7 +525,7 @@ module Solargraph
525
525
  end
526
526
  store.domains(fqns).each do |d|
527
527
  dt = ComplexType.try_parse(d)
528
- result.concat inner_get_methods(dt.namespace, dt.scope, [:public], deep, skip)
528
+ result.concat inner_get_methods(dt.namespace, dt.scope, visibility, deep, skip)
529
529
  end
530
530
  end
531
531
  result
@@ -8,14 +8,23 @@ module Solargraph
8
8
  @environ ||= Environ.new(
9
9
  requires: ['rspec'],
10
10
  domains: ['RSpec::Matchers', 'RSpec::ExpectationGroups'],
11
- # This override is necessary due to an erroneous @return tag in
12
- # rspec's YARD documentation.
13
- # @todo The return types have been fixed (https://github.com/rspec/rspec-expectations/pull/1121)
14
11
  pins: [
12
+ # This override is necessary due to an erroneous @return tag in
13
+ # rspec's YARD documentation.
14
+ # @todo The return types have been fixed (https://github.com/rspec/rspec-expectations/pull/1121)
15
15
  Solargraph::Pin::Reference::Override.method_return('RSpec::Matchers#expect', 'RSpec::Expectations::ExpectationTarget')
16
- ]
16
+ ].concat(extras)
17
17
  )
18
18
  end
19
+
20
+ private
21
+
22
+ def extras
23
+ @@extras ||= SourceMap.load_string(%(
24
+ def describe(*args); end
25
+ def it(*args); end
26
+ )).pins
27
+ end
19
28
  end
20
29
  end
21
30
  end
@@ -14,7 +14,7 @@ module Solargraph
14
14
  # @param uri [String]
15
15
  # @return [String]
16
16
  def uri_to_file uri
17
- decode(uri).sub(/^file\:\/\//, '').sub(/^\/([a-z]\:)/i, '\1')
17
+ decode(uri).sub(/^file\:(?:\/\/)?/, '').sub(/^\/([a-z]\:)/i, '\1')
18
18
  end
19
19
 
20
20
  # Convert a file path to a URI.
@@ -48,10 +48,16 @@ module Solargraph
48
48
  end
49
49
 
50
50
  def references source, name
51
+ if name.end_with?("=")
52
+ reg = /#{Regexp.escape name[0..-2]}\s*=/
53
+ extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
54
+ else
55
+ extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
56
+ end
51
57
  inner_node_references(name, source.node).map do |n|
52
- offset = Position.to_offset(source.code, NodeMethods.get_node_start_position(n))
53
- soff = source.code.index(name, offset)
54
- eoff = soff + name.length
58
+ rng = Range.from_node(n)
59
+ offset = Position.to_offset(source.code, rng.start)
60
+ soff, eoff = extract_offset[source.code, offset]
55
61
  Location.new(
56
62
  source.filename,
57
63
  Range.new(
@@ -109,16 +115,11 @@ module Solargraph
109
115
  result = []
110
116
  if node.type == :str
111
117
  result.push Range.from_node(node)
112
- elsif node.type == :dstr
113
- here = Range.from_node(node)
114
- there = Range.from_node(node.children[1])
115
- result.push Range.new(here.start, there.start)
116
118
  end
117
119
  node.children.each do |child|
118
120
  result.concat string_ranges(child)
119
121
  end
120
122
  if node.type == :dstr && node.children.last.nil?
121
- # result.push Range.new(result.last.ending, result.last.ending)
122
123
  last = node.children[-2]
123
124
  unless last.nil?
124
125
  rng = Range.from_node(last)
@@ -8,17 +8,24 @@ module Solargraph
8
8
  include Legacy::NodeMethods
9
9
 
10
10
  def process
11
- if other_class_eval?
12
- other_class = Solargraph::Pin::Namespace.new(
11
+ location = get_node_location(node)
12
+ parent = if other_class_eval?
13
+ Solargraph::Pin::Namespace.new(
14
+ location: location,
13
15
  type: :class,
14
16
  name: unpack_name(node.children[0].children[0])
15
17
  )
16
- make_block_in other_class.context
17
- process_children region.update(closure: other_class)
18
18
  else
19
- make_block_in nil
20
- process_children region.update(closure: pins.last)
19
+ region.closure
21
20
  end
21
+ pins.push Solargraph::Pin::Block.new(
22
+ location: location,
23
+ closure: parent,
24
+ receiver: node.children[0],
25
+ comments: comments_for(node),
26
+ scope: region.scope || region.closure.context.scope
27
+ )
28
+ process_children region.update(closure: pins.last)
22
29
  end
23
30
 
24
31
  private
@@ -28,17 +35,6 @@ module Solargraph
28
35
  node.children[0].children[1] == :class_eval &&
29
36
  [:cbase, :const].include?(node.children[0].children[0]&.type)
30
37
  end
31
-
32
- def make_block_in context
33
- pins.push Solargraph::Pin::Block.new(
34
- location: get_node_location(node),
35
- context: context,
36
- closure: region.closure,
37
- receiver: node.children[0],
38
- comments: comments_for(node),
39
- scope: region.scope || region.closure.context.scope
40
- )
41
- end
42
38
  end
43
39
  end
44
40
  end
@@ -29,16 +29,6 @@ module Solargraph
29
29
  NodeProcessor.process(source.node, Region.new(source: source))
30
30
  end
31
31
 
32
- # def returns_from node
33
- # return [] unless Parser.is_ast_node?(node)
34
- # if node.type == :SCOPE
35
- # # node.children.select { |n| n.is_a?(RubyVM::AbstractSyntaxTree::Node) }.map { |n| DeepInference.get_return_nodes(n) }.flatten
36
- # DeepInference.get_return_nodes(node.children[2])
37
- # else
38
- # DeepInference.get_return_nodes(node)
39
- # end
40
- # end
41
-
42
32
  def references source, name
43
33
  if name.end_with?("=")
44
34
  reg = /#{Regexp.escape name[0..-2]}\s*=/
@@ -133,13 +123,12 @@ module Solargraph
133
123
  elsif node.type == :DSTR
134
124
  here = Range.from_node(node)
135
125
  there = Range.from_node(node.children[1])
136
- result.push Range.new(here.start, there.start)
126
+ result.push Range.new(here.start, there&.start || here.ending)
137
127
  end
138
128
  node.children.each do |child|
139
129
  result.concat string_ranges(child)
140
130
  end
141
131
  if node.type == :DSTR && node.children.last.nil?
142
- # result.push Range.new(result.last.ending, result.last.ending)
143
132
  last = node.children[-2]
144
133
  unless last.nil?
145
134
  rng = Range.from_node(last)
@@ -8,17 +8,24 @@ module Solargraph
8
8
  include NodeMethods
9
9
 
10
10
  def process
11
- if other_class_eval?
12
- other_class = Solargraph::Pin::Namespace.new(
11
+ location = get_node_location(node)
12
+ parent = if other_class_eval?
13
+ Solargraph::Pin::Namespace.new(
14
+ location: location,
13
15
  type: :class,
14
16
  name: unpack_name(node.children[0].children[0])
15
17
  )
16
- make_block_in other_class.context
17
- process_children region.update(closure: other_class)
18
18
  else
19
- make_block_in nil
20
- process_children region.update(closure: pins.last)
19
+ region.closure
21
20
  end
21
+ pins.push Solargraph::Pin::Block.new(
22
+ location: location,
23
+ closure: parent,
24
+ receiver: node.children[0],
25
+ comments: comments_for(node),
26
+ scope: region.scope || region.closure.context.scope
27
+ )
28
+ process_children region.update(closure: pins.last)
22
29
  end
23
30
 
24
31
  private
@@ -28,17 +35,6 @@ module Solargraph
28
35
  node.children[0].children[1] == :class_eval &&
29
36
  [:COLON2, :CONST].include?(node.children[0].children[0].type)
30
37
  end
31
-
32
- def make_block_in context
33
- pins.push Solargraph::Pin::Block.new(
34
- location: get_node_location(node),
35
- context: context,
36
- closure: region.closure,
37
- receiver: node.children[0],
38
- comments: comments_for(node),
39
- scope: region.scope || region.closure.context.scope
40
- )
41
- end
42
38
  end
43
39
  end
44
40
  end
@@ -45,6 +45,7 @@ module Solargraph
45
45
  register :IASGN, Rubyvm::NodeProcessors::IvasgnNode
46
46
  register :CVASGN, Rubyvm::NodeProcessors::CvasgnNode
47
47
  register :LASGN, Rubyvm::NodeProcessors::LvasgnNode
48
+ register :DASGN, Rubyvm::NodeProcessors::LvasgnNode
48
49
  register :DASGN_CURR, Rubyvm::NodeProcessors::LvasgnNode
49
50
  register :GASGN, Rubyvm::NodeProcessors::GvasgnNode
50
51
  register :CDECL, Rubyvm::NodeProcessors::CasgnNode
@@ -41,7 +41,7 @@ module Solargraph
41
41
  end
42
42
 
43
43
  def match_named_closure needle, haystack
44
- return true if needle == haystack
44
+ return true if needle == haystack || haystack.is_a?(Pin::Block)
45
45
  cursor = haystack
46
46
  until cursor.nil?
47
47
  return true if needle.path == cursor.path
@@ -9,8 +9,8 @@ module Solargraph
9
9
  # @return [::Symbol] :class or :module
10
10
  attr_reader :type
11
11
 
12
- # @param type [Symbol] :class or :module
13
- # @param visibility [Symbol] :public or :private
12
+ # @param type [::Symbol] :class or :module
13
+ # @param visibility [::Symbol] :public or :private
14
14
  # @param gates [Array<String>]
15
15
  def initialize type: :class, visibility: :public, gates: [''], **splat
16
16
  # super(location, namespace, name, comments)
@@ -145,10 +145,7 @@ module Solargraph
145
145
  # meths.shift # Ignore the first one
146
146
  meths.each do |meth|
147
147
  found = nil
148
- params = meth.docstring.tags(:param)
149
- if params.empty?
150
- params = see_reference(docstring, api_map)
151
- end
148
+ params = meth.docstring.tags(:param) + see_reference(docstring, api_map)
152
149
  params.each do |p|
153
150
  next unless p.name == name
154
151
  found = p
@@ -69,7 +69,7 @@ module Solargraph
69
69
  if node.is_a?(RubyVM::AbstractSyntaxTree::Node)
70
70
  Solargraph::Range.from_to(node.first_lineno - 1, node.first_column, node.last_lineno - 1, node.last_column)
71
71
  end
72
- elsif node.loc && node.loc.expression
72
+ elsif node&.loc && node.loc.expression
73
73
  from_expr(node.loc.expression)
74
74
  end
75
75
  end
@@ -360,7 +360,7 @@ module Solargraph
360
360
  skip = nil
361
361
  comments.lines.each { |l|
362
362
  # Trim the comment and minimum leading whitespace
363
- p = l.gsub(/^#+/, '')
363
+ p = l.encode('UTF-8', invalid: :replace, replace: '?').gsub(/^#+/, '')
364
364
  if p.strip.empty?
365
365
  next unless started
366
366
  ctxt.concat p
@@ -84,12 +84,13 @@ module Solargraph
84
84
  # @param pin [Pin::Method]
85
85
  # @return [Array<Problem>]
86
86
  def method_return_type_problems_for pin
87
+ return [] if pin.is_a?(Pin::MethodAlias)
87
88
  result = []
88
89
  declared = pin.typify(api_map).self_to(pin.full_context.namespace)
89
90
  if declared.undefined?
90
91
  if pin.return_type.undefined? && rules.require_type_tags?
91
92
  result.push Problem.new(pin.location, "Missing @return tag for #{pin.path}", pin: pin)
92
- elsif pin.return_type.defined?
93
+ elsif pin.return_type.defined? && !resolved_constant?(pin)
93
94
  result.push Problem.new(pin.location, "Unresolved return type #{pin.return_type} for #{pin.path}", pin: pin)
94
95
  elsif rules.must_tag_or_infer? && pin.probe(api_map).undefined?
95
96
  result.push Problem.new(pin.location, "Untyped method #{pin.path} could not be inferred")
@@ -111,6 +112,15 @@ module Solargraph
111
112
  result
112
113
  end
113
114
 
115
+ # @todo This is not optimal. A better solution would probably be to mix
116
+ # namespace alias into types at the ApiMap level.
117
+ #
118
+ # @param pin [Pin::Base]
119
+ # @return [Boolean]
120
+ def resolved_constant? pin
121
+ api_map.get_constants('', pin.binder.tag).any? { |pin| pin.name == pin.return_type.namespace && ['Class', 'Module'].include?(pin.return_type.name) }
122
+ end
123
+
114
124
  def virtual_pin? pin
115
125
  pin.location && source_map.source.comment_at?(pin.location.range.ending)
116
126
  end
@@ -402,6 +412,15 @@ module Solargraph
402
412
 
403
413
  # @param pin [Pin::Method]
404
414
  def arity_problems_for(pin, arguments, location)
415
+ ([pin] + pin.overloads).map do |p|
416
+ result = pin_arity_problems_for(p, arguments, location)
417
+ return [] if result.empty?
418
+ result
419
+ end.flatten.uniq(&:message)
420
+ end
421
+
422
+ # @param pin [Pin::Method]
423
+ def pin_arity_problems_for(pin, arguments, location)
405
424
  return [] unless pin.explicit?
406
425
  return [] if pin.parameters.empty? && arguments.empty?
407
426
  if pin.parameters.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.44.1'
4
+ VERSION = '0.45.0'
5
5
  end
@@ -101,6 +101,7 @@ module Solargraph
101
101
  Override.method_return('File.dirname', 'String'),
102
102
  Override.method_return('File.extname', 'String'),
103
103
  Override.method_return('File.join', 'String'),
104
+ Override.method_return('File.open', 'File'),
104
105
 
105
106
  Override.from_comment('Float#+', %(
106
107
  @param y [Numeric]
@@ -110,14 +111,15 @@ module Solargraph
110
111
  Override.from_comment('Hash#[]', %(
111
112
  @return_value_parameter
112
113
  )),
113
-
114
114
  # @todo This override isn't robust enough. It needs to allow for
115
115
  # parameterized Hash types, e.g., [Hash{Symbol => String}].
116
116
  Override.from_comment('Hash#[]=', %(
117
117
  @param_tuple
118
118
  )),
119
-
120
119
  Override.method_return('Hash#merge', 'Hash'),
120
+ Override.from_comment('Hash#store', %{
121
+ @overload store(key, value)
122
+ }),
121
123
 
122
124
  Override.from_comment('Integer#+', %(
123
125
  @param y [Numeric]
@@ -181,6 +183,9 @@ module Solargraph
181
183
  )
182
184
 
183
185
  PINS = [
186
+ # HACK: Extending Hash is not accurate to the implementation, but
187
+ # accurate enough to the behavior
188
+ Pin::Reference::Extend.new(closure: Pin::Namespace.new(name: 'ENV'), name: 'Hash'),
184
189
  Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'File'), name: 'IO'),
185
190
  Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Integer'), name: 'Numeric'),
186
191
  Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Float'), name: 'Numeric')
@@ -343,7 +343,9 @@ module Solargraph
343
343
  # @param path [String]
344
344
  # @return [Gem::Specification]
345
345
  def spec_for_require path
346
- spec = Gem::Specification.find_by_path(path) || Gem::Specification.find_by_name(path.split('/').first)
346
+ name = path.split('/').first
347
+ spec = Gem::Specification.find_by_name(name, @gemset[name])
348
+
347
349
  # Avoid loading the spec again if it's going to be skipped anyway
348
350
  return spec if @source_gems.include?(spec.name)
349
351
  # Avoid loading the spec again if it's already the correct version
data/lib/solargraph.rb CHANGED
@@ -59,8 +59,8 @@ module Solargraph
59
59
  #
60
60
  # @return [void]
61
61
  def self.with_clean_env &block
62
- meth = if Bundler.respond_to?(:with_unbundled_env)
63
- :with_unbundled_env
62
+ meth = if Bundler.respond_to?(:with_original_env)
63
+ :with_original_env
64
64
  else
65
65
  :with_clean_env
66
66
  end
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.44.1
4
+ version: 0.45.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-11-18 00:00:00.000000000 Z
11
+ date: 2022-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport
@@ -301,6 +301,7 @@ executables:
301
301
  extensions: []
302
302
  extra_rdoc_files: []
303
303
  files:
304
+ - ".github/workflows/rspec.yml"
304
305
  - ".gitignore"
305
306
  - ".rspec"
306
307
  - ".travis.yml"
@@ -572,7 +573,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
573
  - !ruby/object:Gem::Version
573
574
  version: '0'
574
575
  requirements: []
575
- rubygems_version: 3.1.6
576
+ rubygems_version: 3.3.7
576
577
  signing_key:
577
578
  specification_version: 4
578
579
  summary: A Ruby language server