[PATCHv5,00/14] Further filename completion improvements

Message ID cover.1724173728.git.aburgess@redhat.com
Headers
Series Further filename completion improvements |

Message

Andrew Burgess Aug. 20, 2024, 5:10 p.m. UTC
  In v5:

  - Rebased onto current master.  Very minor merge conflict.  Resolved
    and re-tested with no regressions.

  - Addressed Eli's doc feedback for patches #12 and #13.

In V4:

  - Tom asked about V3: "...did you consider changing gdb to have a
    single way to pass a filename to a command?".  Well, I've not done
    that.

    But, I have ensured that doing this would be possible in the
    future, and I've added two patches (the last two) that change a
    few commands.

    There are two reasons for no changing everyhing in this series,
    first I'd probably not change all commands in one commit, that one
    commit would be huge, so chaning all the commits would add even
    more commits to this already large series.  And second, changing
    the commands is a breaking change, while just chaning the
    completion (in line with current command behaviour) is
    non-breaking.

  - As such, if folk get nervous about changing the command behaviour,
    the last two patches of V4 should be considered optional.  Patches
    1 to 12 are all either new functionality, or non-breaking fixes to
    existing functionality.  If the final two patches are accepted
    then I would plan to write patches to change all the other
    commands to accept quoted filenames for arguments.

    That would be my intention, but of course, this series should be
    reviewed and accepted or rejected assuming the follow up work
    never arrives.

    Personally, I'm OK with that, we currently have two style of
    filename passing.  All I do in this series is acknoweldge that and
    update the completion to handle it.  Keeping a single filename
    completion function (a) doesn't change the fact that we have two
    filename argument styles, and (b) ensures that completion for one
    type of argument will remain broken.

  - I've restructured patches #1 and #2, I've tried to reduce the size
    of patch #1, while patch #2 is a simple renaming patch.

  - Patches #3 to #8 are largely unchanged from v3 -- minor tweaks to
    accomodate changes in earlier patches only.

  - Patches #9 onwards are new work.

  - I think that there is additional refactoring and cleanup that
    could be performed in the area of filename completion, but I've
    resisted adding that to this series.  How that cleanup would
    progress would depend on whether I get all commands updated to
    accept quoted filenames or not.  I didn't want to invest a large
    block of time assuming that I could get such a change into GDB
    only to have it rejected.  If we decide to keep the existing two
    argumet style approach then I think there are other cleanups we
    could potentially make in the future.

In V3:

  - Patch #1 from the v2 series was merged.

  - Remaining patches have been rebased and retested.

In V2:

  - Patches #1 and #2 are new in this iteration.  Patches #3 to #8 are
    the patches from V1 rebased onto these two new patches,

  - Patch #1 adds documentation for the formatting of filename
    arguments, this tries to explain the two diffent ways that GDB
    expects filename arguments to be formatted.

  - Patch #2 addresses the problem that Lancelot pointed out: some
    commands don't expect filename arguments to be quoted, or to
    contain escapes.  In this patch I split the filename completion in
    two so the two different filename argument formats are handled
    separately...

  - This clears the way for the rest of the series, which updates how
    completion works for those filename arguments that do accept
    quoting and escaping,

  - Patches #3 to #8 are in principle the same as in V1, but there
    were some changes after rebasing onto the new patch #2.

--

Andrew Burgess (14):
  gdb: split apart two different types of filename completion
  gdb: deprecated filename_completer and associated functions
  gdb: improve escaping when completing filenames
  gdb: move display of completion results into completion_result class
  gdb: simplify completion_result::print_matches
  gdb: add match formatter mechanism for 'complete' command output
  gdb: apply escaping to filenames in 'complete' results
  gdb: improve gdb_rl_find_completion_word for quoted words
  gdb: implement readline rl_directory_rewrite_hook callback
  gdb: new extract_single_filename_arg helper function
  gdb: extend completion of quoted filenames to work in brkchars phase
  gdb: add remove-symbol-file command completion
  gdb: allow quoted filenames for commands that have custom completion
  gdb: 'target ...' commands now expect quoted/escaped filenames

 gdb/NEWS                                      |  21 +
 gdb/auto-load.c                               |   4 +-
 gdb/breakpoint.c                              |   4 +-
 gdb/cli/cli-cmds.c                            |  35 +-
 gdb/cli/cli-decode.c                          |   8 +-
 gdb/cli/cli-dump.c                            |   6 +-
 gdb/compile/compile.c                         |  11 +-
 gdb/completer.c                               | 643 +++++++++++++++---
 gdb/completer.h                               |  90 ++-
 gdb/corefile.c                                |   3 +-
 gdb/corelow.c                                 |  24 +-
 gdb/doc/gdb.texinfo                           |  19 +
 gdb/dwarf2/index-write.c                      |   8 +-
 gdb/exec.c                                    |  12 +-
 gdb/guile/scm-cmd.c                           |   2 +-
 gdb/infcmd.c                                  |  12 +-
 gdb/inferior.c                                |   2 +-
 gdb/jit.c                                     |   2 +-
 gdb/python/py-cmd.c                           |   2 +-
 gdb/record-full.c                             |   4 +-
 gdb/record.c                                  |   2 +-
 gdb/skip.c                                    |   2 +-
 gdb/source.c                                  |   2 +-
 gdb/symfile.c                                 | 120 +++-
 gdb/target-descriptions.c                     |  31 +-
 gdb/testsuite/gdb.base/batch-exit-status.exp  |   4 +-
 .../gdb.base/filename-completion.exp          | 319 +++++++--
 gdb/testsuite/gdb.base/sym-file.exp           | 258 +++----
 gdb/testsuite/gdb.compile/compile.exp         |   2 +-
 gdb/testsuite/lib/gdb.exp                     |  10 +
 gdb/tracectf.c                                |  12 +-
 gdb/tracefile-tfile.c                         |  17 +-
 gdb/utils.c                                   |  18 +
 gdb/utils.h                                   |  14 +
 34 files changed, 1329 insertions(+), 394 deletions(-)


base-commit: 40a1603112d2b1d330e11792b5506457d5584648