From 1f58f6c25916481dd1e2110ac79f151384d172b2 Mon Sep 17 00:00:00 2001 From: Tankut Baris Aktemur Date: Mon, 7 Dec 2020 09:28:33 +0100 Subject: [PATCH] gdb/completer: improve tab completion to consider the '-force-condition' flag The commit commit 733d554a4625db4ffb89b7a20e1cf27ab071ef4d Author: Tankut Baris Aktemur Date: Tue Oct 27 10:56:03 2020 +0100 gdb/breakpoint: add flags to 'condition' and 'break' commands to force condition introduced the '-force-condition' flag to the 'break' command. This flag was defined as a keyword like 'thread', 'task', and 'if'. However, it starts with '-'. This difference caused an uncovered case when tab-completing a seemingly complete linespec. Below, we see "-force-condition" in the completion list, where both the options and the keywords are listed: (gdb) break -function main -force-condition -function -label -line -qualified -source if task thread But tab-completing '-' lists only options: (gdb) break -function main - -function -label -line -qualified -source This patch fixes the problem by adding keywords to the completion list, so that we see: (gdb) break -function main - -force-condition -function -label -line -qualified -source gdb/ChangeLog: 2020-12-07 Tankut Baris Aktemur * completer.c (complete_explicit_location): Also add keywords that start with '-' to the completion list. gdb/testsuite/ChangeLog: 2020-12-07 Tankut Baris Aktemur * gdb.linespec/explicit.exp: Extend with a test to check completing '-' after seemingly complete options. --- gdb/ChangeLog | 5 +++++ gdb/completer.c | 6 +++++- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.linespec/explicit.exp | 14 ++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 60b3ce44af2..bea7a5b67b4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-12-07 Tankut Baris Aktemur + + * completer.c (complete_explicit_location): Also add keywords + that start with '-' to the completion list. + 2020-12-07 Tankut Baris Aktemur * linespec.c (linespec_lexer_lex_keyword): The "-force-condition" diff --git a/gdb/completer.c b/gdb/completer.c index 83b46a0e4d8..7f63ced93d8 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -892,7 +892,11 @@ complete_explicit_location (completion_tracker &tracker, int keyword = skip_keyword (tracker, explicit_options, &text); if (keyword == -1) - complete_on_enum (tracker, explicit_options, text, text); + { + complete_on_enum (tracker, explicit_options, text, text); + /* There are keywords that start with "-". Include them, too. */ + complete_on_enum (tracker, linespec_keywords, text, text); + } else { /* Completing on value. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3c28bc75a66..f5219ea182f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-12-07 Tankut Baris Aktemur + + * gdb.linespec/explicit.exp: Extend with a test to check completing + '-' after seemingly complete options. + 2020-12-07 Tankut Baris Aktemur * gdb.linespec/keywords.exp: Add tests to check positional diff --git a/gdb/testsuite/gdb.linespec/explicit.exp b/gdb/testsuite/gdb.linespec/explicit.exp index 52a1fce5371..c33ab505e34 100644 --- a/gdb/testsuite/gdb.linespec/explicit.exp +++ b/gdb/testsuite/gdb.linespec/explicit.exp @@ -469,6 +469,20 @@ namespace eval $testfile { } } + # Test that after a seemingly finished option argument, + # completion for "-" matches both the explicit location + # options and the linespec keywords that start with "-". + with_test_prefix "complete '-' after options" { + test_gdb_complete_multiple "b -function myfunction " "-" "" { + "-force-condition" + "-function" + "-label" + "-line" + "-qualified" + "-source" + } + } + # Tests that ensure that after "if" we complete on expressions # are in cpcompletion.exp. -- 2.30.2