luau-syntax 0.732.0

Luau lexer, parser, AST, CST, and source utilities
Documentation
use crate::pretty_printer::with_parse;
use luau_common::ByteSlice;
use luau_common::flags;
use luau_syntax::parser::ParseOptions;
use luau_syntax::pretty_printer::{pretty_print, pretty_print_with_types};

// PrettyPrinter.test.cpp: fuzzer_class
#[test]
fn fuzzer_class() {
    let source = r" class l0 end ";
    let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);

    with_parse(
        source,
        ParseOptions::default().with_declaration_syntax(true),
        |result| {
            pretty_print_with_types(result.root);
        },
    );
}

// PrettyPrinter.test.cpp: simple_class_example
#[test]
fn simple_class_example() {
    let source = r#"
class Point
    public x: number
    public y: number
    function length(self)
        return 100
    end
    function new()
        return Point { x = 0, y = 0 }
    end
end
    "#;
    let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
    with_parse(
        source,
        ParseOptions::default()
            .with_comment_capture(true)
            .with_declaration_syntax(true),
        |_| {
            assert_eq!(
                pretty_print(
                    source.as_bytes(),
                    ParseOptions::default().with_declaration_syntax(true),
                    true,
                    false,
                )
                .code
                .as_bytes(),
                source.as_bytes()
            );
        },
    );
}

// PrettyPrinter.test.cpp: simple_class_inheritance
#[test]
fn simple_class_inheritance() {
    let source = r#"
class Animal
    public species: string
end

class Cat extends Animal
    public meowMult: number
end
    "#;
    let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
    assert_eq!(
        pretty_print(source, ParseOptions::default(), true, false)
            .code
            .as_bytes(),
        source.as_bytes()
    );
}

// PrettyPrinter.test.cpp: remixed_simple_class
#[test]
fn remixed_simple_class() {
    let source = r#"
class Point
    function length(self)
        return 100
    end
    public x
    function new(): Point
        return Point { x = 0, y = 0 }
    end
    public y
end
    "#;
    let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
    with_parse(
        source,
        ParseOptions::default()
            .with_comment_capture(true)
            .with_declaration_syntax(true),
        |_| {
            assert_eq!(
                pretty_print(
                    source.as_bytes(),
                    ParseOptions::default().with_declaration_syntax(true),
                    true,
                    false,
                )
                .code
                .as_bytes(),
                source.as_bytes()
            );
        },
    );
}

// PrettyPrinter.test.cpp: simple_class_with_public_functions
#[test]
fn simple_class_with_public_functions() {
    let source = r#"
class Point
    public function length(self)
        return 100
    end
    public x
    public function new(): Point
        return Point { x = 0, y = 0 }
    end
    public y
end
    "#;
    let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
    with_parse(
        source,
        ParseOptions::default()
            .with_comment_capture(true)
            .with_declaration_syntax(true),
        |_| {
            assert_eq!(
                pretty_print(
                    source.as_bytes(),
                    ParseOptions::default().with_declaration_syntax(true),
                    true,
                    false,
                )
                .code
                .as_bytes(),
                source.as_bytes()
            );
        },
    );
}