Re: [BUGS] Tab completion of function arguments not working in all cases - Mailing list pgsql-hackers
From | Dean Rasheed |
---|---|
Subject | Re: [BUGS] Tab completion of function arguments not working in all cases |
Date | |
Msg-id | CAEZATCUQKZUV-Y0TT7A5sX_TK2Hd91qOWH7UMCcnin06KNsM0A@mail.gmail.com Whole thread Raw |
In response to | Re: [BUGS] Tab completion of function arguments not working in all cases (Josh Kupershmidt <schmiddy@gmail.com>) |
Responses |
Re: [BUGS] Tab completion of function arguments not working in all cases
|
List | pgsql-hackers |
On 18 June 2012 04:21, Josh Kupershmidt <schmiddy@gmail.com> wrote: > +1 for the idea. I find the existing behavior rather confusing, > particularly the fact that a schema-qualified function name will be > tab-completed, i.e. this works. > > DROP FUNCTION my_schema.my<TAB> > > but then, as your second example above shows, no completions are > subsequently offered for the function arguments. > > As a side note unrelated to this patch, I also dislike how function > name tab-completions will not fill in the opening parenthesis, which > makes for unnecessary work for the user, as one then has to type the > parenthesis and hit tab again to get possible completions for the > function arguments. The current behavior causes: > DROP FUNCTION my_f<TAB> > > which completes to: > DROP FUNCTION my_function > > enter parenthesis, and hit tab: > DROP FUNCTION my_function(<TAB> > > which, if there is only one match, could complete to: > DROP FUNCTION my_function(integer) > > when the last three steps could have been consolidated with better > tab-completion. Perhaps this could be a TODO. > Hmm, I find that it does automatically fill in the opening parenthesis, but only once there is a space after the completed function name. So "DROP FUNCTION my_f<TAB>" completes to "DROP FUNCTION my_function " (note the space at the end). Then pressing <TAB> one more time gives "DROP FUNCTION my_function ( ", and then pressing <TAB> again gives the function arguments. Alternatively "DROP FUNCTION my_function<TAB>" (no space after function name) first completes to "DROP FUNCTION my_function " (adding the space), and then completes with the opening parenthesis, and then with the function arguments. It's a bit clunky, but I find that repeatedly pressing <TAB> is easier than typing the opening bracket. >> The attached patch fixes these problems by introducing a new macro >> COMPLETE_WITH_ARG, similar to the existing COMPLETE_WITH_ATTR, which >> seems to be the nearest analogous code that covers all the edge cases. > > Anyway, on to the review of the patch itself: > > * Submission * > > Patch applies cleanly to git head, and regression tests are not > expected for tab-completion enhancements. > > * Features & Usability * > > I've verified that tab-completing of the first argument to functions > for DROP FUNCTION and ALTER FUNCTION commands for the most part works > as expected. The one catch I noticed was that > Query_for_list_of_arguments wasn't restricting its results to > currently-visible functions, so with a default search_path, if you > have these two functions defined: > > public.doppelganger(text) > my_schema.doppelganger(bytea) > > and then try: > > DROP FUNCTION doppelganger(<TAB> > > you get tab-completions for both "text)" and "bytea(", when you > probably expected only the former. That's easy to fix though, please > see attached v2 patch. > Good catch. I think that's a useful additional test, and is also consistent with the existing code in Query_for_list_of_attributes. > * Coding * > > The new macro COMPLETE_WITH_ARG seems fine. The existing code used > malloc() directly for DROP FUNCTION and ALTER FUNCTION > (tab-complete.c, around lines 867 and 2190), which AIUI is frowned > upon in favor of pg_malloc(). The patch avoids this ugliness by using > the new COMPLETE_WITH_ARG macro, so that's a nice fixup. > > Overall, a nice fix for an overlooked piece of the tab-completion machinery. > > Josh Thanks for the review. Cheers, Dean
pgsql-hackers by date: