brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 38461e3 Raw
53 lines · cpp
1//===--- FeatureModule.cpp - Plugging features into clangd ----------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "FeatureModule.h"10#include "support/Logger.h"11 12namespace clang {13namespace clangd {14 15void FeatureModule::initialize(const Facilities &F) {16  assert(!Fac && "Initialized twice");17  Fac.emplace(F);18}19 20FeatureModule::Facilities &FeatureModule::facilities() {21  assert(Fac && "Not initialized yet");22  return *Fac;23}24 25void FeatureModuleSet::add(std::unique_ptr<FeatureModule> M) {26  Modules.push_back(std::move(M));27}28 29bool FeatureModuleSet::addImpl(void *Key, std::unique_ptr<FeatureModule> M,30                               const char *Source) {31  if (!Map.try_emplace(Key, M.get()).second) {32    // Source should (usually) include the name of the concrete module type.33    elog("Tried to register duplicate feature modules via {0}", Source);34    return false;35  }36  Modules.push_back(std::move(M));37  return true;38}39 40FeatureModuleSet FeatureModuleSet::fromRegistry() {41  FeatureModuleSet ModuleSet;42  for (FeatureModuleRegistry::entry E : FeatureModuleRegistry::entries()) {43    vlog("Adding feature module '{0}' ({1})", E.getName(), E.getDesc());44    ModuleSet.add(E.instantiate());45  }46  return ModuleSet;47}48 49} // namespace clangd50} // namespace clang51 52LLVM_INSTANTIATE_REGISTRY(clang::clangd::FeatureModuleRegistry)53