Module: Steep::Services::CompletionProvider

Defined in:
lib/steep/services/completion_provider.rb,
lib/steep/services/completion_provider/rbs.rb,
lib/steep/services/completion_provider/ruby.rb,
lib/steep/services/completion_provider/type_name.rb

Defined Under Namespace

Classes: RBS, Ruby, TextItem, TypeName, TypeNameItem

Constant Summary collapse

Position =
_ = Struct.new(:line, :column, keyword_init: true) do
  # @implements Position
  def -(size)
    Position.new(line: line, column: column - size)
  end
end
Range =
_ = Struct.new(:start, :end, keyword_init: true)
InstanceVariableItem =
_ = Struct.new(:identifier, :range, :type, keyword_init: true)
KeywordArgumentItem =
_ = Struct.new(:identifier, :range, keyword_init: true)
LocalVariableItem =
_ = Struct.new(:identifier, :range, :type, keyword_init: true)
ConstantItem =
_ = Struct.new(:env, :identifier, :range, :type, :full_name, keyword_init: true) do
  # @implements ConstantItem

  def class?
    env.class_entry(full_name) ? true : false
  end

  def module?
    env.module_entry(full_name) ? true : false
  end

  def comments
    case entry = env.constant_entry(full_name)
    when ::RBS::Environment::ConstantEntry
      [entry.decl.comment]
    when ::RBS::Environment::ClassEntry, ::RBS::Environment::ModuleEntry
      entry.each_decl.map do |decl|
        case decl
        when ::RBS::AST::Declarations::Base
          decl.comment
        when ::RBS::AST::Ruby::Declarations::Base
          nil
        end
      end
    when ::RBS::Environment::ClassAliasEntry, ::RBS::Environment::ModuleAliasEntry
      [entry.decl.comment]
    else
      raise
    end
  end

  def decl
    case entry = env.constant_entry(full_name)
    when ::RBS::Environment::ConstantEntry
      entry.decl
    when ::RBS::Environment::ClassEntry, ::RBS::Environment::ModuleEntry
      entry.primary_decl
    when ::RBS::Environment::ClassAliasEntry, ::RBS::Environment::ModuleAliasEntry
      entry.decl
    else
      raise
    end
  end

  def deprecated?
    if AnnotationsHelper.deprecated_type_name?(full_name, env)
      true
    else
      false
    end
  end
end
SimpleMethodNameItem =
_ = Struct.new(:identifier, :range, :receiver_type, :method_types, :method_member, :method_name, :deprecated, keyword_init: true) do
  # @implements SimpleMethodNameItem

  def comment
    case method_member
    when ::RBS::AST::Members::Base
      method_member.comment
    when ::RBS::AST::Ruby::Members::Base
      nil
    end
  end
end
ComplexMethodNameItem =
_ = Struct.new(:identifier, :range, :receiver_type, :method_types, :method_decls, keyword_init: true) do
  # @implements ComplexMethodNameItem

  def method_names
    method_definitions.keys
  end

  def method_definitions
    method_decls.each.with_object({}) do |decl, hash| #$ Hash[method_name, RBS::Definition::Method::method_member]
      method_name = defining_method_name(
        decl.method_def.defined_in,
        decl.method_name.method_name,
        decl.method_def.member
      )
      hash[method_name] = decl.method_def.member
    end
  end

  def defining_method_name(type_name, name, member)
    case member
    when ::RBS::AST::Members::MethodDefinition
      if member.instance?
        InstanceMethodName.new(type_name: type_name, method_name: name)
      else
        SingletonMethodName.new(type_name: type_name, method_name: name)
      end
    when ::RBS::AST::Members::Attribute
      if member.kind == :instance
        InstanceMethodName.new(type_name: type_name, method_name: name)
      else
        SingletonMethodName.new(type_name: type_name, method_name: name)
      end
    when ::RBS::AST::Ruby::Members::DefMember, ::RBS::AST::Ruby::Members::AttributeMember
      InstanceMethodName.new(type_name: type_name, method_name: name)
    end
  end
end
GeneratedMethodNameItem =
_ = Struct.new(:identifier, :range, :receiver_type, :method_types, keyword_init: true) do
  # @implements GeneratedMethodNameItem
end