use darklua_core::rules::Rule; test_rule_with_tokens!( append_text_comment_start, json5::from_str::>(r#"{ rule: 'append_text_comment', text: 'hello', }"#).unwrap(), empty_do("do end") => "-- hello\ndo end", local_assign("local a") => "-- hello\nlocal a", local_assign_with_value("local var = true") => "-- hello\nlocal var = true", assign_variable("var = true") => "-- hello\nvar = true", function_call("fn()") => "-- hello\nfn()", function_call_field("module.fn()") => "-- hello\nmodule.fn()", function_call_method("object:fn()") => "-- hello\nobject:fn()", compound_assign("var += 1") => "-- hello\nvar += 1", function_statement("function fn() end") => "-- hello\nfunction fn() end", generic_statement("for k, v in {} do end") => "-- hello\nfor k, v in {} do end", if_statement("if condition then end") => "-- hello\nif condition then end", local_function("local function fn() end") => "-- hello\nlocal function fn() end", numeric_for_statement("for i = 1, 10 do end") => "-- hello\nfor i = 1, 10 do end", repeat_statement("repeat until condition") => "-- hello\nrepeat until condition", while_statement("while condition do end") => "-- hello\nwhile condition do end", type_declaration("type Name = string") => "-- hello\ntype Name = string", exported_type_declaration("export type Name = string") => "-- hello\nexport type Name = string", break_statement("break") => "-- hello\nbreak", continue_statement("continue") => "-- hello\ncontinue", empty_return_statement("return") => "-- hello\nreturn", return_one_value_statement("return 1") => "-- hello\nreturn 1", ); test_rule_with_tokens!( append_text_comment_multiline, json5::from_str::>(r#"{ rule: 'append_text_comment', text: '1\n2', }"#).unwrap(), empty_do("do end") => "--[[\n1\n2\n]]\ndo end", ); test_rule_without_effects!( json5::from_str::>( r#"{ rule: 'append_text_comment', text: '', }"# ) .unwrap(), before_local_function("local function foo() foo() end"), before_empty_ast(""), ); test_rule_without_effects!( json5::from_str::>( r#"{ rule: 'append_text_comment', text: '', location: 'end', }"# ) .unwrap(), after_local_function("local function foo() end"), after_empty_ast(""), ); #[test] fn deserialize_from_object_notation() { json5::from_str::>( r#"{ rule: 'append_text_comment', text: 'content', }"#, ) .unwrap(); } #[test] fn deserialize_from_string_fails() { let err = json5::from_str::>(r#"'append_text_comment'"#).unwrap_err(); pretty_assertions::assert_eq!("missing one field from `text` and `file`", err.to_string()) }