ruby-lsp-rake 0.1.5 → 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 +28 -1
- data/lib/ruby_lsp/ruby_lsp_rake/code_lens.rb +89 -0
- data/lib/ruby_lsp/ruby_lsp_rake/definition.rb +98 -0
- data/lib/ruby_lsp/ruby_lsp_rake/hover.rb +2 -2
- data/lib/ruby_lsp_rake/version.rb +8 -0
- metadata +6 -8
- data/lib/ruby/lsp/rake/version.rb +0 -10
- data/lib/ruby/lsp/rake.rb +0 -13
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
@@ -4,6 +4,8 @@
|
|
4
4
|
require "ruby_lsp/addon"
|
5
5
|
require_relative "indexing_enhancement"
|
6
6
|
require_relative "hover"
|
7
|
+
require_relative "definition"
|
8
|
+
require_relative "code_lens"
|
7
9
|
|
8
10
|
module RubyLsp
|
9
11
|
module Rake
|
@@ -26,7 +28,7 @@ module RubyLsp
|
|
26
28
|
|
27
29
|
sig { override.returns(String) }
|
28
30
|
def version
|
29
|
-
::
|
31
|
+
::RubyLsp::Rake::VERSION
|
30
32
|
end
|
31
33
|
|
32
34
|
sig do
|
@@ -39,6 +41,31 @@ module RubyLsp
|
|
39
41
|
def create_hover_listener(response_builder, node_context, dispatcher)
|
40
42
|
Hover.new(response_builder, node_context, dispatcher, @index)
|
41
43
|
end
|
44
|
+
|
45
|
+
sig do
|
46
|
+
override.params(
|
47
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[T.any(
|
48
|
+
Interface::Location, Interface::LocationLink
|
49
|
+
)],
|
50
|
+
_uri: URI::Generic,
|
51
|
+
node_context: NodeContext,
|
52
|
+
dispatcher: Prism::Dispatcher
|
53
|
+
).void
|
54
|
+
end
|
55
|
+
def create_definition_listener(response_builder, _uri, node_context, dispatcher)
|
56
|
+
Definition.new(response_builder, node_context, @index, dispatcher)
|
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
|
42
69
|
end
|
43
70
|
end
|
44
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
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module RubyLsp
|
5
|
+
module Rake
|
6
|
+
class Definition # rubocop:disable Style/Documentation
|
7
|
+
extend T::Sig
|
8
|
+
include Requests::Support::Common
|
9
|
+
|
10
|
+
sig do
|
11
|
+
params(
|
12
|
+
response_builder: RubyLsp::ResponseBuilders::CollectionResponseBuilder[T.any(
|
13
|
+
Interface::Location, Interface::LocationLink
|
14
|
+
)],
|
15
|
+
node_context: NodeContext,
|
16
|
+
index: RubyIndexer::Index,
|
17
|
+
dispatcher: Prism::Dispatcher
|
18
|
+
).void
|
19
|
+
end
|
20
|
+
def initialize(response_builder, node_context, index, dispatcher)
|
21
|
+
@response_builder = response_builder
|
22
|
+
@node_context = node_context
|
23
|
+
@nesting = T.let(node_context.nesting, T::Array[String])
|
24
|
+
@index = index
|
25
|
+
|
26
|
+
dispatcher.register(self, :on_symbol_node_enter, :on_string_node_enter)
|
27
|
+
end
|
28
|
+
|
29
|
+
sig { params(node: Prism::SymbolNode).void }
|
30
|
+
def on_symbol_node_enter(node)
|
31
|
+
handle_prerequisite(node)
|
32
|
+
end
|
33
|
+
|
34
|
+
sig { params(node: Prism::StringNode).void }
|
35
|
+
def on_string_node_enter(node)
|
36
|
+
handle_prerequisite(node)
|
37
|
+
end
|
38
|
+
|
39
|
+
sig { params(node: T.any(Prism::SymbolNode, Prism::StringNode)).void }
|
40
|
+
def handle_prerequisite(node) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
41
|
+
call_node_name = @node_context.call_node&.name
|
42
|
+
return unless call_node_name == :task
|
43
|
+
|
44
|
+
name = case node
|
45
|
+
when Prism::StringNode
|
46
|
+
node.content
|
47
|
+
when Prism::SymbolNode
|
48
|
+
node.value
|
49
|
+
end
|
50
|
+
|
51
|
+
arg = @node_context.call_node&.arguments&.arguments&.first
|
52
|
+
case arg
|
53
|
+
when Prism::KeywordHashNode
|
54
|
+
kh = arg.child_nodes.first
|
55
|
+
case kh
|
56
|
+
when Prism::AssocNode
|
57
|
+
v = kh.value
|
58
|
+
case v
|
59
|
+
when Prism::StringNode
|
60
|
+
return unless name == v.content
|
61
|
+
when Prism::SymbolNode
|
62
|
+
return unless name == v.value
|
63
|
+
when Prism::ArrayNode
|
64
|
+
return unless v.elements.find do |node|
|
65
|
+
name == case node # rubocop:disable Metrics/BlockNesting
|
66
|
+
when Prism::StringNode
|
67
|
+
node.content
|
68
|
+
when Prism::SymbolNode
|
69
|
+
node.value
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
else
|
75
|
+
return
|
76
|
+
end
|
77
|
+
|
78
|
+
task_name = "task:#{name}"
|
79
|
+
return unless @index.indexed? task_name
|
80
|
+
|
81
|
+
entries = T.must(@index[task_name])
|
82
|
+
|
83
|
+
# refer to: https://github.com/Shopify/ruby-lsp-rails/blob/b7791290fb59b06dc99e28a991ee0607e3931a1e/lib/ruby_lsp/ruby_lsp_rails/definition.rb#L141-L152
|
84
|
+
entries.each do |entry|
|
85
|
+
loc = entry.location
|
86
|
+
uri = T.unsafe(URI::Generic).from_path(
|
87
|
+
path: entry.file_path,
|
88
|
+
fragment: "L#{loc.start_line},#{loc.start_column + 1}-#{loc.end_line},#{loc.end_column + 1}"
|
89
|
+
)
|
90
|
+
@response_builder << Interface::Location.new(
|
91
|
+
uri: uri,
|
92
|
+
range: range_from_location(entry.location)
|
93
|
+
)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -33,7 +33,7 @@ module RubyLsp
|
|
33
33
|
end
|
34
34
|
|
35
35
|
sig { params(node: T.any(Prism::StringNode, Prism::SymbolNode)).void }
|
36
|
-
def handle_prerequisite(node) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
36
|
+
def handle_prerequisite(node) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
37
37
|
call_node_name = @node_context.call_node&.name
|
38
38
|
return unless call_node_name == :task
|
39
39
|
|
@@ -58,7 +58,7 @@ module RubyLsp
|
|
58
58
|
return unless name == v.value
|
59
59
|
when Prism::ArrayNode
|
60
60
|
return unless v.elements.find do |node|
|
61
|
-
name == case node
|
61
|
+
name == case node # rubocop:disable Metrics/BlockNesting
|
62
62
|
when Prism::StringNode
|
63
63
|
node.content
|
64
64
|
when Prism::SymbolNode
|
metadata
CHANGED
@@ -1,14 +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
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-27 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: ruby-lsp
|
@@ -36,11 +35,12 @@ files:
|
|
36
35
|
- README.md
|
37
36
|
- Rakefile
|
38
37
|
- img/dependency_task_links_on_hover.png
|
39
|
-
- lib/ruby/lsp/rake.rb
|
40
|
-
- lib/ruby/lsp/rake/version.rb
|
41
38
|
- lib/ruby_lsp/ruby_lsp_rake/addon.rb
|
39
|
+
- lib/ruby_lsp/ruby_lsp_rake/code_lens.rb
|
40
|
+
- lib/ruby_lsp/ruby_lsp_rake/definition.rb
|
42
41
|
- lib/ruby_lsp/ruby_lsp_rake/hover.rb
|
43
42
|
- lib/ruby_lsp/ruby_lsp_rake/indexing_enhancement.rb
|
43
|
+
- lib/ruby_lsp_rake/version.rb
|
44
44
|
- sig/ruby/lsp/rake.rbs
|
45
45
|
- sorbet/config
|
46
46
|
- sorbet/rbi/annotations/.gitattributes
|
@@ -84,7 +84,6 @@ metadata:
|
|
84
84
|
homepage_uri: https://github.com/kozy4324/ruby-lsp-rake
|
85
85
|
source_code_uri: https://github.com/kozy4324/ruby-lsp-rake
|
86
86
|
changelog_uri: https://github.com/kozy4324/ruby-lsp-rake/releases
|
87
|
-
post_install_message:
|
88
87
|
rdoc_options: []
|
89
88
|
require_paths:
|
90
89
|
- lib
|
@@ -99,8 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
98
|
- !ruby/object:Gem::Version
|
100
99
|
version: '0'
|
101
100
|
requirements: []
|
102
|
-
rubygems_version: 3.
|
103
|
-
signing_key:
|
101
|
+
rubygems_version: 3.6.2
|
104
102
|
specification_version: 4
|
105
103
|
summary: A Ruby LSP addon for Rake
|
106
104
|
test_files: []
|