ruby-lsp-rspec 0.1.9 → 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: ea19794fda048857798f87bb194d7c693da87320ba684cb7bcfb834ee7aaf124
4
- data.tar.gz: 4daa91246afac9919461a362d0ce2f289c03f531840811ef25e8c94bb75f43b5
3
+ metadata.gz: 14dfb45f32aa9c2a4041da7e65a851fb7c78928ec3fe29663092b2511c186ada
4
+ data.tar.gz: 382982a793771a83e0ac9da31756244eca80750b1f35d7ed146fe01c3168514b
5
5
  SHA512:
6
- metadata.gz: 9ddbd1cb07a8856899e0587d42e565d114b2317178617c116d8b11836a5cadc79f6c14145e45c35562af4287105834d789be5dc96dcba305361f05047ee098d2
7
- data.tar.gz: c8efb631e8d65970138c4b8d1bbe3e84afaccbc0b20c94150014afbb7c439c19fdf99117edf7ab6c320337cbe30e2dc8ac2c32fa213b1bd7ce8c1a2f362ba88b
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 }
@@ -119,7 +117,7 @@ module RubyLsp
119
117
  },
120
118
  ]
121
119
 
122
- @_response << create_code_lens(
120
+ @response_builder << create_code_lens(
123
121
  node,
124
122
  title: "Run",
125
123
  command_name: "rubyLsp.runTest",
@@ -127,7 +125,7 @@ module RubyLsp
127
125
  data: { type: "test", **grouping_data },
128
126
  )
129
127
 
130
- @_response << create_code_lens(
128
+ @response_builder << create_code_lens(
131
129
  node,
132
130
  title: "Run In Terminal",
133
131
  command_name: "rubyLsp.runTestInTerminal",
@@ -135,7 +133,7 @@ module RubyLsp
135
133
  data: { type: "test_in_terminal", **grouping_data },
136
134
  )
137
135
 
138
- @_response << create_code_lens(
136
+ @response_builder << create_code_lens(
139
137
  node,
140
138
  title: "Debug",
141
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.9"
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.9
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: 2024-01-16 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: