//===-- OptionsUtils.cpp - clang-tidy -------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "OptionsUtils.h"

namespace clang {
namespace tidy {
namespace utils {
namespace options {

static const char StringsDelimiter[] = ";";

std::vector<std::string> parseStringList(StringRef Option) {
  SmallVector<StringRef, 4> Names;
  Option.split(Names, StringsDelimiter);
  std::vector<std::string> Result;
  for (StringRef &Name : Names) {
    Name = Name.trim();
    if (!Name.empty())
      Result.emplace_back(Name);
  }
  return Result;
}

std::string serializeStringList(ArrayRef<std::string> Strings) {
  return llvm::join(Strings, StringsDelimiter);
}

} // namespace options
} // namespace utils
} // namespace tidy
} // namespace clang
