# typed: strict

module Prism::Reflection end

class Prism::Reflection::Field

sig { params(name: Symbol).void }
def initialize(name); end

sig { returns(Symbol) }
def name; end

end

class Prism::Reflection::NodeField < Prism::Reflection::Field end

class Prism::Reflection::OptionalNodeField < Prism::Reflection::Field end

class Prism::Reflection::NodeListField < Prism::Reflection::Field end

class Prism::Reflection::ConstantField < Prism::Reflection::Field end

class Prism::Reflection::OptionalConstantField < Prism::Reflection::Field end

class Prism::Reflection::ConstantListField < Prism::Reflection::Field end

class Prism::Reflection::StringField < Prism::Reflection::Field end

class Prism::Reflection::LocationField < Prism::Reflection::Field end

class Prism::Reflection::OptionalLocationField < Prism::Reflection::Field end

class Prism::Reflection::IntegerField < Prism::Reflection::Field end

class Prism::Reflection::FloatField < Prism::Reflection::Field end

class Prism::Reflection::FlagsField < Prism::Reflection::Field

sig { params(name: Symbol, flags: T::Array[Symbol]).void }
def initialize(name, flags); end

sig { returns(T::Array[Symbol]) }
def flags; end

end

module Prism::Reflection

sig { params(node: T.class_of(Prism::Node)).returns(T::Array[Prism::Reflection::Field]) }
def self.fields_for(node); end

end