Hello hackers, psql has the :{?name} syntax for testing a psql variable existence.
But currently doing \echo :{?VERB<Tab> doesn't trigger tab completion. This patch fixes it. I've also included a TAP test. Best regards, Steve Chavez
From adb1f997b67d8ef603017ab34e1b9061e4e229ea Mon Sep 17 00:00:00 2001 From: steve-chavez <stevechavez...@gmail.com> Date: Sat, 2 Mar 2024 19:06:13 -0500 Subject: [PATCH 1/1] psql: fix variable existence tab completion --- src/bin/psql/t/010_tab_completion.pl | 8 ++++++++ src/bin/psql/tab-complete.c | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl index b6575b075e..b45c39f0f5 100644 --- a/src/bin/psql/t/010_tab_completion.pl +++ b/src/bin/psql/t/010_tab_completion.pl @@ -413,6 +413,14 @@ check_completion( clear_query(); +# check completion for psql variable test +check_completion( + "\\echo :{?VERB\t", + qr/:\{\?VERBOSITY} /, + "complete a psql variable test"); + +clear_query(); + # check no-completions code path check_completion("blarg \t\t", qr//, "check completion failure path"); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index ada711d02f..a16dac9e73 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -76,7 +76,7 @@ #endif /* word break characters */ -#define WORD_BREAKS "\t\n@><=;|&{() " +#define WORD_BREAKS "\t\n@><=;|&() " /* * Since readline doesn't let us pass any state through to the tab completion @@ -1785,6 +1785,8 @@ psql_completion(const char *text, int start, int end) matches = complete_from_variables(text, ":'", "'", true); else if (text[1] == '"') matches = complete_from_variables(text, ":\"", "\"", true); + else if (text[1] == '{' && text[2] == '?') + matches = complete_from_variables(text, ":{?", "}", true); else matches = complete_from_variables(text, ":", "", true); } -- 2.40.1