Files
swift-mirror/tools/SourceKit/lib/Core/Context.cpp
Rintaro Ishizaki 05a87e86c4 [CodeCompletion] Give up fast-completion if dependent files are modified
Check if dependencies are modified since the last checking.
Dependencies:

 - Other source files in the current module
 - Dependent files collected by the dependency tracker

When:

 - If the last dependency check was over N (defaults to 5) seconds ago

Invalidate if:

 - The dependency file is missing
 - The modification time of the dependecy is greater than the last check
 - If the modification time is zero, compare the content using the file
   system from the previous completion and the current completion

rdar://problem/62336432
2020-05-04 13:02:09 -07:00

51 lines
1.8 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(Optional<bool> OptimizeForIDE,
Optional<unsigned> CompletionCheckDependencyInterval) {
llvm::sys::ScopedLock L(Mtx);
if (OptimizeForIDE.hasValue())
State.OptimizeForIDE = *OptimizeForIDE;
if (CompletionCheckDependencyInterval.hasValue())
State.CompletionCheckDependencyInterval = *CompletionCheckDependencyInterval;
return State;
};
bool GlobalConfig::shouldOptimizeForIDE() const {
llvm::sys::ScopedLock L(Mtx);
return State.OptimizeForIDE;
}
unsigned GlobalConfig::getCompletionCheckDependencyInterval() const {
llvm::sys::ScopedLock L(Mtx);
return State.CompletionCheckDependencyInterval;
}
SourceKit::Context::Context(StringRef RuntimeLibPath,
llvm::function_ref<std::unique_ptr<LangSupport>(Context &)>
LangSupportFactoryFn,
bool shouldDispatchNotificationsOnMain) : RuntimeLibPath(RuntimeLibPath),
NotificationCtr(new NotificationCenter(shouldDispatchNotificationsOnMain)),
Config(new GlobalConfig()) {
// Should be called last after everything is initialized.
SwiftLang = LangSupportFactoryFn(*this);
}
SourceKit::Context::~Context() {
}