1//===--- MakeUniqueCheck.cpp - clang-tidy----------------------------------===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "MakeUniqueCheck.h"
10
11using namespace clang::ast_matchers;
12
13namespace clang::tidy::modernize {
14
15MakeUniqueCheck::MakeUniqueCheck(StringRef Name,
16 clang::tidy::ClangTidyContext *Context)
17 : MakeSmartPtrCheck(Name, Context, "std::make_unique"),
18 RequireCPlusPlus14(Options.get(LocalName: "MakeSmartPtrFunction", Default: "").empty()) {}
19
20MakeUniqueCheck::SmartPtrTypeMatcher
21MakeUniqueCheck::getSmartPointerTypeMatcher() const {
22 return qualType(hasUnqualifiedDesugaredType(
23 InnerMatcher: recordType(hasDeclaration(InnerMatcher: classTemplateSpecializationDecl(
24 hasName(Name: "::std::unique_ptr"), templateArgumentCountIs(N: 2),
25 hasTemplateArgument(
26 N: 0, InnerMatcher: templateArgument(refersToType(InnerMatcher: qualType().bind(ID: PointerType)))),
27 hasTemplateArgument(
28 N: 1, InnerMatcher: templateArgument(refersToType(
29 InnerMatcher: qualType(hasDeclaration(InnerMatcher: classTemplateSpecializationDecl(
30 hasName(Name: "::std::default_delete"),
31 templateArgumentCountIs(N: 1),
32 hasTemplateArgument(
33 N: 0, InnerMatcher: templateArgument(refersToType(InnerMatcher: qualType(
34 equalsBoundNode(ID: PointerType))))))))))))))));
35}
36
37bool MakeUniqueCheck::isLanguageVersionSupported(
38 const LangOptions &LangOpts) const {
39 return RequireCPlusPlus14 ? LangOpts.CPlusPlus14 : LangOpts.CPlusPlus11;
40}
41
42// FixItHint is done by MakeSmartPtrCheck
43
44} // namespace clang::tidy::modernize
45

source code of clang-tools-extra/clang-tidy/modernize/MakeUniqueCheck.cpp