TildeExpressionResolver.h revision 353358
172132Ssemenu//===--------------------- TildeExpressionResolver.h ------------*- C++ -*-===// 272132Ssemenu// 372132Ssemenu// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 472132Ssemenu// See https://llvm.org/LICENSE.txt for license information. 572132Ssemenu// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 672132Ssemenu// 772132Ssemenu//===----------------------------------------------------------------------===// 872132Ssemenu 972132Ssemenu#ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H 1072132Ssemenu#define LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H 1172132Ssemenu 1272132Ssemenu#include "llvm/ADT/StringRef.h" 1372132Ssemenu#include "llvm/ADT/StringSet.h" 1472132Ssemenu 1572132Ssemenunamespace llvm { 1672132Ssemenutemplate <typename T> class SmallVectorImpl; 1772132Ssemenu} 1872132Ssemenu 1972132Ssemenunamespace lldb_private { 2072132Ssemenuclass TildeExpressionResolver { 2172132Ssemenupublic: 2272132Ssemenu virtual ~TildeExpressionResolver(); 2372132Ssemenu 2472132Ssemenu /// Resolve a Tilde Expression contained according to bash rules. 2572132Ssemenu /// 2672132Ssemenu /// \param Expr Contains the tilde expression to resolve. A valid tilde 2772132Ssemenu /// expression must begin with a tilde and contain only non 2872132Ssemenu /// separator characters. 2972132Ssemenu /// 3072132Ssemenu /// \param Output Contains the resolved tilde expression, or the original 3172132Ssemenu /// input if the tilde expression could not be resolved. 3272132Ssemenu /// 33119418Sobrien /// \returns true if \p Expr was successfully resolved, false otherwise. 34139749Simp virtual bool ResolveExact(llvm::StringRef Expr, 3572132Ssemenu llvm::SmallVectorImpl<char> &Output) = 0; 3672132Ssemenu 3772132Ssemenu /// Auto-complete a tilde expression with all matching values. 3872132Ssemenu /// 3972132Ssemenu /// \param Expr Contains the tilde expression prefix to resolve. See 4072132Ssemenu /// ResolveExact() for validity rules. 4172132Ssemenu /// 4272132Ssemenu /// \param Output Contains all matching home directories, each one 4372132Ssemenu /// itself unresolved (i.e. you need to call ResolveExact 4472132Ssemenu /// on each item to turn it into a real path). 4572132Ssemenu /// 4672132Ssemenu /// \returns true if there were any matches, false otherwise. 4772132Ssemenu virtual bool ResolvePartial(llvm::StringRef Expr, 4872132Ssemenu llvm::StringSet<> &Output) = 0; 4972132Ssemenu 5072132Ssemenu /// Resolve an entire path that begins with a tilde expression, replacing 5172132Ssemenu /// the username portion with the matched result. 5272132Ssemenu bool ResolveFullPath(llvm::StringRef Expr, 5372132Ssemenu llvm::SmallVectorImpl<char> &Output); 5472132Ssemenu}; 5572132Ssemenu 5672132Ssemenuclass StandardTildeExpressionResolver : public TildeExpressionResolver { 5772132Ssemenupublic: 58129844Smarius bool ResolveExact(llvm::StringRef Expr, 59129844Smarius llvm::SmallVectorImpl<char> &Output) override; 60129844Smarius bool ResolvePartial(llvm::StringRef Expr, llvm::StringSet<> &Output) override; 6172132Ssemenu}; 6272132Ssemenu} 6372132Ssemenu 6472132Ssemenu#endif // #ifndef LLDB_UTILITY_TILDE_EXPRESSION_RESOLVER_H 6572132Ssemenu