From: Yugo Nagata Date: Thu, 5 Jun 2025 09:38:45 +0900 Subject: [PATCH v2 1/3] Refactor match_previous_words() to remove direct use of rl_completion_matches() Most tab completions in match_previous_words() use COMPLETE_WITH* macros, which wrap rl_completion_matches(). However, some direct calls to rl_completion_matches() still remained. This commit replaces the remaining direct calls with the new macro, COMPLETE_WITH_FILES or COMPLETE_WITH_GENERATOR, for improved consistency and readability. --- src/bin/psql/tab-complete.in.c | 38 ++++++++++++++++------------------ 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index ec65ab79fec..8a85a285281 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -443,6 +443,16 @@ do { \ matches = rl_completion_matches(text, complete_from_schema_query); \ } while (0) +#define COMPLETE_WITH_FILES(escape, force_quote) \ +do { \ + completion_charp = escape; \ + completion_force_quote = force_quote; \ + matches = rl_completion_matches(text, complete_from_files); \ +} while (0) + +#define COMPLETE_WITH_GENERATOR(function) \ + matches = rl_completion_matches(text, function) + /* * Assembly instructions for schema queries * @@ -2158,7 +2168,7 @@ match_previous_words(int pattern_id, /* for INDEX and TABLE/SEQUENCE, respectively */ "UNIQUE", "UNLOGGED"); else - matches = rl_completion_matches(text, create_command_generator); + COMPLETE_WITH_GENERATOR(create_command_generator); } /* complete with something you can create or replace */ else if (TailMatches("CREATE", "OR", "REPLACE")) @@ -2168,7 +2178,7 @@ match_previous_words(int pattern_id, /* DROP, but not DROP embedded in other commands */ /* complete with something you can drop */ else if (Matches("DROP")) - matches = rl_completion_matches(text, drop_command_generator); + COMPLETE_WITH_GENERATOR(drop_command_generator); /* ALTER */ @@ -2179,7 +2189,7 @@ match_previous_words(int pattern_id, /* ALTER something */ else if (Matches("ALTER")) - matches = rl_completion_matches(text, alter_command_generator); + COMPLETE_WITH_GENERATOR(alter_command_generator); /* ALTER TABLE,INDEX,MATERIALIZED VIEW ALL IN TABLESPACE xxx */ else if (TailMatches("ALL", "IN", "TABLESPACE", MatchAny)) COMPLETE_WITH("SET TABLESPACE", "OWNED BY"); @@ -3264,17 +3274,9 @@ match_previous_words(int pattern_id, COMPLETE_WITH("FROM", "TO"); /* Complete COPY FROM|TO with filename */ else if (Matches("COPY", MatchAny, "FROM|TO")) - { - completion_charp = ""; - completion_force_quote = true; /* COPY requires quoted filename */ - matches = rl_completion_matches(text, complete_from_files); - } + COMPLETE_WITH_FILES("", true); /* COPY requires quoted filename */ else if (Matches("\\copy", MatchAny, "FROM|TO")) - { - completion_charp = ""; - completion_force_quote = false; - matches = rl_completion_matches(text, complete_from_files); - } + COMPLETE_WITH_FILES("", false); /* Complete COPY TO */ else if (Matches("COPY|\\copy", MatchAny, "TO", MatchAny)) @@ -5347,9 +5349,9 @@ match_previous_words(int pattern_id, else if (TailMatchesCS("\\h|\\help", MatchAny)) { if (TailMatches("DROP")) - matches = rl_completion_matches(text, drop_command_generator); + COMPLETE_WITH_GENERATOR(drop_command_generator); else if (TailMatches("ALTER")) - matches = rl_completion_matches(text, alter_command_generator); + COMPLETE_WITH_GENERATOR(alter_command_generator); /* * CREATE is recognized by tail match elsewhere, so doesn't need to be @@ -5449,11 +5451,7 @@ match_previous_words(int pattern_id, else if (TailMatchesCS("\\cd|\\e|\\edit|\\g|\\gx|\\i|\\include|" "\\ir|\\include_relative|\\o|\\out|" "\\s|\\w|\\write|\\lo_import")) - { - completion_charp = "\\"; - completion_force_quote = false; - matches = rl_completion_matches(text, complete_from_files); - } + COMPLETE_WITH_FILES("\\", false); /* gen_tabcomplete.pl ends special processing here */ /* END GEN_TABCOMPLETE */ -- 2.43.0 --Multipart=_Thu__5_Jun_2025_16_52_00_+0900_d_5fKAN_xESbgyqx--