ruby-lsp-rspec 0.1.8 → 0.1.10

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: 4a2c9365c60f18ec5838ef6b616a1f19de7b28333ea6816a2a730866239baf7d
4
- data.tar.gz: 195bbb73070d07492a8e873e0374b453e025ed496916f9df51e14e1fa808c609
3
+ metadata.gz: 14dfb45f32aa9c2a4041da7e65a851fb7c78928ec3fe29663092b2511c186ada
4
+ data.tar.gz: 382982a793771a83e0ac9da31756244eca80750b1f35d7ed146fe01c3168514b
5
5
  SHA512:
6
- metadata.gz: c77f5457e8100cf08eab07c26607f00bb85683d15d69ccb87f85f09a53000c3ffb973365106a2498ba128055e2451ef58c20f9be7267a2b0daea0e5c2e87465c
7
- data.tar.gz: a194c571edb9bc0ae68766a2ad6b30b7e245670bd8be66ef82a8796d329edf6e7a92d021b1321ef53e8f14e1d851917414b35dbdc826c749bf41f42712f08e77
6
+ metadata.gz: e9404a0138a746c552480bada9b04869a2a3f2935db75a785669a0bbb9c15f5d87f25c3e11b16041f87c5bb432693afc8e960abab05b1b9efd43b040050f090a
7
+ data.tar.gz: 22abcfadc79d4de2aecca269cce28ec987f64ee20df4afdc94fc334d565bc524ca8afaf384cf6a50481705762653e5633b2a9eff2e3f23f56b91753702354c55
@@ -5,6 +5,7 @@ require "ruby_lsp/addon"
5
5
  require "ruby_lsp/internal"
6
6
 
7
7
  require_relative "code_lens"
8
+ require_relative "document_symbol"
8
9
 
9
10
  module RubyLsp
10
11
  module RSpec
@@ -20,14 +21,25 @@ module RubyLsp
20
21
  # Creates a new CodeLens listener. This method is invoked on every CodeLens request
21
22
  sig do
22
23
  override.params(
24
+ response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
23
25
  uri: URI::Generic,
24
26
  emitter: Prism::Dispatcher,
25
- ).returns(T.nilable(Listener[T::Array[Interface::CodeLens]]))
27
+ ).void
26
28
  end
27
- def create_code_lens_listener(uri, emitter)
29
+ def create_code_lens_listener(response_builder, uri, emitter)
28
30
  return unless uri.to_standardized_path&.end_with?("_test.rb") || uri.to_standardized_path&.end_with?("_spec.rb")
29
31
 
30
- CodeLens.new(uri, emitter)
32
+ CodeLens.new(response_builder, uri, emitter)
33
+ end
34
+
35
+ sig do
36
+ override.params(
37
+ response_builder: ResponseBuilders::DocumentSymbol,
38
+ dispatcher: Prism::Dispatcher,
39
+ ).void
40
+ end
41
+ def create_document_symbol_listener(response_builder, dispatcher)
42
+ DocumentSymbol.new(response_builder, dispatcher)
31
43
  end
32
44
 
33
45
  sig { override.returns(String) }
@@ -3,20 +3,20 @@
3
3
 
4
4
  module RubyLsp
5
5
  module RSpec
6
- class CodeLens < ::RubyLsp::Listener
6
+ class CodeLens
7
7
  extend T::Sig
8
- extend T::Generic
9
8
 
10
9
  include ::RubyLsp::Requests::Support::Common
11
10
 
12
- ResponseType = type_member { { fixed: T::Array[::RubyLsp::Interface::CodeLens] } }
13
-
14
- sig { override.returns(ResponseType) }
15
- attr_reader :_response
16
-
17
- sig { params(uri: URI::Generic, dispatcher: Prism::Dispatcher).void }
18
- def initialize(uri, dispatcher)
19
- @_response = T.let([], ResponseType)
11
+ sig do
12
+ params(
13
+ response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
14
+ uri: URI::Generic,
15
+ dispatcher: Prism::Dispatcher,
16
+ ).void
17
+ end
18
+ def initialize(response_builder, uri, dispatcher)
19
+ @response_builder = response_builder
20
20
  # Listener is only initialized if uri.to_standardized_path is valid
21
21
  @path = T.let(T.must(uri.to_standardized_path), String)
22
22
  @group_id = T.let(1, Integer)
@@ -39,8 +39,6 @@ module RubyLsp
39
39
  end,
40
40
  String,
41
41
  )
42
-
43
- super(dispatcher)
44
42
  end
45
43
 
46
44
  sig { params(node: Prism::CallNode).void }
@@ -50,7 +48,7 @@ module RubyLsp
50
48
  name = generate_name(node)
51
49
  add_test_code_lens(node, name: name, kind: :example)
52
50
  when "context", "describe"
53
- return if node.receiver && node.receiver&.slice != "RSpec"
51
+ return unless valid_group?(node)
54
52
 
55
53
  name = generate_name(node)
56
54
  add_test_code_lens(node, name: name, kind: :group)
@@ -64,12 +62,19 @@ module RubyLsp
64
62
  def on_call_node_leave(node)
65
63
  case node.message
66
64
  when "context", "describe"
67
- return if node.receiver && node.receiver&.slice != "RSpec"
65
+ return unless valid_group?(node)
68
66
 
69
67
  @group_id_stack.pop
70
68
  end
71
69
  end
72
70
 
