1 //===- ExtractAPI/APIIgnoresList.cpp -------*- C++ -*-===//
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-exception
7 //===----------------------------------------------------------------------===//
10 /// This file implements APIIgnoresList that allows users to specifiy a file
11 /// containing symbols to ignore during API extraction.
13 //===----------------------------------------------------------------------===//
15 #include "clang/ExtractAPI/APIIgnoresList.h"
16 #include "clang/Basic/FileManager.h"
17 #include "llvm/ADT/STLExtras.h"
18 #include "llvm/Support/Error.h"
20 using namespace clang
;
21 using namespace clang::extractapi
;
24 char IgnoresFileNotFound::ID
;
26 void IgnoresFileNotFound::log(llvm::raw_ostream
&os
) const {
27 os
<< "Could not find API ignores file " << Path
;
30 std::error_code
IgnoresFileNotFound::convertToErrorCode() const {
31 return llvm::inconvertibleErrorCode();
34 Expected
<APIIgnoresList
>
35 APIIgnoresList::create(const FilePathList
&IgnoresFilePathList
,
37 SmallVector
<StringRef
, 32> Lines
;
38 BufferList symbolBufferList
;
40 for (const auto &CurrentIgnoresFilePath
: IgnoresFilePathList
) {
41 auto BufferOrErr
= FM
.getBufferForFile(CurrentIgnoresFilePath
);
44 return make_error
<IgnoresFileNotFound
>(CurrentIgnoresFilePath
);
46 auto Buffer
= std::move(BufferOrErr
.get());
47 Buffer
->getBuffer().split(Lines
, '\n', /*MaxSplit*/ -1,
49 symbolBufferList
.push_back(std::move(Buffer
));
52 // Symbol names don't have spaces in them, let's just remove these in case
53 // the input is slighlty malformed.
54 transform(Lines
, Lines
.begin(), [](StringRef Line
) { return Line
.trim(); });
56 return APIIgnoresList(std::move(Lines
), std::move(symbolBufferList
));
59 bool APIIgnoresList::shouldIgnore(StringRef SymbolName
) const {
60 auto It
= lower_bound(SymbolsToIgnore
, SymbolName
);
61 return (It
!= SymbolsToIgnore
.end()) && (*It
== SymbolName
);