]> granicus.if.org Git - llvm/commitdiff
[GSoC] Shell autocompletion for clang
authorYuka Takahashi <yukatkh@gmail.com>
Tue, 23 May 2017 18:39:08 +0000 (18:39 +0000)
committerYuka Takahashi <yukatkh@gmail.com>
Tue, 23 May 2017 18:39:08 +0000 (18:39 +0000)
Summary:
This is a first patch for GSoC project, bash-completion for clang.
To use this on bash, please run `source clang/utils/bash-autocomplete.sh`.
bash-autocomplete.sh is code for bash-completion.

Simple flag completion and path completion is available in this patch.

Reviewers: teemperor, v.g.vassilev, ruiu, Bigcheese, efriedma

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D33237

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303670 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Option/OptTable.h
lib/Option/OptTable.cpp

index 390e52774fea567ce97fbcc37aef16c838eec7d6..8a323a255ca1bea55a9eceea2c94abe6760f5a4d 100644 (file)
@@ -113,6 +113,14 @@ public:
     return getInfo(id).MetaVar;
   }
 
+  /// Find flags from OptTable which starts with Cur.
+  ///
+  /// \param [in] Cur - String prefix that all returned flags need
+  //  to start with.
+  ///
+  /// \return The vector of flags which start with Cur.
+  std::vector<std::string> findByPrefix(StringRef Cur) const;
+
   /// \brief Parse a single argument; returning the new argument and
   /// updating Index.
   ///
index 7eafb00855d777bc034de760049ce2e4d744bd33..b00d21ec8f6719bdaf5f657fe122f6a7a07d7fbe 100644 (file)
@@ -186,6 +186,20 @@ static unsigned matchOption(const OptTable::Info *I, StringRef Str,
   return 0;
 }
 
+std::vector<std::string> OptTable::findByPrefix(StringRef Cur) const {
+  std::vector<std::string> Ret;
+  for (const Info &In : OptionInfos.slice(FirstSearchableIndex)) {
+    if (!In.Prefixes)
+      continue;
+    for (int I = 0; In.Prefixes[I]; I++) {
+      std::string S = std::string(In.Prefixes[I]) + std::string(In.Name);
+      if (StringRef(S).startswith(Cur))
+        Ret.push_back(S);
+    }
+  }
+  return Ret;
+}
+
 Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index,
                            unsigned FlagsToInclude,
                            unsigned FlagsToExclude) const {