Sha256: 4e5ccd04e0b2ccfd8c74999e6b38c0c76a37f05f9bb7185d274fd0fff1bdb58b
Contents?: true
Size: 1.86 KB
Versions: 3
Compression:
Stored size: 1.86 KB
Contents
module Steep module Services module HoverProvider class RBS TypeAliasContent = Struct.new(:location, :decl, keyword_init: true) ClassContent = Struct.new(:location, :decl, keyword_init: true) InterfaceContent = Struct.new(:location, :decl, keyword_init: true) attr_reader :service def initialize(service:) @service = service end def project service.project end def content_for(target:, path:, line:, column:) service = self.service.signature_services[target.name] _, decls = service.latest_env.buffers_decls.find do |buffer, _| Pathname(buffer.name) == path end return if decls.nil? loc_key, path = ::RBS::Locator.new(decls: decls).find2(line: line, column: column) || return head, *tail = path case head when ::RBS::Types::Alias alias_decl = service.latest_env.alias_decls[head.name]&.decl or raise TypeAliasContent.new( location: head.location, decl: alias_decl ) when ::RBS::Types::ClassInstance, ::RBS::Types::ClassSingleton if loc_key == :name env = service.latest_env class_decl = env.class_decls[head.name]&.decls[0]&.decl or raise location = head.location[:name] ClassContent.new( location: location, decl: class_decl ) end when ::RBS::Types::Interface env = service.latest_env interface_decl = env.interface_decls[head.name]&.decl or raise location = head.location[:name] InterfaceContent.new( location: location, decl: interface_decl ) end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
steep-1.0.0 | lib/steep/services/hover_provider/rbs.rb |
steep-0.52.2 | lib/steep/services/hover_provider/rbs.rb |
steep-0.52.1 | lib/steep/services/hover_provider/rbs.rb |