71
+ private
72
+
73
+ sig { params(node: Prism::CallNode).returns(T::Boolean) }
74
+ def valid_group?(node)
75
+ !(node.block.nil? || (node.receiver && node.receiver&.slice != "RSpec"))
76
+ end
77
+
73
78
  sig { params(node: Prism::CallNode).returns(String) }
74
79
  def generate_name(node)
75
80
  arguments = node.arguments&.arguments
@@ -92,8 +97,6 @@ module RubyLsp
92
97
  end
93
98
  end
94
99
 
95
- private
96
-
97
100
  sig { params(node: Prism::Node, name: String, kind: Symbol).void }
98
101
  def add_test_code_lens(node, name:, kind:)
99
102
  line_number = node.location.start_line
@@ -114,7 +117,7 @@ module RubyLsp
114
117
  },
115
118
  ]
116
119
 
117
- @_response << create_code_lens(
120
+ @response_builder << create_code_lens(
118
121
  node,
119
122
  title: "Run",
120
123
  command_name: "rubyLsp.runTest",
@@ -122,7 +125,7 @@ module RubyLsp
122
125
  data: { type: "test", **grouping_data },
123
126
  )
124
127
 
125
- @_response << create_code_lens(
128
+ @response_builder << create_code_lens(
126
129
  node,
127
130
  title: "Run In Terminal",
128
131
  command_name: "rubyLsp.runTestInTerminal",
@@ -130,7 +133,7 @@ module RubyLsp
130
133
  data: { type: "test_in_terminal", **grouping_data },
131
134
  )
132
135
 
133
- @_response << create_code_lens(
136
+ @response_builder << create_code_lens(
134
137
  node,
135
138
  title: "Debug",
136
139
  command_name: "rubyLsp.debugTest",
@@ -0,0 +1,88 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module RubyLsp
5
+ module RSpec
6
+ class DocumentSymbol
7
+ extend T::Sig
8
+
9
+ include ::RubyLsp::Requests::Support::Common
10
+
11
+ sig do
12
+ params(
13
+ response_builder: ResponseBuilders::DocumentSymbol,
14
+ dispatcher: Prism::Dispatcher,
15
+ ).void
16
+ end
17
+ def initialize(response_builder, dispatcher)
18
+ @response_builder = response_builder
19
+
20
+ dispatcher.register(self, :on_call_node_enter, :on_call_node_leave)
21
+ end
22
+
23
+ sig { params(node: Prism::CallNode).void }
24
+ def on_call_node_enter(node)
25
+ case node.message
26
+ when "example", "it", "specify"
27
+ name = generate_name(node)
28
+
29
+ return unless name
30
+
31
+ @response_builder.last.children << RubyLsp::Interface::DocumentSymbol.new(
32
+ name: name,
33
+ kind: LanguageServer::Protocol::Constant::SymbolKind::METHOD,
34
+ selection_range: range_from_node(node),
35
+ range: range_from_node(node),
36
+ )
37
+ when "context", "describe"
38
+ return if node.receiver && node.receiver&.slice != "RSpec"
39
+
40
+ name = generate_name(node)
41
+
42
+ return unless name
43
+
44
+ symbol = RubyLsp::Interface::DocumentSymbol.new(
45
+ name: name,
46
+ kind: LanguageServer::Protocol::Constant::SymbolKind::MODULE,
47
+ selection_range: range_from_node(node),
48
+ range: range_from_node(node),
49
+ children: [],
50
+ )
51
+
52
+ @response_builder.last.children << symbol
53
+ @response_builder.push(symbol)
54
+ end
55
+ end
56
+
57
+ sig { params(node: Prism::CallNode).void }
58
+ def on_call_node_leave(node)
59
+ case node.message
60
+ when "context", "describe"
61
+ return if node.receiver && node.receiver&.slice != "RSpec"
62
+
63
+ @response_builder.pop
64
+ end
65
+ end
66
+
67
+ sig { params(node: Prism::CallNode).returns(T.nilable(String)) }
68
+ def generate_name(node)
69
+ arguments = node.arguments&.arguments
70
+
71
+ return unless arguments
72
+
73
+ argument = arguments.first
74
+
75
+ case argument
76
+ when Prism::StringNode
77
+ argument.content.dump
78
+ when Prism::CallNode
79
+ "<#{argument.name}>"
80
+ when nil
81
+ nil
82
+ else
83
+ argument.slice
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -3,6 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module RSpec
6
- VERSION = "0.1.8"
6
+ VERSION = "0.1.10"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lsp-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Lo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-02 00:00:00.000000000 Z
11
+ date: 2024-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-lsp
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.13.0
19
+ version: 0.14.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.13.0
26
+ version: 0.14.0
27
27
  description: RSpec addon for ruby-lsp
28
28
  email:
29
29
  - stan001212@gmail.com
@@ -41,6 +41,7 @@ files:
41
41
  - lib/ruby-lsp-rspec.rb
42
42
  - lib/ruby_lsp/ruby_lsp_rspec/addon.rb
43
43
  - lib/ruby_lsp/ruby_lsp_rspec/code_lens.rb
44
+ - lib/ruby_lsp/ruby_lsp_rspec/document_symbol.rb
44
45
  - lib/ruby_lsp_rspec/version.rb
45
46
  homepage: https://github.com/st0012/ruby-lsp-rspec
46
47
  licenses:
@@ -64,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
65
  - !ruby/object:Gem::Version
65
66
  version: '0'
66
67
  requirements: []
67
- rubygems_version: 3.4.10
68
+ rubygems_version: 3.5.1
68
69
  signing_key:
69
70
  specification_version: 4
70
71
  summary: RSpec addon for ruby-lsp