ruby-lsp-rake 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/Rakefile +1 -1
- data/lib/ruby_lsp/ruby_lsp_rake/addon.rb +12 -0
- data/lib/ruby_lsp/ruby_lsp_rake/code_lens.rb +89 -0
- data/lib/ruby_lsp/ruby_lsp_rake/definition.rb +1 -1
- data/lib/ruby_lsp_rake/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8847926c5182d4db9694d07d0372074c238b9e5f4529efeb287fbc5b52a99031
|
4
|
+
data.tar.gz: 8cddf883be530d635bdad6a3d663c44afcfa61554c44e86628fb8f296838f74c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 338cda3f5766301836692dd8122756c77725714052686d5d2fed232cc2aa0e9ad2efc2e0ad5b570b04355959fb393208d37c4b10b482aa995b5a146c140e77eb
|
7
|
+
data.tar.gz: d26821cfb522050d68cbc4be6c78577d7f269695ff47c99e2ec6e99c47c6d7adf4ae1abb700a414a3be5828d3824d3926ac85942776f50871cb20c903c3266f7
|
data/.rubocop.yml
CHANGED
data/Rakefile
CHANGED
@@ -5,6 +5,7 @@ require "ruby_lsp/addon"
|
|
5
5
|
require_relative "indexing_enhancement"
|
6
6
|
require_relative "hover"
|
7
7
|
require_relative "definition"
|
8
|
+
require_relative "code_lens"
|
8
9
|
|
9
10
|
module RubyLsp
|
10
11
|
module Rake
|
@@ -54,6 +55,17 @@ module RubyLsp
|
|
54
55
|
def create_definition_listener(response_builder, _uri, node_context, dispatcher)
|
55
56
|
Definition.new(response_builder, node_context, @index, dispatcher)
|
56
57
|
end
|
58
|
+
|
59
|
+
sig do
|
60
|
+
override.params(
|
61
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
|
62
|
+
uri: URI::Generic,
|
63
|
+
dispatcher: Prism::Dispatcher
|
64
|
+
).void
|
65
|
+
end
|
66
|
+
def create_code_lens_listener(response_builder, uri, dispatcher)
|
67
|
+
CodeLens.new(response_builder, uri, dispatcher)
|
68
|
+
end
|
57
69
|
end
|
58
70
|
end
|
59
71
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module RubyLsp
|
5
|
+
module Rake
|
6
|
+
class CodeLens # rubocop:disable Style/Documentation
|
7
|
+
extend T::Sig
|
8
|
+
include Requests::Support::Common
|
9
|
+
|
10
|
+
sig do
|
11
|
+
params(
|
12
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
|
13
|
+
uri: URI::Generic,
|
14
|
+
dispatcher: Prism::Dispatcher
|
15
|
+
).void
|
16
|
+
end
|
17
|
+
def initialize(response_builder, uri, dispatcher)
|
18
|
+
@response_builder = response_builder
|
19
|
+
@path = T.let(T.unsafe(uri).to_standardized_path, T.nilable(String))
|
20
|
+
@namespace_stack = []
|
21
|
+
|
22
|
+
dispatcher.register(self, :on_call_node_enter, :on_call_node_leave)
|
23
|
+
end
|
24
|
+
|
25
|
+
sig { params(node: Prism::CallNode).void }
|
26
|
+
def on_call_node_enter(node) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
27
|
+
return unless node.receiver.nil?
|
28
|
+
return unless node.name == :task || node.name == :namespace
|
29
|
+
|
30
|
+
arguments = node.arguments&.arguments
|
31
|
+
return unless arguments
|
32
|
+
|
33
|
+
arg = arguments.first
|
34
|
+
name = case arg
|
35
|
+
when Prism::StringNode
|
36
|
+
arg.content
|
37
|
+
when Prism::SymbolNode
|
38
|
+
arg.value
|
39
|
+
when Prism::KeywordHashNode
|
40
|
+
kh = arg.child_nodes.first
|
41
|
+
case kh
|
42
|
+
when Prism::AssocNode
|
43
|
+
k = kh.key
|
44
|
+
case k
|
45
|
+
when Prism::StringNode
|
46
|
+
k.content
|
47
|
+
when Prism::SymbolNode
|
48
|
+
k.value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
return if name.nil?
|
54
|
+
|
55
|
+
if node.name == :namespace
|
56
|
+
@namespace_stack << name
|
57
|
+
return
|
58
|
+
end
|
59
|
+
|
60
|
+
task_name = [*@namespace_stack, name].join(":")
|
61
|
+
|
62
|
+
@response_builder << create_code_lens(
|
63
|
+
node,
|
64
|
+
title: "▶ Run In Terminal",
|
65
|
+
command_name: "rubyLsp.runTestInTerminal",
|
66
|
+
arguments: [
|
67
|
+
@path,
|
68
|
+
task_name,
|
69
|
+
"rake #{task_name}",
|
70
|
+
{
|
71
|
+
start_line: node.location.start_line - 1,
|
72
|
+
start_column: node.location.start_column,
|
73
|
+
end_line: node.location.end_line - 1,
|
74
|
+
end_column: node.location.end_column
|
75
|
+
}
|
76
|
+
],
|
77
|
+
data: { type: "rake" }
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
sig { params(node: Prism::CallNode).void }
|
82
|
+
def on_call_node_leave(node)
|
83
|
+
return unless node.name == :namespace
|
84
|
+
|
85
|
+
@namespace_stack.pop
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -78,7 +78,7 @@ module RubyLsp
|
|
78
78
|
task_name = "task:#{name}"
|
79
79
|
return unless @index.indexed? task_name
|
80
80
|
|
81
|
-
entries = @index[task_name]
|
81
|
+
entries = T.must(@index[task_name])
|
82
82
|
|
83
83
|
# refer to: https://github.com/Shopify/ruby-lsp-rails/blob/b7791290fb59b06dc99e28a991ee0607e3931a1e/lib/ruby_lsp/ruby_lsp_rails/definition.rb#L141-L152
|
84
84
|
entries.each do |entry|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lsp-rake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koji NAKAMURA
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-01-
|
10
|
+
date: 2025-01-27 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: ruby-lsp
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- Rakefile
|
37
37
|
- img/dependency_task_links_on_hover.png
|
38
38
|
- lib/ruby_lsp/ruby_lsp_rake/addon.rb
|
39
|
+
- lib/ruby_lsp/ruby_lsp_rake/code_lens.rb
|
39
40
|
- lib/ruby_lsp/ruby_lsp_rake/definition.rb
|
40
41
|
- lib/ruby_lsp/ruby_lsp_rake/hover.rb
|
41
42
|
- lib/ruby_lsp/ruby_lsp_rake/indexing_enhancement.rb
|