diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:04 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2023-02-11 12:38:11 +0000 |
| commit | e3b557809604d036af6e00c60f012c2025b59a5e (patch) | |
| tree | 8a11ba2269a3b669601e2fd41145b174008f4da8 /clang/lib/ExtractAPI/APIIgnoresList.cpp | |
| parent | 08e8dd7b9db7bb4a9de26d44c1cbfd24e869c014 (diff) | |
Diffstat (limited to 'clang/lib/ExtractAPI/APIIgnoresList.cpp')
| -rw-r--r-- | clang/lib/ExtractAPI/APIIgnoresList.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/APIIgnoresList.cpp b/clang/lib/ExtractAPI/APIIgnoresList.cpp new file mode 100644 index 000000000000..1d65ae2b8e31 --- /dev/null +++ b/clang/lib/ExtractAPI/APIIgnoresList.cpp @@ -0,0 +1,53 @@ +//===- ExtractAPI/APIIgnoresList.cpp -------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file implements APIIgnoresList that allows users to specifiy a file +/// containing symbols to ignore during API extraction. +/// +//===----------------------------------------------------------------------===// + +#include "clang/ExtractAPI/APIIgnoresList.h" +#include "clang/Basic/FileManager.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Support/Error.h" + +using namespace clang; +using namespace clang::extractapi; +using namespace llvm; + +char IgnoresFileNotFound::ID; + +void IgnoresFileNotFound::log(llvm::raw_ostream &os) const { + os << "Could not find API ignores file " << Path; +} + +std::error_code IgnoresFileNotFound::convertToErrorCode() const { + return llvm::inconvertibleErrorCode(); +} + +Expected<APIIgnoresList> APIIgnoresList::create(StringRef IgnoresFilePath, + FileManager &FM) { + auto BufferOrErr = FM.getBufferForFile(IgnoresFilePath); + if (!BufferOrErr) + return make_error<IgnoresFileNotFound>(IgnoresFilePath); + + auto Buffer = std::move(BufferOrErr.get()); + SmallVector<StringRef, 32> Lines; + Buffer->getBuffer().split(Lines, '\n', /*MaxSplit*/ -1, /*KeepEmpty*/ false); + // Symbol names don't have spaces in them, let's just remove these in case the + // input is slighlty malformed. + transform(Lines, Lines.begin(), [](StringRef Line) { return Line.trim(); }); + sort(Lines); + return APIIgnoresList(std::move(Lines), std::move(Buffer)); +} + +bool APIIgnoresList::shouldIgnore(StringRef SymbolName) const { + auto It = lower_bound(SymbolsToIgnore, SymbolName); + return (It != SymbolsToIgnore.end()) && (*It == SymbolName); +} |
