fn f()

in starlark/src/syntax/validate.rs [303:339]


        fn f(
            codemap: &CodeMap,
            dialect: &Dialect,
            stmt: &AstStmt,
            top_level: bool,
            inside_for: bool,
            inside_def: bool,
        ) -> anyhow::Result<()> {
            let err = |x| Err(Diagnostic::new(x, stmt.span, codemap));

            match &stmt.node {
                Stmt::Def(_, _, _, body, _payload) => f(codemap, dialect, body, false, false, true),
                Stmt::For(_, box (_, body)) => {
                    if top_level && !dialect.enable_top_level_stmt {
                        err(ValidateError::NoTopLevelFor)
                    } else {
                        f(codemap, dialect, body, false, true, inside_def)
                    }
                }
                Stmt::If(..) | Stmt::IfElse(..) => {
                    if top_level && !dialect.enable_top_level_stmt {
                        err(ValidateError::NoTopLevelIf)
                    } else {
                        stmt.node.visit_stmt_result(|x| {
                            f(codemap, dialect, x, false, inside_for, inside_def)
                        })
                    }
                }
                Stmt::Break if !inside_for => err(ValidateError::BreakOutsideLoop),
                Stmt::Continue if !inside_for => err(ValidateError::ContinueOutsideLoop),
                Stmt::Return(_) if !inside_def => err(ValidateError::ReturnOutsideDef),
                Stmt::Load(..) if !top_level => err(ValidateError::LoadNotTop),
                _ => stmt.node.visit_stmt_result(|x| {
                    f(codemap, dialect, x, top_level, inside_for, inside_def)
                }),
            }
        }