Files
swift-mirror/tools/SourceKit/lib/Core/Context.cpp
Alex Hoppen b6c94aecc3 [SourceKit] Add mechanism to load plugins for request handling into SourceKit
This allows us to load plugins into the sourcekitd service to handle requests (currently only used for code completion). This allows us to implement parts of sourcekitd in Swift and outside of the compiler repository, making it easier to iterated on them because the compiler doesn’t need to be rebuilt.
2025-01-03 15:24:52 +01:00

59 lines
2.2 KiB
C++

//===--- Context.cpp ------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#include "SourceKit/Core/Context.h"
#include "SourceKit/Core/LangSupport.h"
#include "SourceKit/Core/NotificationCenter.h"
using namespace SourceKit;
GlobalConfig::Settings GlobalConfig::update(
std::optional<unsigned> CompletionMaxASTContextReuseCount,
std::optional<unsigned> CompletionCheckDependencyInterval) {
llvm::sys::ScopedLock L(Mtx);
if (CompletionMaxASTContextReuseCount.has_value())
State.IDEInspectionOpts.MaxASTContextReuseCount =
*CompletionMaxASTContextReuseCount;
if (CompletionCheckDependencyInterval.has_value())
State.IDEInspectionOpts.CheckDependencyInterval =
*CompletionCheckDependencyInterval;
return State;
}
GlobalConfig::Settings::IDEInspectionOptions
GlobalConfig::getIDEInspectionOpts() const {
llvm::sys::ScopedLock L(Mtx);
return State.IDEInspectionOpts;
}
SourceKit::Context::Context(
StringRef SwiftExecutablePath, StringRef RuntimeLibPath,
StringRef DiagnosticDocumentationPath,
llvm::function_ref<std::unique_ptr<LangSupport>(Context &)>
LangSupportFactoryFn,
llvm::function_ref<std::shared_ptr<PluginSupport>(Context &)>
PluginSupportFactoryFn,
bool shouldDispatchNotificationsOnMain)
: SwiftExecutablePath(SwiftExecutablePath), RuntimeLibPath(RuntimeLibPath),
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
NotificationCtr(
new NotificationCenter(shouldDispatchNotificationsOnMain)),
Config(new GlobalConfig()), ReqTracker(new RequestTracker()),
SlowRequestSim(new SlowRequestSimulator(ReqTracker)) {
// Should be called last after everything is initialized.
SwiftLang = LangSupportFactoryFn(*this);
Plugins = PluginSupportFactoryFn(*this);
}
SourceKit::Context::~Context() {
}