Sam McCall a60d06d8b7 [clangd] Rename Module -> FeatureModule to avoid confusion. NFC
As pointed out in D96244, "Module" is already pretty overloaded to refer
to clang and llvm modules. (And clangd deals directly with the former).

FeatureModule is a bit of a mouthful but it's pretty self-descriptive.
I think it might be better than "Component" which doesn't really capture
the "common interface" aspect - it's IMO confusing to refer to
"components" but exclude CDB for example.

Differential Revision: https://reviews.llvm.org/D97950
2021-03-05 10:04:00 +01:00

38 lines
1.1 KiB
C++

//===--- FeatureModule.cpp - Plugging features into clangd ----------------===//
//
// 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 "FeatureModule.h"
#include "support/Logger.h"
namespace clang {
namespace clangd {
void FeatureModule::initialize(const Facilities &F) {
assert(!Fac.hasValue() && "Initialized twice");
Fac.emplace(F);
}
FeatureModule::Facilities &FeatureModule::facilities() {
assert(Fac.hasValue() && "Not initialized yet");
return *Fac;
}
bool FeatureModuleSet::addImpl(void *Key, std::unique_ptr<FeatureModule> M,
const char *Source) {
if (!Map.try_emplace(Key, M.get()).second) {
// Source should (usually) include the name of the concrete module type.
elog("Tried to register duplicate feature modules via {0}", Source);
return false;
}
Modules.push_back(std::move(M));
return true;
}
} // namespace clangd
} // namespace clang