mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 07:58:23 +08:00
[Bash-autocompletion] Show HelpText with possible flags
Summary: `clang --autocomplete=-std` will show ``` -std: Language standard to compile for -std= Language standard to compile for -stdlib= C++ standard library to use ``` after this change. However, showing HelpText with completion in bash seems super tricky, so this feature will be used in other shells (fish, zsh...). Reviewers: v.g.vassilev, teemperor, ruiu Subscribers: cfe-commits, hiraditya Differential Revision: https://reviews.llvm.org/D35759 llvm-svn: 309113
This commit is contained in:
@@ -1297,7 +1297,7 @@ bool Driver::HandleImmediateArgs(const Compilation &C) {
|
||||
std::sort(SuggestedCompletions.begin(), SuggestedCompletions.end(),
|
||||
[](StringRef A, StringRef B) { return A.compare_lower(B) < 0; });
|
||||
|
||||
llvm::outs() << llvm::join(SuggestedCompletions, " ") << '\n';
|
||||
llvm::outs() << llvm::join(SuggestedCompletions, "\n") << '\n';
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,46 +1,91 @@
|
||||
// RUN: %clang --autocomplete=-fsyn | FileCheck %s -check-prefix=FSYN
|
||||
// FSYN: -fsyntax-only
|
||||
// RUN: %clang --autocomplete=-s | FileCheck %s -check-prefix=STD
|
||||
// STD: -std={{.*}}-stdlib=
|
||||
// RUN: %clang --autocomplete=-std= | FileCheck %s -check-prefix=STD
|
||||
// STD: -std= Language standard to compile for
|
||||
// RUN: %clang --autocomplete=foo | FileCheck %s -check-prefix=FOO
|
||||
// FOO-NOT: foo
|
||||
// RUN: %clang --autocomplete=-stdlib=,l | FileCheck %s -check-prefix=STDLIB
|
||||
// STDLIB: libc++ libstdc++
|
||||
// STDLIB: libc++
|
||||
// STDLIB-NEXT: libstdc++
|
||||
// RUN: %clang --autocomplete=-stdlib=, | FileCheck %s -check-prefix=STDLIBALL
|
||||
// STDLIBALL: libc++ libstdc++ platform
|
||||
// STDLIBALL: libc++
|
||||
// STDLIBALL-NEXT: libstdc++
|
||||
// STDLIBALL-NEXT: platform
|
||||
// RUN: %clang --autocomplete=-meabi,d | FileCheck %s -check-prefix=MEABI
|
||||
// MEABI: default
|
||||
// RUN: %clang --autocomplete=-meabi, | FileCheck %s -check-prefix=MEABIALL
|
||||
// MEABIALL: 4 5 default gnu
|
||||
// MEABIALL: 4
|
||||
// MEABIALL-NEXT: 5
|
||||
// MEABIALL-NEXT: default
|
||||
// MEABIALL-NEXT: gnu
|
||||
// RUN: %clang --autocomplete=-cl-std=,CL2 | FileCheck %s -check-prefix=CLSTD
|
||||
// CLSTD: CL2.0
|
||||
// RUN: %clang --autocomplete=-cl-std=, | FileCheck %s -check-prefix=CLSTDALL
|
||||
// CLSTDALL: cl CL cl1.1 CL1.1 cl1.2 CL1.2 cl2.0 CL2.0
|
||||
// CLSTDALL: cl
|
||||
// CLSTDALL-NEXT: CL
|
||||
// CLSTDALL-NEXT: cl1.1
|
||||
// CLSTDALL-NEXT: CL1.1
|
||||
// CLSTDALL-NEXT: cl1.2
|
||||
// CLSTDALL-NEXT: CL1.2
|
||||
// CLSTDALL-NEXT: cl2.0
|
||||
// CLSTDALL-NEXT: CL2.0
|
||||
// RUN: %clang --autocomplete=-fno-sanitize-coverage=,f | FileCheck %s -check-prefix=FNOSANICOVER
|
||||
// FNOSANICOVER: func
|
||||
// RUN: %clang --autocomplete=-fno-sanitize-coverage=, | FileCheck %s -check-prefix=FNOSANICOVERALL
|
||||
// FNOSANICOVERALL: 8bit-counters bb edge func indirect-calls inline-8bit-counters no-prune trace-bb trace-cmp trace-div trace-gep trace-pc trace-pc-guard
|
||||
// FNOSANICOVERALL: 8bit-counters
|
||||
// FNOSANICOVERALL-NEXT: bb
|
||||
// FNOSANICOVERALL-NEXT: edge
|
||||
// FNOSANICOVERALL-NEXT: func
|
||||
// FNOSANICOVERALL-NEXT: indirect-calls
|
||||
// FNOSANICOVERALL-NEXT: inline-8bit-counters
|
||||
// FNOSANICOVERALL-NEXT: no-prune
|
||||
// FNOSANICOVERALL-NEXT: trace-bb
|
||||
// FNOSANICOVERALL-NEXT: trace-cmp
|
||||
// FNOSANICOVERALL-NEXT: trace-div
|
||||
// FNOSANICOVERALL-NEXT: trace-gep
|
||||
// FNOSANICOVERALL-NEXT: trace-pc
|
||||
// FNOSANICOVERALL-NEXT: trace-pc-guard
|
||||
// RUN: %clang --autocomplete=-ffp-contract=, | FileCheck %s -check-prefix=FFPALL
|
||||
// FFPALL: fast off on
|
||||
// FFPALL: fast
|
||||
// FFPALL-NEXT: off
|
||||
// FFPALL-NEXT: on
|
||||
// RUN: %clang --autocomplete=-flto=, | FileCheck %s -check-prefix=FLTOALL
|
||||
// FLTOALL: full thin
|
||||
// FLTOALL: full
|
||||
// FLTOALL-NEXT: thin
|
||||
// RUN: %clang --autocomplete=-fveclib=, | FileCheck %s -check-prefix=FVECLIBALL
|
||||
// FVECLIBALL: Accelerate none SVML
|
||||
// FVECLIBALL: Accelerate
|
||||
// FVECLIBALL-NEXT: none
|
||||
// FVECLIBALL-NEXT: SVML
|
||||
// RUN: %clang --autocomplete=-fshow-overloads=, | FileCheck %s -check-prefix=FSOVERALL
|
||||
// FSOVERALL: all best
|
||||
// FSOVERALL: all
|
||||
// FSOVERALL-NEXT: best
|
||||
// RUN: %clang --autocomplete=-fvisibility=, | FileCheck %s -check-prefix=FVISIBILITYALL
|
||||
// FVISIBILITYALL: default hidden
|
||||
// FVISIBILITYALL: default
|
||||
// FVISIBILITYALL-NEXT: hidden
|
||||
// RUN: %clang --autocomplete=-mfloat-abi=, | FileCheck %s -check-prefix=MFLOATABIALL
|
||||
// MFLOATABIALL: hard soft softfp
|
||||
// MFLOATABIALL: hard
|
||||
// MFLOATABIALL-NEXT: soft
|
||||
// MFLOATABIALL-NEXT: softfp
|
||||
// RUN: %clang --autocomplete=-mthread-model, | FileCheck %s -check-prefix=MTHREADMODELALL
|
||||
// MTHREADMODELALL: posix single
|
||||
// MTHREADMODELALL: posix
|
||||
// MTHREADMODELALL-NEXT: single
|
||||
// RUN: %clang --autocomplete=-mrelocation-model, | FileCheck %s -check-prefix=MRELOCMODELALL
|
||||
// MRELOCMODELALL: dynamic-no-pic pic ropi ropi-rwpi rwpi static
|
||||
// MRELOCMODELALL: dynamic-no-pic
|
||||
// MRELOCMODELALL-NEXT: pic
|
||||
// MRELOCMODELALL-NEXT: ropi
|
||||
// MRELOCMODELALL-NEXT: ropi-rwpi
|
||||
// MRELOCMODELALL-NEXT: rwpi
|
||||
// MRELOCMODELALL-NEXT: static
|
||||
// RUN: %clang --autocomplete=-mrelocation-mode | FileCheck %s -check-prefix=MRELOCMODEL_CLANG
|
||||
// MRELOCMODEL_CLANG-NOT: -mrelocation-model
|
||||
// RUN: %clang --autocomplete=#-mrelocation-mode | FileCheck %s -check-prefix=MRELOCMODEL_CC1
|
||||
// MRELOCMODEL_CC1: -mrelocation-model
|
||||
// RUN: %clang --autocomplete=-Wma | FileCheck %s -check-prefix=WARNING
|
||||
// WARNING: -Wmacro-redefined -Wmain -Wmain-return-type -Wmalformed-warning-check -Wmany-braces-around-scalar-init -Wmax-unsigned-zero
|
||||
// WARNING: -Wmacro-redefined
|
||||
// WARNING-NEXT: -Wmain
|
||||
// WARNING-NEXT: -Wmain-return-type
|
||||
// WARNING-NEXT: -Wmalformed-warning-check
|
||||
// WARNING-NEXT: -Wmany-braces-around-scalar-init
|
||||
// WARNING-NEXT: -Wmax-unsigned-zero
|
||||
// RUN: %clang --autocomplete=-Wno-invalid-pp- | FileCheck %s -check-prefix=NOWARNING
|
||||
// NOWARNING: -Wno-invalid-pp-token
|
||||
|
||||
@@ -57,7 +57,7 @@ _clang()
|
||||
|
||||
# expand ~ to $HOME
|
||||
eval local path=${COMP_WORDS[0]}
|
||||
flags=$( "$path" --autocomplete="$arg" 2>/dev/null )
|
||||
flags=$( "$path" --autocomplete="$arg" 2>/dev/null | sed -e 's/\t.*//' )
|
||||
# If clang is old that it does not support --autocomplete,
|
||||
# fall back to the filename completion.
|
||||
if [[ "$?" != 0 ]]; then
|
||||
|
||||
@@ -235,7 +235,9 @@ OptTable::findByPrefix(StringRef Cur, unsigned short DisableFlags) const {
|
||||
continue;
|
||||
|
||||
for (int I = 0; In.Prefixes[I]; I++) {
|
||||
std::string S = std::string(In.Prefixes[I]) + std::string(In.Name);
|
||||
std::string S = std::string(In.Prefixes[I]) + std::string(In.Name) + "\t";
|
||||
if (In.HelpText)
|
||||
S += In.HelpText;
|
||||
if (StringRef(S).startswith(Cur))
|
||||
Ret.push_back(S);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user