ruby-lsp-rake 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +22 -0
- data/lib/ruby_lsp/ruby_lsp_rake/addon.rb +30 -2
- data/lib/ruby_lsp/ruby_lsp_rake/definition.rb +98 -0
- data/lib/ruby_lsp/ruby_lsp_rake/hover.rb +17 -5
- data/lib/ruby_lsp/ruby_lsp_rake/indexing_enhancement.rb +31 -10
- data/lib/ruby_lsp_rake/version.rb +8 -0
- metadata +5 -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: 5eecc86f8a92c3d2f81d686d722f17d22af64985b63ca6ef2db1ca8fc604d773
|
4
|
+
data.tar.gz: 4f15df1db846b1f43063cffc2a32326ea515073993d3497160a21cd9a7f15571
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9d2bf49d58f3f86bbb9c64617f62b4b982c9d39dff124b3d82b2ffdd0647ae6a7ac47d2b7d13cca9bd5179308d64bed8e0c3df07b644990af0573ab2c6a16b9
|
7
|
+
data.tar.gz: 4a8c7bce406a07a7641f98efb9b73ea516cc33bf38278253f2674f3fc68381b101e6572eb32ffb3067935c59470f5bd44b62e4952b32adfb7717079f33ac53e6
|
data/Rakefile
CHANGED
@@ -17,3 +17,25 @@ namespace :srb do
|
|
17
17
|
sh "bundle exec srb tc"
|
18
18
|
end
|
19
19
|
end
|
20
|
+
|
21
|
+
task aaa: %i[bbb ccc:ddd eee:fff]
|
22
|
+
|
23
|
+
task :bbb do
|
24
|
+
puts :bbb
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :ccc do
|
28
|
+
task ddd: :eee do
|
29
|
+
puts "ccc:ddd"
|
30
|
+
end
|
31
|
+
|
32
|
+
task :eee do
|
33
|
+
puts "ccc:eee"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
namespace :eee do
|
38
|
+
task :fff do
|
39
|
+
puts "eee:fff"
|
40
|
+
end
|
41
|
+
end
|
@@ -4,28 +4,56 @@
|
|
4
4
|
require "ruby_lsp/addon"
|
5
5
|
require_relative "indexing_enhancement"
|
6
6
|
require_relative "hover"
|
7
|
+
require_relative "definition"
|
7
8
|
|
8
9
|
module RubyLsp
|
9
10
|
module Rake
|
10
11
|
class Addon < ::RubyLsp::Addon # rubocop:disable Style/Documentation
|
11
|
-
|
12
|
+
extend T::Sig
|
13
|
+
|
14
|
+
sig { override.params(global_state: GlobalState, outgoing_queue: Thread::Queue).void }
|
15
|
+
def activate(global_state, outgoing_queue) # rubocop:disable Lint/UnusedMethodArgument
|
12
16
|
@index = global_state.index
|
13
17
|
@index.configuration.apply_config({ "included_patterns" => ["**/Rakefile", "lib/../Rakefile"] })
|
14
18
|
end
|
15
19
|
|
20
|
+
sig { override.void }
|
16
21
|
def deactivate; end
|
17
22
|
|
23
|
+
sig { override.returns(String) }
|
18
24
|
def name
|
19
25
|
"A Ruby LSP addon that adds extra editor functionality for Rake"
|
20
26
|
end
|
21
27
|
|
28
|
+
sig { override.returns(String) }
|
22
29
|
def version
|
23
|
-
::
|
30
|
+
::RubyLsp::Rake::VERSION
|
24
31
|
end
|
25
32
|
|
33
|
+
sig do
|
34
|
+
override.params(
|
35
|
+
response_builder: ResponseBuilders::Hover,
|
36
|
+
node_context: NodeContext,
|
37
|
+
dispatcher: Prism::Dispatcher
|
38
|
+
).void
|
39
|
+
end
|
26
40
|
def create_hover_listener(response_builder, node_context, dispatcher)
|
27
41
|
Hover.new(response_builder, node_context, dispatcher, @index)
|
28
42
|
end
|
43
|
+
|
44
|
+
sig do
|
45
|
+
override.params(
|
46
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[T.any(
|
47
|
+
Interface::Location, Interface::LocationLink
|
48
|
+
)],
|
49
|
+
_uri: URI::Generic,
|
50
|
+
node_context: NodeContext,
|
51
|
+
dispatcher: Prism::Dispatcher
|
52
|
+
).void
|
53
|
+
end
|
54
|
+
def create_definition_listener(response_builder, _uri, node_context, dispatcher)
|
55
|
+
Definition.new(response_builder, node_context, @index, dispatcher)
|
56
|
+
end
|
29
57
|
end
|
30
58
|
end
|
31
59
|
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 = @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
|
@@ -4,8 +4,17 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Rake
|
6
6
|
class Hover # rubocop:disable Style/Documentation
|
7
|
+
extend T::Sig
|
7
8
|
include Requests::Support::Common
|
8
9
|
|
10
|
+
sig do
|
11
|
+
override.params(
|
12
|
+
response_builder: ResponseBuilders::Hover,
|
13
|
+
node_context: NodeContext,
|
14
|
+
dispatcher: Prism::Dispatcher,
|
15
|
+
index: RubyIndexer::Index
|
16
|
+
).void
|
17
|
+
end
|
9
18
|
def initialize(response_builder, node_context, dispatcher, index)
|
10
19
|
@response_builder = response_builder
|
11
20
|
@node_context = node_context
|
@@ -13,15 +22,18 @@ module RubyLsp
|
|
13
22
|
@index = index
|
14
23
|
end
|
15
24
|
|
25
|
+
sig { params(node: Prism::StringNode).void }
|
16
26
|
def on_string_node_enter(node)
|
17
27
|
handle_prerequisite(node)
|
18
28
|
end
|
19
29
|
|
30
|
+
sig { params(node: Prism::SymbolNode).void }
|
20
31
|
def on_symbol_node_enter(node)
|
21
32
|
handle_prerequisite(node)
|
22
33
|
end
|
23
34
|
|
24
|
-
|
35
|
+
sig { params(node: T.any(Prism::StringNode, Prism::SymbolNode)).void }
|
36
|
+
def handle_prerequisite(node) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
25
37
|
call_node_name = @node_context.call_node&.name
|
26
38
|
return unless call_node_name == :task
|
27
39
|
|
@@ -32,7 +44,7 @@ module RubyLsp
|
|
32
44
|
node.value
|
33
45
|
end
|
34
46
|
|
35
|
-
arg = @node_context.call_node
|
47
|
+
arg = @node_context.call_node&.arguments&.arguments&.first
|
36
48
|
case arg
|
37
49
|
when Prism::KeywordHashNode
|
38
50
|
kh = arg.child_nodes.first
|
@@ -46,7 +58,7 @@ module RubyLsp
|
|
46
58
|
return unless name == v.value
|
47
59
|
when Prism::ArrayNode
|
48
60
|
return unless v.elements.find do |node|
|
49
|
-
name == case node
|
61
|
+
name == case node # rubocop:disable Metrics/BlockNesting
|
50
62
|
when Prism::StringNode
|
51
63
|
node.content
|
52
64
|
when Prism::SymbolNode
|
@@ -65,7 +77,7 @@ module RubyLsp
|
|
65
77
|
# refer to: https://github.com/Shopify/ruby-lsp/blob/896617a0c5f7a22ebe12912a481bf1b59db14c12/lib/ruby_lsp/requests/support/common.rb#L83
|
66
78
|
content = +""
|
67
79
|
entries = @index[task_name]
|
68
|
-
links = entries
|
80
|
+
links = entries&.map do |entry|
|
69
81
|
loc = entry.location
|
70
82
|
uri = T.unsafe(URI::Generic).from_path(
|
71
83
|
path: entry.file_path,
|
@@ -75,7 +87,7 @@ module RubyLsp
|
|
75
87
|
"[#{entry.file_name}](#{uri})"
|
76
88
|
end
|
77
89
|
@response_builder.push("```\nrake #{name}\n```", category: :title)
|
78
|
-
@response_builder.push("Definitions: #{links
|
90
|
+
@response_builder.push("Definitions: #{links&.join(" | ")}", category: :links)
|
79
91
|
@response_builder.push(content, category: :documentation)
|
80
92
|
end
|
81
93
|
end
|
@@ -4,13 +4,21 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Rake
|
6
6
|
class IndexingEnhancement < RubyIndexer::Enhancement # rubocop:disable Style/Documentation
|
7
|
-
|
7
|
+
extend T::Sig
|
8
8
|
|
9
|
+
sig { params(listener: RubyIndexer::DeclarationListener).void }
|
10
|
+
def initialize(listener)
|
11
|
+
super(listener)
|
12
|
+
@namespace_stack = []
|
13
|
+
@last_desc = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
sig { override.params(node: Prism::CallNode).void }
|
9
17
|
def on_call_node_enter(node) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
10
18
|
@last_desc = nil unless node.name == :task
|
11
19
|
|
12
20
|
return unless @listener.current_owner.nil?
|
13
|
-
return unless node.name == :task || node.name == :desc
|
21
|
+
return unless node.name == :task || node.name == :desc || node.name == :namespace
|
14
22
|
|
15
23
|
arguments = node.arguments&.arguments
|
16
24
|
return unless arguments
|
@@ -37,23 +45,36 @@ module RubyLsp
|
|
37
45
|
|
38
46
|
return if name.nil?
|
39
47
|
|
48
|
+
if node.name == :namespace
|
49
|
+
@namespace_stack << name
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
40
53
|
if node.name == :desc
|
41
54
|
@last_desc = name
|
42
55
|
return
|
43
56
|
end
|
44
57
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
58
|
+
ary = [*@namespace_stack, name]
|
59
|
+
(1..(ary.size)).each do |i|
|
60
|
+
@listener.add_method(
|
61
|
+
"task:#{ary[-i..].join(":")}",
|
62
|
+
node.location,
|
63
|
+
[],
|
64
|
+
comments: @last_desc
|
65
|
+
)
|
66
|
+
end
|
52
67
|
|
53
68
|
@last_desc = nil
|
54
69
|
end
|
55
70
|
|
56
|
-
|
71
|
+
sig { override.params(node: Prism::CallNode).void }
|
72
|
+
def on_call_node_leave(node)
|
73
|
+
return unless @listener.current_owner.nil?
|
74
|
+
return unless node.name == :namespace
|
75
|
+
|
76
|
+
@namespace_stack.pop
|
77
|
+
end
|
57
78
|
end
|
58
79
|
end
|
59
80
|
end
|
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.2.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-22 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: ruby-lsp
|
@@ -36,11 +35,11 @@ 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/definition.rb
|
42
40
|
- lib/ruby_lsp/ruby_lsp_rake/hover.rb
|
43
41
|
- lib/ruby_lsp/ruby_lsp_rake/indexing_enhancement.rb
|
42
|
+
- lib/ruby_lsp_rake/version.rb
|
44
43
|
- sig/ruby/lsp/rake.rbs
|
45
44
|
- sorbet/config
|
46
45
|
- sorbet/rbi/annotations/.gitattributes
|
@@ -84,7 +83,6 @@ metadata:
|
|
84
83
|
homepage_uri: https://github.com/kozy4324/ruby-lsp-rake
|
85
84
|
source_code_uri: https://github.com/kozy4324/ruby-lsp-rake
|
86
85
|
changelog_uri: https://github.com/kozy4324/ruby-lsp-rake/releases
|
87
|
-
post_install_message:
|
88
86
|
rdoc_options: []
|
89
87
|
require_paths:
|
90
88
|
- lib
|
@@ -99,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
97
|
- !ruby/object:Gem::Version
|
100
98
|
version: '0'
|
101
99
|
requirements: []
|
102
|
-
rubygems_version: 3.
|
103
|
-
signing_key:
|
100
|
+
rubygems_version: 3.6.2
|
104
101
|
specification_version: 4
|
105
102
|
summary: A Ruby LSP addon for Rake
|
106
103
|
test_files: []
|