| //===--- FeatureModulesTests.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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "Annotations.h" |
| #include "FeatureModule.h" |
| #include "Selection.h" |
| #include "TestTU.h" |
| #include "refactor/Tweak.h" |
| #include "support/Logger.h" |
| #include "llvm/Support/Error.h" |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| #include <memory> |
| |
| namespace clang { |
| namespace clangd { |
| namespace { |
| |
| TEST(FeatureModulesTest, ContributesTweak) { |
| static constexpr const char *TweakID = "ModuleTweak"; |
| struct TweakContributingModule final : public FeatureModule { |
| struct ModuleTweak final : public Tweak { |
| const char *id() const override { return TweakID; } |
| bool prepare(const Selection &Sel) override { return true; } |
| Expected<Effect> apply(const Selection &Sel) override { |
| return error("not implemented"); |
| } |
| std::string title() const override { return id(); } |
| llvm::StringLiteral kind() const override { |
| return llvm::StringLiteral(""); |
| }; |
| }; |
| |
| void contributeTweaks(std::vector<std::unique_ptr<Tweak>> &Out) override { |
| Out.emplace_back(new ModuleTweak); |
| } |
| }; |
| |
| FeatureModuleSet Set; |
| Set.add(std::make_unique<TweakContributingModule>()); |
| |
| auto AST = TestTU::withCode("").build(); |
| auto Tree = |
| SelectionTree::createRight(AST.getASTContext(), AST.getTokens(), 0, 0); |
| auto Actual = prepareTweak( |
| TweakID, Tweak::Selection(nullptr, AST, 0, 0, std::move(Tree), nullptr), |
| &Set); |
| ASSERT_TRUE(bool(Actual)); |
| EXPECT_EQ(Actual->get()->id(), TweakID); |
| } |
| |
| TEST(FeatureModulesTest, SuppressDiags) { |
| struct DiagModifierModule final : public FeatureModule { |
| struct Listener : public FeatureModule::ASTListener { |
| void sawDiagnostic(const clang::Diagnostic &Info, |
| clangd::Diag &Diag) override { |
| Diag.Severity = DiagnosticsEngine::Ignored; |
| } |
| }; |
| std::unique_ptr<ASTListener> astListeners() override { |
| return std::make_unique<Listener>(); |
| }; |
| }; |
| FeatureModuleSet FMS; |
| FMS.add(std::make_unique<DiagModifierModule>()); |
| |
| Annotations Code("[[test]]; /* error-ok */"); |
| TestTU TU; |
| TU.Code = Code.code().str(); |
| |
| { |
| auto AST = TU.build(); |
| EXPECT_THAT(*AST.getDiagnostics(), testing::Not(testing::IsEmpty())); |
| } |
| |
| TU.FeatureModules = &FMS; |
| { |
| auto AST = TU.build(); |
| EXPECT_THAT(*AST.getDiagnostics(), testing::IsEmpty()); |
| } |
| } |
| |
| } // namespace |
| } // namespace clangd |
| } // namespace clang |