# typed: true
class Module; include T::Sig; end

class Parent
  extend T::Helpers
  abstract!

  sig { overridable.void }
  def example1; end

  sig { overridable.void }
  def example2; end

  sig { abstract.void }
  def example_abstract; end

  sig { overridable.void }
  def self.example_on_self; end
end

class Child < Parent # error: Missing definition for abstract method
  sig { overridable.void }
  def example_same_owner_DO_NOT_SUGGEST; end

  def ex
    #   ^ apply-completion: [A] item: 0
    #   ^ apply-completion: [B] item: 2
# ^^^ error: Hint: this "def" token

  sig { void }
  def example_has_sig
    #                ^ completion: (nothing)
# ^^^ error: Hint: this "def" token
# ^^^ error: Hint: this "def" token

  def exa
    #    ^ apply-completion: [C] item: 0
    puts('Hello, world!')
  end

  def self.exam
    #          ^ apply-completion: [D] item: 0
# ^^^ error: Hint: this "def" token
# ^^^ error: Hint: this "def" token
# ^^^ error: Hint: this "def" token
# ^^^ error: Hint: this "def" token
end


puts # error: unexpected token "end of file"
