TildeExpressionResolver.h revision 341825
1317027Sdim//===--------------------- TildeExpressionResolver.h ------------*- C++ -*-===//
2317027Sdim//
3317027Sdim//                     The LLVM Compiler Infrastructure
4317027Sdim//
5317027Sdim// This file is distributed under the University of Illinois Open Source
6317027Sdim// License. See LICENSE.TXT for details.
7317027Sdim//
8317027Sdim//===----------------------------------------------------------------------===//
9317027Sdim
10317027Sdim#ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
11317027Sdim#define LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
12317027Sdim
13317027Sdim#include "llvm/ADT/StringRef.h"
14317027Sdim#include "llvm/ADT/StringSet.h"
15317027Sdim
16317027Sdimnamespace llvm {
17317027Sdimtemplate <typename T> class SmallVectorImpl;
18317027Sdim}
19317027Sdim
20317027Sdimnamespace lldb_private {
21317027Sdimclass TildeExpressionResolver {
22317027Sdimpublic:
23317027Sdim  virtual ~TildeExpressionResolver();
24317027Sdim
25341825Sdim  /// Resolve a Tilde Expression contained according to bash rules.
26317027Sdim  ///
27317027Sdim  /// \param Expr Contains the tilde expression to resolve.  A valid tilde
28317027Sdim  ///             expression must begin with a tilde and contain only non
29317027Sdim  ///             separator characters.
30317027Sdim  ///
31317027Sdim  /// \param Output Contains the resolved tilde expression, or the original
32317027Sdim  ///               input if the tilde expression could not be resolved.
33317027Sdim  ///
34317027Sdim  /// \returns true if \p Expr was successfully resolved, false otherwise.
35317027Sdim  virtual bool ResolveExact(llvm::StringRef Expr,
36317027Sdim                            llvm::SmallVectorImpl<char> &Output) = 0;
37317027Sdim
38341825Sdim  /// Auto-complete a tilde expression with all matching values.
39317027Sdim  ///
40317027Sdim  /// \param Expr Contains the tilde expression prefix to resolve.  See
41317027Sdim  ///             ResolveExact() for validity rules.
42317027Sdim  ///
43317027Sdim  /// \param Output Contains all matching home directories, each one
44317027Sdim  ///               itself unresolved (i.e. you need to call ResolveExact
45317027Sdim  ///               on each item to turn it into a real path).
46317027Sdim  ///
47317027Sdim  /// \returns true if there were any matches, false otherwise.
48317027Sdim  virtual bool ResolvePartial(llvm::StringRef Expr,
49317027Sdim                              llvm::StringSet<> &Output) = 0;
50317027Sdim
51341825Sdim  /// Resolve an entire path that begins with a tilde expression, replacing
52341825Sdim  /// the username portion with the matched result.
53317027Sdim  bool ResolveFullPath(llvm::StringRef Expr,
54317027Sdim                       llvm::SmallVectorImpl<char> &Output);
55317027Sdim};
56317027Sdim
57317027Sdimclass StandardTildeExpressionResolver : public TildeExpressionResolver {
58317027Sdimpublic:
59317027Sdim  bool ResolveExact(llvm::StringRef Expr,
60317027Sdim                    llvm::SmallVectorImpl<char> &Output) override;
61317027Sdim  bool ResolvePartial(llvm::StringRef Expr, llvm::StringSet<> &Output) override;
62317027Sdim};
63317027Sdim}
64317027Sdim
65317027Sdim#endif // #ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H
66