diff --git a/spec/compiler/formatter/formatter_spec.cr b/spec/compiler/formatter/formatter_spec.cr index 0a7695f4ead6..b8e0d524ac79 100644 --- a/spec/compiler/formatter/formatter_spec.cr +++ b/spec/compiler/formatter/formatter_spec.cr @@ -2857,6 +2857,14 @@ describe Crystal::Formatter do def baz; end CRYSTAL + # 15180 + assert_format <<-CRYSTAL + x = uninitialized Foo + {% begin %} + x = foo(x) + {% end %} + CRYSTAL + # CVE-2021-42574 describe "Unicode bi-directional control characters" do ['\u202A', '\u202B', '\u202C', '\u202D', '\u202E', '\u2066', '\u2067', '\u2068', '\u2069'].each do |char| diff --git a/src/compiler/crystal/tools/formatter.cr b/src/compiler/crystal/tools/formatter.cr index 9c036faa4b9e..dcd7be66df08 100644 --- a/src/compiler/crystal/tools/formatter.cr +++ b/src/compiler/crystal/tools/formatter.cr @@ -3657,7 +3657,11 @@ module Crystal end def visit(node : UninitializedVar) - accept node.var + var = node.var + + @vars.last.add var.name if var.is_a?(Var) + + accept var skip_space_or_newline write_token " ", :OP_EQ, " " skip_space_or_newline