ruby-lsp-rake 0.1.3 → 0.1.5
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 +4 -4
- data/Rakefile +22 -0
- data/img/dependency_task_links_on_hover.png +0 -0
- data/lib/ruby/lsp/rake/version.rb +1 -1
- data/lib/ruby_lsp/ruby_lsp_rake/addon.rb +15 -2
- data/lib/ruby_lsp/ruby_lsp_rake/hover.rb +42 -3
- data/lib/ruby_lsp/ruby_lsp_rake/indexing_enhancement.rb +31 -10
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5cdf5ce3b286b6f1824bcff07f386aff744fee063debf045a33f0a104ccb9a58
         | 
| 4 | 
            +
              data.tar.gz: 0f61d107e42ac8412f3f4ac53425c6d8dc0e4c90e11bcab050ee8a1aaa80719c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 44d24d9356c0893323402638a91d564562c66728233445901c32c0502aa6fbfa95ff5ed1cf6b6f94d80031e4f180a2b2b578e96080dd68f9c9c53f14e5b02358
         | 
| 7 | 
            +
              data.tar.gz: 98bb06c07335e47d6064101ed3761299215b3f25a5c090006931a257a74e3eb1ba4f5fbf7ad7f916779cafaf49b786fc266756abe14666de1a4140c16a9397f2
         | 
    
        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
         | 
| Binary file | 
| @@ -8,21 +8,34 @@ require_relative "hover" | |
| 8 8 | 
             
            module RubyLsp
         | 
| 9 9 | 
             
              module Rake
         | 
| 10 10 | 
             
                class Addon < ::RubyLsp::Addon # rubocop:disable Style/Documentation
         | 
| 11 | 
            -
                   | 
| 11 | 
            +
                  extend T::Sig
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  sig { override.params(global_state: GlobalState, outgoing_queue: Thread::Queue).void }
         | 
| 14 | 
            +
                  def activate(global_state, outgoing_queue) # rubocop:disable Lint/UnusedMethodArgument
         | 
| 12 15 | 
             
                    @index = global_state.index
         | 
| 13 | 
            -
                    @index.configuration.apply_config({ "included_patterns" => ["**/Rakefile"] })
         | 
| 16 | 
            +
                    @index.configuration.apply_config({ "included_patterns" => ["**/Rakefile", "lib/../Rakefile"] })
         | 
| 14 17 | 
             
                  end
         | 
| 15 18 |  | 
| 19 | 
            +
                  sig { override.void }
         | 
| 16 20 | 
             
                  def deactivate; end
         | 
| 17 21 |  | 
| 22 | 
            +
                  sig { override.returns(String) }
         | 
| 18 23 | 
             
                  def name
         | 
| 19 24 | 
             
                    "A Ruby LSP addon that adds extra editor functionality for Rake"
         | 
| 20 25 | 
             
                  end
         | 
| 21 26 |  | 
| 27 | 
            +
                  sig { override.returns(String) }
         | 
| 22 28 | 
             
                  def version
         | 
| 23 29 | 
             
                    ::Ruby::Lsp::Rake::VERSION
         | 
| 24 30 | 
             
                  end
         | 
| 25 31 |  | 
| 32 | 
            +
                  sig do
         | 
| 33 | 
            +
                    override.params(
         | 
| 34 | 
            +
                      response_builder: ResponseBuilders::Hover,
         | 
| 35 | 
            +
                      node_context: NodeContext,
         | 
| 36 | 
            +
                      dispatcher: Prism::Dispatcher
         | 
| 37 | 
            +
                    ).void
         | 
| 38 | 
            +
                  end
         | 
| 26 39 | 
             
                  def create_hover_listener(response_builder, node_context, dispatcher)
         | 
| 27 40 | 
             
                    Hover.new(response_builder, node_context, dispatcher, @index)
         | 
| 28 41 | 
             
                  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,14 +22,17 @@ 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 |  | 
| 35 | 
            +
                  sig { params(node: T.any(Prism::StringNode, Prism::SymbolNode)).void }
         | 
| 24 36 | 
             
                  def handle_prerequisite(node) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
         | 
| 25 37 | 
             
                    call_node_name = @node_context.call_node&.name
         | 
| 26 38 | 
             
                    return unless call_node_name == :task
         | 
| @@ -32,13 +44,40 @@ module RubyLsp | |
| 32 44 | 
             
                             node.value
         | 
| 33 45 | 
             
                           end
         | 
| 34 46 |  | 
| 35 | 
            -
                     | 
| 47 | 
            +
                    arg = @node_context.call_node&.arguments&.arguments&.first
         | 
| 48 | 
            +
                    case arg
         | 
| 49 | 
            +
                    when Prism::KeywordHashNode
         | 
| 50 | 
            +
                      kh = arg.child_nodes.first
         | 
| 51 | 
            +
                      case kh
         | 
| 52 | 
            +
                      when Prism::AssocNode
         | 
| 53 | 
            +
                        v = kh.value
         | 
| 54 | 
            +
                        case v
         | 
| 55 | 
            +
                        when Prism::StringNode
         | 
| 56 | 
            +
                          return unless name == v.content
         | 
| 57 | 
            +
                        when Prism::SymbolNode
         | 
| 58 | 
            +
                          return unless name == v.value
         | 
| 59 | 
            +
                        when Prism::ArrayNode
         | 
| 60 | 
            +
                          return unless v.elements.find do |node|
         | 
| 61 | 
            +
                            name == case node
         | 
| 62 | 
            +
                                    when Prism::StringNode
         | 
| 63 | 
            +
                                      node.content
         | 
| 64 | 
            +
                                    when Prism::SymbolNode
         | 
| 65 | 
            +
                                      node.value
         | 
| 66 | 
            +
                                    end
         | 
| 67 | 
            +
                          end
         | 
| 68 | 
            +
                        end
         | 
| 69 | 
            +
                      end
         | 
| 70 | 
            +
                    else
         | 
| 71 | 
            +
                      return
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    task_name = "task:#{name}"
         | 
| 36 75 | 
             
                    return unless @index.indexed? task_name
         | 
| 37 76 |  | 
| 38 77 | 
             
                    # refer to: https://github.com/Shopify/ruby-lsp/blob/896617a0c5f7a22ebe12912a481bf1b59db14c12/lib/ruby_lsp/requests/support/common.rb#L83
         | 
| 39 78 | 
             
                    content = +""
         | 
| 40 79 | 
             
                    entries = @index[task_name]
         | 
| 41 | 
            -
                    links = entries | 
| 80 | 
            +
                    links = entries&.map do |entry|
         | 
| 42 81 | 
             
                      loc = entry.location
         | 
| 43 82 | 
             
                      uri = T.unsafe(URI::Generic).from_path(
         | 
| 44 83 | 
             
                        path: entry.file_path,
         | 
| @@ -48,7 +87,7 @@ module RubyLsp | |
| 48 87 | 
             
                      "[#{entry.file_name}](#{uri})"
         | 
| 49 88 | 
             
                    end
         | 
| 50 89 | 
             
                    @response_builder.push("```\nrake #{name}\n```", category: :title)
         | 
| 51 | 
            -
                    @response_builder.push("Definitions: #{links | 
| 90 | 
            +
                    @response_builder.push("Definitions: #{links&.join(" | ")}", category: :links)
         | 
| 52 91 | 
             
                    @response_builder.push(content, category: :documentation)
         | 
| 53 92 | 
             
                  end
         | 
| 54 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,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ruby-lsp-rake
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Koji NAKAMURA
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-12- | 
| 11 | 
            +
            date: 2024-12-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: ruby-lsp
         |