1a60d06d8SSam McCall //===--- FeatureModule.cpp - Plugging features into clangd ----------------===// 2a60d06d8SSam McCall // 3a60d06d8SSam McCall // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4a60d06d8SSam McCall // See https://llvm.org/LICENSE.txt for license information. 5a60d06d8SSam McCall // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6a60d06d8SSam McCall // 7a60d06d8SSam McCall //===----------------------------------------------------------------------===// 8a60d06d8SSam McCall 9a60d06d8SSam McCall #include "FeatureModule.h" 10a60d06d8SSam McCall #include "support/Logger.h" 11a60d06d8SSam McCall 12a60d06d8SSam McCall namespace clang { 13a60d06d8SSam McCall namespace clangd { 14a60d06d8SSam McCall initialize(const Facilities & F)15a60d06d8SSam McCallvoid FeatureModule::initialize(const Facilities &F) { 16*94460f51SKazu Hirata assert(!Fac && "Initialized twice"); 17a60d06d8SSam McCall Fac.emplace(F); 18a60d06d8SSam McCall } 19a60d06d8SSam McCall facilities()20a60d06d8SSam McCallFeatureModule::Facilities &FeatureModule::facilities() { 21*94460f51SKazu Hirata assert(Fac && "Not initialized yet"); 22a60d06d8SSam McCall return *Fac; 23a60d06d8SSam McCall } 24a60d06d8SSam McCall addImpl(void * Key,std::unique_ptr<FeatureModule> M,const char * Source)25a60d06d8SSam McCallbool FeatureModuleSet::addImpl(void *Key, std::unique_ptr<FeatureModule> M, 26a60d06d8SSam McCall const char *Source) { 27a60d06d8SSam McCall if (!Map.try_emplace(Key, M.get()).second) { 28a60d06d8SSam McCall // Source should (usually) include the name of the concrete module type. 29a60d06d8SSam McCall elog("Tried to register duplicate feature modules via {0}", Source); 30a60d06d8SSam McCall return false; 31a60d06d8SSam McCall } 32a60d06d8SSam McCall Modules.push_back(std::move(M)); 33a60d06d8SSam McCall return true; 34a60d06d8SSam McCall } 35a60d06d8SSam McCall 36a60d06d8SSam McCall } // namespace clangd 37a60d06d8SSam McCall } // namespace clang 38