module Prism

module Reflection
  class Field
    attr_reader name: Symbol

    def initialize: (Symbol name) -> void
  end

  class NodeField < Field
  end

  class OptionalNodeField < Field
  end

  class NodeListField < Field
  end

  class ConstantField < Field
  end

  class OptionalConstantField < Field
  end

  class ConstantListField < Field
  end

  class StringField < Field
  end

  class LocationField < Field
  end

  class OptionalLocationField < Field
  end

  class IntegerField < Field
  end

  class FloatField < Field
  end

  class FlagsField < Field
    attr_reader flags: Array[Symbol]

    def initialize: (Symbol name, Array[Symbol] flags) -> void
  end

  def self.fields_for: (singleton(Node) node) -> Array[Field]
end

end