From 2e2c7d47031e6ade0d67caeaa9cb77d76e2da6dc Mon Sep 17 00:00:00 2001 From: vkatsuba Date: Fri, 7 May 2021 00:12:25 +0300 Subject: [PATCH] Fixes #81: add parentheses to macros inside of binaries --- src/formatters/default_formatter.erl | 12 +++++++++--- test_app/after/src/macros_in_binary.erl | 9 +++++++++ test_app/src/macros_in_binary.erl | 9 +++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 test_app/after/src/macros_in_binary.erl create mode 100644 test_app/src/macros_in_binary.erl diff --git a/src/formatters/default_formatter.erl b/src/formatters/default_formatter.erl index 759d4d1..1fbafe3 100644 --- a/src/formatters/default_formatter.erl +++ b/src/formatters/default_formatter.erl @@ -70,7 +70,8 @@ truncate_strings = false :: boolean(), parenthesize_infix_operations = false :: boolean(), empty_lines = [] :: [pos_integer()], - encoding = epp:default_encoding() :: epp:source_encoding()}). + encoding = epp:default_encoding() :: epp:source_encoding(), + in = undefined :: atom()}). set_prec(Ctxt, Prec) -> Ctxt#ctxt{prec = Prec}. % used internally @@ -489,7 +490,7 @@ lay_no_comments(Node, Ctxt) -> beside(D, lay_text_float(".")); binary -> Ctxt1 = reset_prec(Ctxt), - Es = lay_items(erl_syntax:binary_fields(Node), Ctxt1, fun lay/2), + Es = lay_items(erl_syntax:binary_fields(Node), Ctxt1#ctxt{in = binary}, fun lay/2), beside(lay_text_float("<<"), beside(Es, lay_text_float(">>"))); binary_field -> Ctxt1 = set_prec(Ctxt, max_prec()), @@ -601,7 +602,12 @@ lay_no_comments(Node, Ctxt) -> Args -> lay_application(N, Args, Ctxt1) end, - D1 = beside(lay_text_float("?"), D), + D1 = case Ctxt1#ctxt.in of + binary -> + beside(lay_text_float("(?"), beside(D, lay_text_float(")"))); + _ -> + beside(lay_text_float("?"), D) + end, maybe_parentheses(D1, 0, Ctxt1); parentheses -> D = lay(erl_syntax:parentheses_body(Node), reset_prec(Ctxt)), diff --git a/test_app/after/src/macros_in_binary.erl b/test_app/after/src/macros_in_binary.erl new file mode 100644 index 0000000..2385b5c --- /dev/null +++ b/test_app/after/src/macros_in_binary.erl @@ -0,0 +1,9 @@ +-module(macros_in_binary). + +-export([chunkify/1]). + +-define(CHUNK_SIZE, 65535 - 1). +-define(CONCAT(A, B), <>). + +chunkify(<>) -> + {<<(?CONCAT(Binary, Rest))/binary>>, <<(?CONCAT(Binary, Rest))/binary>>}. diff --git a/test_app/src/macros_in_binary.erl b/test_app/src/macros_in_binary.erl new file mode 100644 index 0000000..9437582 --- /dev/null +++ b/test_app/src/macros_in_binary.erl @@ -0,0 +1,9 @@ +-module(macros_in_binary). + +-export([chunkify/1]). + +-define(CHUNK_SIZE, 65535 - 1). +-define(CONCAT(A, B), <>). + +chunkify(<>) -> + {<<(?CONCAT(Binary, Rest))/binary>>, <>}.