[Bash-completion-devel] Improve make target completion

Igor Murzov e-mail at date.by
Wed Sep 5 21:50:43 UTC 2012


On Wed, 5 Sep 2012 19:59:06 +0100
Tristan Wibberley <tristan.wibberley at gmail.com> wrote:

> commit-a1843b3: Rolled up previous changes. Also made the displayed
> suggestions only show the next step of the completion, like file and
> folder completion. Fixed whitespace.

Sorry, I don't understand how $mode works in this patch.
So I pushed the first version of the patch with some formatting
fixes:

http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=commit;h=b28d7108d3677c61bd01c51ccee8bb1cf9e3bfba


-- Igor

> On 5 September 2012 14:32, Igor Murzov <e-mail at date.by> wrote:
> > On Sat, 1 Sep 2012 09:14:41 +0100
> > Tristan Wibberley <tristan.wibberley at gmail.com> wrote:
> >
> >> Hello bash completion team.
> >>
> >> Forwarding my changes to the team now that I discovered there is a
> >> mailling list for this.
> >>
> >> Please consider applying the attached git commits for bash-completion for make.
> >>
> >> attachments:
> >>   commit-aef2ee - converts make completion to use more metadata for
> >> better results
> >>   commit-6d1b6d9 - simplifies regex, adds more exclusions
> >>   commit-d05dbbc - scalability and speed + incremental completions.
> >>
> >> The commits against
> >> http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git
> >> improve bash completion for make by replacing the processing command
> >> for the output of make -np
> >>
> >> This lists all explicit targets, no intermediates, and no source files.
> >>
> >> For an automake project like gcc there is almost no difference in
> >> output completions. For gcc's generated makefile a couple of
> >> completions are not proposed in this version which are proposed by the
> >> existing version and these are not buildable targets in that project's
> >> make system.
> >>
> >> Performance even for small makefiles like gcc's is improved.
> >>
> >> For makefiles with .INTERMEDIATE targets properly marked up then
> >> generated deps rules, targets of those deps and intermediate files do
> >> not get listed thus the patch avoids suggesting most of the targets a
> >> user doesn't want.
> >>
> >> For the linux kernel makefiles, completion time is reduced to one
> >> quarter of the time to process the makefiles, nearly halving the
> >> latency while returning most useful targets (taking the list from 88
> >> to four digits) and keeping the number of suggestions small (taking
> >> the first round of suggestions up to the first slash from 88 to 100 or
> >> so because it supports incremental completion where targets are in
> >> subdirectories.).
> >>
> >> For a makefile such as the example at
> >> http://codeshot.blogspot.co.uk/2012/08/this-is-program-that-lists-targets-in.html
> >> the improvement is dramatic. When I create 4 empty files named
> >> test/a.cc test/b.cc test/c.cc test/d.cc in a subfolder "test" below
> >> that Makefile this version of make target completion generates 14
> >> useful user targets and no source files vs 2 useful targets and 5
> >> source files for the existing bash completion awk expression.
> >
> > Hi, Tristan.
> >
> > I like your patches. Completion for make was always somewhat
> > incomplete and with your patches it definitely works!
> >
> > Some small remarks about the patches:
> >
> > * Your way to parse the output of `make -npq` does not work
> >   for me unless LC_ALL=C is set. So please use `LC_ALL=C make -npq`
> >   to get correct results on other locales.
> >
> > * We don't use tabs for formatting. And commit-d05dbbc has
> >   one tab in it. And there is also one whitespace issue in
> >   this patch:
> >
> >   $ git apply commit-aef2eee commit-6d1b6d9 commit-d05dbbc
> >   commit-d05dbbc:279: trailing whitespace.
> >           COMPREPLY=( $( compgen -W "$(
> >   warning: 1 line adds whitespace errors.
> >
> > Also, it's may be better to squash these 3 patches into one
> > single patch, because it seems better for me to review the
> > changes as a whole. Anyway, the patches are great!
> >
> >
> > -- Igor



More information about the Bash-completion-devel mailing list