pub enum Stmt {
/// An assignment, such as `x = 1`
Assignment(Assignment),
/// A do block, `do end`
Do(Do),
/// A function call on its own, such as `call()`
FunctionCall(FunctionCall),
/// A function declaration, such as `function x() end`
FunctionDeclaration(FunctionDeclaration),
/// A generic for loop, such as `for index, value in pairs(list) do end`
GenericFor(GenericFor),
/// An if statement
If(If),
/// A local assignment, such as `local x = 1`
LocalAssignment(LocalAssignment),
/// A local function declaration, such as `local function x() end`
LocalFunction(LocalFunction),
/// A numeric for loop, such as `for index = 1, 10 do end`
NumericFor(NumericFor),
/// A repeat loop
Repeat(Repeat),
/// A while loop
While(While),
/// A compound assignment, such as `+=` (Luau/CFX Lua only)
#[cfg(any(feature = "luau", feature = "cfxlua"))]
CompoundAssignment(CompoundAssignment),
/// An exported type declaration, such as `export type Meters = number` (Luau only)
#[cfg(feature = "luau")]
ExportedTypeDeclaration(ExportedTypeDeclaration),
/// A type declaration, such as `type Meters = number` (Luau only)
#[cfg(feature = "luau")]
TypeDeclaration(TypeDeclaration),
/// An exported type function (Luau only)
#[cfg(feature = "luau")]
ExportedTypeFunction(ExportedTypeFunction),
/// A type function (Luau only)
#[cfg(feature = "luau")]
TypeFunction(TypeFunction),
/// A goto statement, such as `goto label` (Lua 5.2/LuaJIT only)
#[cfg(any(feature = "lua52", feature = "luajit"))]
Goto(Goto),
/// A label, such as `::label::` (Lua 5.2/LuaJIT only)
#[cfg(any(feature = "lua52", feature = "luajit"))]
Label(Label),
}