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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5eecc86f8a92c3d2f81d686d722f17d22af64985b63ca6ef2db1ca8fc604d773
4
- data.tar.gz: 4f15df1db846b1f43063cffc2a32326ea515073993d3497160a21cd9a7f15571
3
+ metadata.gz: 8847926c5182d4db9694d07d0372074c238b9e5f4529efeb287fbc5b52a99031
4
+ data.tar.gz: 8cddf883be530d635bdad6a3d663c44afcfa61554c44e86628fb8f296838f74c
5
5
  SHA512:
6
- metadata.gz: d9d2bf49d58f3f86bbb9c64617f62b4b982c9d39dff124b3d82b2ffdd0647ae6a7ac47d2b7d13cca9bd5179308d64bed8e0c3df07b644990af0573ab2c6a16b9
7
- data.tar.gz: 4a8c7bce406a07a7641f98efb9b73ea516cc33bf38278253f2674f3fc68381b101e6572eb32ffb3067935c59470f5bd44b62e4952b32adfb7717079f33ac53e6
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"
@@ -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|
@@ -3,6 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Rake
6
- VERSION = "0.2.0"
6
+ VERSION = "0.3.0"
7
7
  end
8
8
  end
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.2.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-22 00:00:00.000000000 Z
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