Sha256: aea3033f9d08b5f6d290b173cf61e2a65f7a3d5f0383c01152afefec77daa1b1

Contents?: true

Size: 1.67 KB

Versions: 4

Compression:

Stored size: 1.67 KB

Contents

# typed: strict
# frozen_string_literal: true

module RubyLsp
  module RSpec
    class IndexingEnhancement < RubyIndexer::Enhancement
      extend T::Sig

      sig { override.params(node: Prism::CallNode).void }
      def on_call_node_enter(node)
        return if node.receiver

        name = node.name

        case name
        when :let, :let!
          block_node = node.block
          return unless block_node

          arguments = node.arguments
          return unless arguments

          return if arguments.arguments.count != 1

          method_name_node = T.must(arguments.arguments.first)

          method_name = case method_name_node
          when Prism::StringNode
            method_name_node.slice
          when Prism::SymbolNode
            method_name_node.unescaped
          end

          return unless method_name

          @listener.add_method(method_name, block_node.location, [RubyIndexer::Entry::Signature.new([])])
        when :subject, :subject!
          block_node = node.block
          return unless block_node

          arguments = node.arguments

          if arguments && arguments.arguments.count == 1
            method_name_node = T.must(arguments.arguments.first)
          end

          method_name = if method_name_node
            case method_name_node
            when Prism::StringNode
              method_name_node.slice
            when Prism::SymbolNode
              method_name_node.unescaped
            end
          else
            "subject"
          end

          return unless method_name

          @listener.add_method(method_name, block_node.location, [RubyIndexer::Entry::Signature.new([])])
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ruby-lsp-rspec-0.1.22 lib/ruby_lsp/ruby_lsp_rspec/indexing_enhancement.rb
ruby-lsp-rspec-0.1.21 lib/ruby_lsp/ruby_lsp_rspec/indexing_enhancement.rb
ruby-lsp-rspec-0.1.20 lib/ruby_lsp/ruby_lsp_rspec/indexing_enhancement.rb
ruby-lsp-rspec-0.1.19 lib/ruby_lsp/ruby_lsp_rspec/indexing_enhancement.rb