ruby-lsp-rspec 0.1.8 → 0.1.10

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: 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