solargraph-rspec 0.2.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25d0ca1f34e0cf80057b86a412ec10cbacba388a96bd5b5e7b93f64457616e5a
4
- data.tar.gz: d1b4b825f9df08a3333bab32d2af05a9cc6a48cd7903f5b4504baba1e775a960
3
+ metadata.gz: b218c57b18c9c34c920dc8085633940b40980109acc0767e3819f2f460af7598
4
+ data.tar.gz: 8d33d3922c38de08dde380776138fb2eddee93f72aaaee1cd7ae4dce7610ac69
5
5
  SHA512:
6
- metadata.gz: 1d7efb9da09a862654e5bb4fbd70bb983230cae9303e98ebc487cb0f00afe752ba8c936513dc23aac153e99f49d607b93111aada2f235fb47fdbeefcb81a0acb
7
- data.tar.gz: aa9563e0d56a8ab37b45a739f6394e47e7dd597bc59bfb205a043ed41d9b5c47bc08b7a8184225ed75f2840bd57aeedd96ed05f325d32700c54e81aafb3e39d3
6
+ metadata.gz: 0d6afb3098eeaa24b1c169ba6993306b14008837ebfd267c30bfe74788cd5deecb7985d33037984f5ed698d259daf9c698dba19f4eed0e6a346f521f081a2d7a
7
+ data.tar.gz: 88699cf9f89421e1a0306d37ce912c1a1fc231cd722cc4338ec757efed7ca304791b1c2e3e3271b9cb057efe91f2d3db8fa22c70739b88569a0be59c9b0de229
data/CHANGELOG.md CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Fixed
11
+
12
+ - Suggest keeping `spec/**/*` in the `exclude` section of `.solargraph.yml` to avoid performance issues (see [commit](https://github.com/lekemula/solargraph-rspec/commit/3f0fc39e59e99bf9430e55c52ecb88650e49315e))
13
+ - Fix `let` definitions when do/end keywords overlap with body definition
14
+ ```ruby
15
+ let(:todo) do # "do" keyword overlap
16
+ {
17
+ 'todo' => 'end' # "end" keyword overlap
18
+ }
19
+ end
20
+ ```
21
+ - Error handling in SpecWalker::FakeLetMethod
10
22
 
11
23
  ## [0.2.1] - 2024-06-09
12
24
 
data/README.md CHANGED
@@ -34,14 +34,19 @@ Or add it to your Gemfile:
34
34
 
35
35
  ```ruby
36
36
  group :development do
37
- gem 'solargraph'
38
- gem 'solargraph-rspec'
37
+ gem 'solargraph', require: false
38
+ gem 'solargraph-rspec', require: false
39
39
  end
40
40
  ```
41
41
 
42
42
  If you add them to your Gemfile, you'll have to tell your IDE plugin to use bundler to load the right version of solargraph.
43
43
 
44
- Add `solargraph-rspec` to your `.solargraph.yml` and remove the `spec` directory from the `exclude` list.
44
+ Add `solargraph-rspec` to your `.solargraph.yml` as a plugin.
45
+
46
+ > [!CAUTION]
47
+ > To avoid **performance issues**, please keep the `spec/**/*` directory in **exclude** list in the Solargraph configuration.
48
+ > That does not actually *exclude* the specs, but rather avoids pre-indexing the specs when Solargraph boots up, and only parses
49
+ > the specs on demand when opened in the editor, which is what we usually want.
45
50
 
46
51
  (if you don't have a `.solargraph.yml` in your project root, you can run `solargraph config` to add one)
47
52
 
@@ -50,7 +55,7 @@ Add `solargraph-rspec` to your `.solargraph.yml` and remove the `spec` directory
50
55
  include:
51
56
  - "**/*.rb"
52
57
  exclude:
53
- -- spec/**/*
58
+ +- spec/**/*
54
59
  - test/**/*
55
60
  - vendor/**/*
56
61
  - ".bundle/**/*"
@@ -4,18 +4,18 @@ module Solargraph
4
4
  module Rspec
5
5
  class SpecWalker
6
6
  class FakeLetMethod
7
- MATCH_BODY = Regexp.union(
8
- /do(.*)end/m,
9
- /{(.*)}/m
10
- )
7
+ MATCH_DO_END = /.*? do(.*)end/m.freeze
8
+ MATCH_CURLY = /{(.*)}/m.freeze
11
9
 
12
10
  # @param block_ast [RubyVM::AbstractSyntaxTree::Node]
13
- # @return [RubyVM::AbstractSyntaxTree::Node]
11
+ # @return [RubyVM::AbstractSyntaxTree::Node, nil]
14
12
  def self.transform_block(block_ast, code, method_name = nil)
15
13
  method_name ||= NodeTypes.let_method_name(block_ast)
16
14
  block_body = block_ast.children[1]
17
- matches = code.lines[block_body.first_lineno - 1..block_body.last_lineno - 1].join.match(MATCH_BODY)
18
- method_body = (matches[1] || matches[2]).strip
15
+ let_definition_code = code.lines[block_body.first_lineno - 1..block_body.last_lineno - 1].join
16
+ match_do_end = let_definition_code.match(MATCH_DO_END)&.captures&.first || ''
17
+ match_curly = let_definition_code.match(MATCH_CURLY)&.captures&.first || ''
18
+ method_body = [match_do_end, match_curly].max_by(&:length).strip
19
19
 
20
20
  ast = RubyVM::AbstractSyntaxTree.parse <<~RUBY
21
21
  def #{method_name}
@@ -24,8 +24,11 @@ module Solargraph
24
24
  RUBY
25
25
 
26
26
  ast.children[2]
27
- rescue SyntaxError
28
- raise "Failed to build fake let method: #{block_ast.inspect}, message: #{e.message}"
27
+ rescue SyntaxError => e
28
+ Solargraph.logger.warn "[RSpec] Failed to build fake let method: #{e.message}, \
29
+ \n\nlet_definition_code: \n```\n#{let_definition_code}\n```, \
30
+ \n\nmethod_body: \n```\n#{method_body}\n```, \
31
+ \nast: #{block_ast.inspect}"
29
32
  ensure
30
33
  nil
31
34
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Solargraph
4
4
  module Rspec
5
- VERSION = '0.2.1'
5
+ VERSION = '0.2.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lekë Mula
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-11 00:00:00.000000000 Z
11
+ date: 2024-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solargraph
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.49.0
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '0.49'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.49.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 0.49.0
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
29
  version: '0.49'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.49.0
33
33
  description: RSpec is a testing tool of choice for many Ruby developers. This plugin
34
34
  provides code completion and other features for RSpec files in Solargraph.
35
35
  email:
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
- rubygems_version: 3.0.9
92
+ rubygems_version: 3.4.10
93
93
  signing_key:
94
94
  specification_version: 4
95
95
  summary: Solargraph plugin supporting RSpec code completion