ruby-lsp-rake 0.1.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5cdf5ce3b286b6f1824bcff07f386aff744fee063debf045a33f0a104ccb9a58
4
- data.tar.gz: 0f61d107e42ac8412f3f4ac53425c6d8dc0e4c90e11bcab050ee8a1aaa80719c
3
+ metadata.gz: 8847926c5182d4db9694d07d0372074c238b9e5f4529efeb287fbc5b52a99031
4
+ data.tar.gz: 8cddf883be530d635bdad6a3d663c44afcfa61554c44e86628fb8f296838f74c
5
5
  SHA512:
6
- metadata.gz: 44d24d9356c0893323402638a91d564562c66728233445901c32c0502aa6fbfa95ff5ed1cf6b6f94d80031e4f180a2b2b578e96080dd68f9c9c53f14e5b02358
7
- data.tar.gz: 98bb06c07335e47d6064101ed3761299215b3f25a5c090006931a257a74e3eb1ba4f5fbf7ad7f916779cafaf49b786fc266756abe14666de1a4140c16a9397f2
6
+ metadata.gz: 338cda3f5766301836692dd8122756c77725714052686d5d2fed232cc2aa0e9ad2efc2e0ad5b570b04355959fb393208d37c4b10b482aa995b5a146c140e77eb
7
+ data.tar.gz: d26821cfb522050d68cbc4be6c78577d7f269695ff47c99e2ec6e99c47c6d7adf4ae1abb700a414a3be5828d3824d3926ac85942776f50871cb20c903c3266f7
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 3.0
3
+ NewCops: disable
3
4
 
4
5
  Style/StringLiterals:
5
6
  EnforcedStyle: double_quotes
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require "rubocop/rake_task"
9
9
 
10
10
  RuboCop::RakeTask.new
11
11
 
12
- task default: %i[test rubocop]
12
+ task default: %i[test rubocop srb:tc]
13
13
 
14
14
  namespace :srb do
15
15
  desc "Run sorbet type check"
@@ -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
- ::Ruby::Lsp::Rake::VERSION
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
@@ -0,0 +1,8 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module RubyLsp
5
+ module Rake
6
+ VERSION = "0.3.0"
7
+ end
8
+ 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.1.5
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: 2024-12-25 00:00:00.000000000 Z
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.5.23
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: []
@@ -1,10 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module Ruby
5
- module Lsp
6
- module Rake
7
- VERSION = "0.1.5"
8
- end
9
- end
10
- end
data/lib/ruby/lsp/rake.rb DELETED
@@ -1,13 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- require_relative "rake/version"
5
-
6
- module Ruby
7
- module Lsp
8
- module Rake
9
- class Error < StandardError; end
10
- # Your code goes here...
11
- end
12
- end
13
- end