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 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