//=== unittests/Sema/ExternalSemaSourceTest.cpp - ExternalSemaSource tests ===// // // 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 "clang/AST/ASTConsumer.h" #include "clang/AST/ASTContext.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/Preprocessor.h" #include "clang/Parse/ParseAST.h" #include "clang/Sema/ExternalSemaSource.h" #include "clang/Sema/Sema.h" #include "clang/Sema/SemaDiagnostic.h" #include "clang/Sema/TypoCorrection.h" #include "clang/Tooling/Tooling.h" #include "gtest/gtest.h" usingnamespaceclang; usingnamespaceclang::tooling; namespace { // \brief Counts the number of times MaybeDiagnoseMissingCompleteType // is called. Returns the result it was provided on creation. class CompleteTypeDiagnoser : public clang::ExternalSemaSource { … }; /// Counts the number of typo-correcting diagnostics correcting from one name to /// another while still passing all diagnostics along a chain of consumers. class DiagnosticWatcher : public clang::DiagnosticConsumer { … }; // \brief Always corrects a typo matching CorrectFrom with a new namespace // with the name CorrectTo. class NamespaceTypoProvider : public clang::ExternalSemaSource { … }; class FunctionTypoProvider : public clang::ExternalSemaSource { … }; // \brief Chains together a vector of DiagnosticWatchers and // adds a vector of ExternalSemaSources to the CompilerInstance before // performing semantic analysis. class ExternalSemaSourceInstaller : public clang::ASTFrontendAction { … }; makeIntrusiveRefCnt; // Make sure that the DiagnosticWatcher is not miscounting. TEST(ExternalSemaSource, DiagCheck) { … } // Check that when we add a NamespaceTypeProvider, we use that suggestion // instead of the usual suggestion we would use above. TEST(ExternalSemaSource, ExternalTypoCorrectionPrioritized) { … } // Check that we use the first successful TypoCorrection returned from an // ExternalSemaSource. TEST(ExternalSemaSource, ExternalTypoCorrectionOrdering) { … } TEST(ExternalSemaSource, ExternalDelayedTypoCorrection) { … } // We should only try MaybeDiagnoseMissingCompleteType if we can't otherwise // solve the problem. TEST(ExternalSemaSource, TryOtherTacticsBeforeDiagnosing) { … } // The first ExternalSemaSource where MaybeDiagnoseMissingCompleteType returns // true should be the last one called. TEST(ExternalSemaSource, FirstDiagnoserTaken) { … } } // anonymous namespace