pgindent wishlist item

Started by Andrew Dunstanalmost 12 years ago5 messages
#1Andrew Dunstan
andrew@dunslane.net

While Bruce is working on pgindent, let me register a small wishlist
item. It would be quite useful to be able to supply extra typedefs on
the command line to supplement a typedefs file downloaded from the
buildfarm or constructed however. A concrete example: in the code I have
been recently working on, there are typedefs for Jsonb and JsonbValue.
If I run pgindent as normal on the new code these items are not treated
properly. What I had to do was take a special copy of the typedefs list
and add those two items. If we could pass a list of extra typedefs to
supplement the typedefs file that would be very useful. Then I could do
something like:

pgindent --typedef Jsonb --typedef JsonbValue
src/backend/utils/adt/jsonfuncs.c

without having to mangle a typedefs file.

This would make using pgindent nicer to use during development, since
any significant development is just about guaranteed to have some new
typedefs the buildfarm can't have.

cheers

andrew

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#1)
Re: pgindent wishlist item

Andrew Dunstan <andrew@dunslane.net> writes:

While Bruce is working on pgindent, let me register a small wishlist
item. It would be quite useful to be able to supply extra typedefs on
the command line to supplement a typedefs file downloaded from the
buildfarm or constructed however. A concrete example: in the code I have
been recently working on, there are typedefs for Jsonb and JsonbValue.
If I run pgindent as normal on the new code these items are not treated
properly. What I had to do was take a special copy of the typedefs list
and add those two items. If we could pass a list of extra typedefs to
supplement the typedefs file that would be very useful. Then I could do
something like:

pgindent --typedef Jsonb --typedef JsonbValue
src/backend/utils/adt/jsonfuncs.c

without having to mangle a typedefs file.

Personally, I always just edit the downloaded file to add whatever
typedefs the patch I'm working on adds. I wouldn't use a command
line switch even if there was one, because then I'd have to remember
which typedef names to add each time I run pgindent.

regards, tom lane

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

#3Andres Freund
andres@2ndquadrant.com
In reply to: Andrew Dunstan (#1)
Re: pgindent wishlist item

On 2014-01-31 12:29:52 -0500, Andrew Dunstan wrote:

While Bruce is working on pgindent

If it's christmas, let me wish for a not completly broken formatting of
function typedefs. E.g.
typedef ForeignScan *(*GetForeignPlan_function) (PlannerInfo *root,
RelOptInfo *baserel,
Oid foreigntableid,
ForeignPath *best_path,
List *tlist,
List *scan_clauses);
is ridiculous. It can't be convinced to add a newline at any helpful
place afaik.

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

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

#4Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#2)
1 attachment(s)
Re: pgindent wishlist item

On Fri, Jan 31, 2014 at 12:44:22PM -0500, Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

While Bruce is working on pgindent, let me register a small wishlist
item. It would be quite useful to be able to supply extra typedefs on
the command line to supplement a typedefs file downloaded from the
buildfarm or constructed however. A concrete example: in the code I have
been recently working on, there are typedefs for Jsonb and JsonbValue.
If I run pgindent as normal on the new code these items are not treated
properly. What I had to do was take a special copy of the typedefs list
and add those two items. If we could pass a list of extra typedefs to
supplement the typedefs file that would be very useful. Then I could do
something like:

pgindent --typedef Jsonb --typedef JsonbValue
src/backend/utils/adt/jsonfuncs.c

without having to mangle a typedefs file.

Personally, I always just edit the downloaded file to add whatever
typedefs the patch I'm working on adds. I wouldn't use a command
line switch even if there was one, because then I'd have to remember
which typedef names to add each time I run pgindent.

Easily added, so done with the attached, applied patch. You use it
like this:

pgindent --list-of-typedefs 'abc def'

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

Attachments:

pgindent.difftext/x-diff; charset=us-asciiDownload
diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent
new file mode 100755
index 8e45b18..2de7a53
*** a/src/tools/pgindent/pgindent
--- b/src/tools/pgindent/pgindent
*************** my $indent_opts =
*** 22,31 ****
  # indent-dependant settings
  my $extra_opts = "";
  
! my ($typedefs_file, $code_base, $excludes, $indent, $build);
  
  my %options = (
  	"typedefs=s"  => \$typedefs_file,
  	"code-base=s" => \$code_base,
  	"excludes=s"  => \$excludes,
  	"indent=s"    => \$indent,
--- 22,32 ----
  # indent-dependant settings
  my $extra_opts = "";
  
! my ($typedefs_file, $typedef_str, $code_base, $excludes, $indent, $build);
  
  my %options = (
  	"typedefs=s"  => \$typedefs_file,
+ 	"list-of-typedefs=s"  => \$typedef_str,
  	"code-base=s" => \$code_base,
  	"excludes=s"  => \$excludes,
  	"indent=s"    => \$indent,
*************** sub load_typedefs
*** 125,130 ****
--- 126,138 ----
  	  || die "cannot open typedefs file \"$typedefs_file\": $!\n";
  	my @typedefs = <$typedefs_fh>;
  	close($typedefs_fh);
+ 	if (defined($typedef_str))
+ 	{
+ 		foreach my $typedef (split(m/[, \t\n]+/, $typedef_str))
+ 		{
+ 			push(@typedefs, $typedef . "\n");
+ 		}
+ 	}
  
  	# remove certain entries
  	@typedefs =
#5Bruce Momjian
bruce@momjian.us
In reply to: Andres Freund (#3)
Re: pgindent wishlist item

On Fri, Jan 31, 2014 at 07:15:05PM +0100, Andres Freund wrote:

On 2014-01-31 12:29:52 -0500, Andrew Dunstan wrote:

While Bruce is working on pgindent

If it's christmas, let me wish for a not completly broken formatting of
function typedefs. E.g.
typedef ForeignScan *(*GetForeignPlan_function) (PlannerInfo *root,
RelOptInfo *baserel,
Oid foreigntableid,
ForeignPath *best_path,
List *tlist,
List *scan_clauses);
is ridiculous. It can't be convinced to add a newline at any helpful
place afaik.

Uh, not sure how to help here. :-(

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

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