Re: [HACKERS] Preliminary results for proposed new pgindent implementation

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [HACKERS] Preliminary results for proposed new pgindent implementation
Дата
Msg-id 10042.1497649729@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [HACKERS] Preliminary results for proposed new pgindentimplementation  (Piotr Stefaniak <postgres@piotr-stefaniak.me>)
Список pgsql-hackers
Piotr Stefaniak <postgres@piotr-stefaniak.me> writes:
> On 2017-06-16 20:11, Tom Lane wrote:
>> I assume though that Piotr wants an option to preserve that behavior.
>> I'm happy to write up a patch for bsdindent that adds a switch
>> controlling this, but is there any rhyme or reason to the way its
>> switches are named?

> I don't want to preserve the current behavior at all, but I might need
> to add an option for choosing one or the other if users of FreeBSD
> indent protest.

> I don't have a good name for it. The best I can do is -lpl ("-lp long
> lines too").  Can I see the patch?

Here's a patch.  An alternative switch name might be -lpa ("-lp always")
but I'm not set on that.

            regards, tom lane

diff -pudr indent-curr/args.c indent-lpl/args.c
--- indent-curr/args.c    2017-06-16 11:06:53.329712682 -0400
+++ indent-lpl/args.c    2017-06-16 17:43:56.473230024 -0400
@@ -125,6 +125,7 @@ struct pro {
     {"i", PRO_INT, 8, 0, &ps.ind_size},
     {"lc", PRO_INT, 0, 0, &block_comment_max_col},
     {"ldi", PRO_INT, -1, 0, &ps.local_decl_indent},
+    {"lpl", PRO_BOOL, false, ON, &lineup_to_parens_always},
     {"lp", PRO_BOOL, true, ON, &lineup_to_parens},
     {"l", PRO_INT, 78, 0, &max_col},
     {"nbacc", PRO_BOOL, false, OFF, &blanklines_around_conditional_compilation},
@@ -143,6 +144,7 @@ struct pro {
     {"nfc1", PRO_BOOL, true, OFF, &format_col1_comments},
     {"nfcb", PRO_BOOL, true, OFF, &format_block_comments},
     {"nip", PRO_BOOL, true, OFF, &ps.indent_parameters},
+    {"nlpl", PRO_BOOL, false, OFF, &lineup_to_parens_always},
     {"nlp", PRO_BOOL, true, OFF, &lineup_to_parens},
     {"npcs", PRO_BOOL, false, OFF, &proc_calls_space},
     {"npro", PRO_SPECIAL, 0, IGN, 0},
diff -pudr indent-curr/indent.1 indent-lpl/indent.1
--- indent-curr/indent.1    2017-06-16 17:18:05.697722416 -0400
+++ indent-lpl/indent.1    2017-06-16 17:26:53.203823690 -0400
@@ -74,6 +74,7 @@
 .Op Fl \&lc Ns Ar n
 .Op Fl \&ldi Ns Ar n
 .Op Fl \&lp | Fl nlp
+.Op Fl \&lpl | Fl nlpl
 .Op Fl npro
 .Op Fl P Ns Ar file
 .Op Fl pcs | Fl npcs
@@ -388,6 +389,19 @@ p1\ =\ first_procedure(second_procedure(
 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ third_procedure(p4,
 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p5));
 .Ed
+.It Fl \&lpl , nlpl
+With
+.Fl \&lpl ,
+code surrounded by parentheses in continuation lines is lined up even if it
+would extend past the right margin.
+With
+.Fl \&nlpl
+(the default), such a line that would extend past the right margin is moved
+left to keep it within the margin, if that does not require placing it to
+the left of the prevailing indentation level.
+These switches have no effect if
+.Fl nlp
+is selected.
 .It Fl npro
 Causes the profile files,
 .Sq Pa ./.indent.pro
diff -pudr indent-curr/indent.c indent-lpl/indent.c
--- indent-curr/indent.c    2017-06-13 11:53:59.474524563 -0400
+++ indent-lpl/indent.c    2017-06-16 17:29:11.924267996 -0400
@@ -160,6 +160,7 @@ main(int argc, char **argv)
 #ifdef undef
     max_col = 78;        /* -l78 */
     lineup_to_parens = 1;    /* -lp */
+    lineup_to_parens_always = 0;    /* -nlpl */
     ps.ljust_decl = 0;        /* -ndj */
     ps.com_ind = 33;        /* -c33 */
     star_comment_cont = 1;    /* -sc */
diff -pudr indent-curr/indent_globs.h indent-lpl/indent_globs.h
--- indent-curr/indent_globs.h    2017-06-16 11:06:53.329712682 -0400
+++ indent-lpl/indent_globs.h    2017-06-16 17:30:14.664826384 -0400
@@ -185,6 +185,8 @@ int         continuation_indent;/* set t
                  * code and continuation lines */
 int         lineup_to_parens;    /* if true, continued code within parens will
                  * be lined up to the open paren */
+int         lineup_to_parens_always;    /* if true, do not attempt to keep
+                     * lined-up code within the margin */
 int         Bill_Shannon;    /* true iff a blank should always be inserted
                  * after sizeof */
 int         blanklines_after_declarations_at_proctop;    /* This is vaguely
diff -pudr indent-curr/io.c indent-lpl/io.c
--- indent-curr/io.c    2017-06-13 11:53:59.475524587 -0400
+++ indent-lpl/io.c    2017-06-16 17:31:11.233230896 -0400
@@ -221,6 +221,8 @@ compute_code_target(void)
     if (!lineup_to_parens)
         target_col += continuation_indent
         * (2 * continuation_indent == ps.ind_size ? 1 : ps.paren_level);
+    else if (lineup_to_parens_always)
+        target_col = paren_target;
     else {
         int w;
         int t = paren_target;

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Euler Taveira
Дата:
Сообщение: Re: [HACKERS] Restrictions of logical replication
Следующее
От: Tom Lane
Дата:
Сообщение: Re: [HACKERS] Preliminary results for proposed new pgindent implementation