brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 08381b3 Raw
81 lines · cpp
1//===-- MockTildeExpressionResolver.cpp -----------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "MockTildeExpressionResolver.h"10#include "llvm/ADT/STLExtras.h"11#include "llvm/Support/Path.h"12 13using namespace lldb_private;14using namespace llvm;15 16MockTildeExpressionResolver::MockTildeExpressionResolver(StringRef CurrentUser,17                                                         StringRef HomeDir)18    : CurrentUser(CurrentUser) {19  UserDirectories.insert(std::make_pair(CurrentUser, HomeDir));20}21 22void MockTildeExpressionResolver::AddKnownUser(StringRef User,23                                               StringRef HomeDir) {24  assert(!UserDirectories.contains(User));25  UserDirectories.insert(std::make_pair(User, HomeDir));26}27 28void MockTildeExpressionResolver::Clear() {29  CurrentUser = StringRef();30  UserDirectories.clear();31}32 33void MockTildeExpressionResolver::SetCurrentUser(StringRef User) {34  assert(UserDirectories.contains(User));35  CurrentUser = User;36}37 38bool MockTildeExpressionResolver::ResolveExact(StringRef Expr,39                                               SmallVectorImpl<char> &Output) {40  Output.clear();41 42  assert(!llvm::any_of(43      Expr, [](char c) { return llvm::sys::path::is_separator(c); }));44  assert(Expr.empty() || Expr[0] == '~');45  Expr = Expr.drop_front();46  if (Expr.empty()) {47    auto Dir = UserDirectories[CurrentUser];48    Output.append(Dir.begin(), Dir.end());49    return true;50  }51 52  for (const auto &User : UserDirectories) {53    if (User.getKey() != Expr)54      continue;55    Output.append(User.getValue().begin(), User.getValue().end());56    return true;57  }58  return false;59}60 61bool MockTildeExpressionResolver::ResolvePartial(StringRef Expr,62                                                 StringSet<> &Output) {63  Output.clear();64 65  assert(!llvm::any_of(66      Expr, [](char c) { return llvm::sys::path::is_separator(c); }));67  assert(Expr.empty() || Expr[0] == '~');68  Expr = Expr.drop_front();69 70  SmallString<16> QualifiedName("~");71  for (const auto &User : UserDirectories) {72    if (!User.getKey().starts_with(Expr))73      continue;74    QualifiedName.resize(1);75    QualifiedName.append(User.getKey().begin(), User.getKey().end());76    Output.insert(QualifiedName);77  }78 79  return !Output.empty();80}81