Skip to content

[SourceKit] Remove diagnostics path calculation #81582

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions include/swift/IDETool/CompileInstance.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ namespace ide {
class CompileInstance {
const std::string &SwiftExecutablePath;
const std::string &RuntimeResourcePath;
const std::string &DiagnosticDocumentationPath;
const std::shared_ptr<swift::PluginRegistry> Plugins;

struct Options {
Expand Down Expand Up @@ -70,12 +69,10 @@ class CompileInstance {
public:
CompileInstance(const std::string &SwiftExecutablePath,
const std::string &RuntimeResourcePath,
const std::string &DiagnosticDocumentationPath,
std::shared_ptr<swift::PluginRegistry> Plugins = nullptr)
: SwiftExecutablePath(SwiftExecutablePath),
RuntimeResourcePath(RuntimeResourcePath),
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
Plugins(Plugins), CachedCIInvalidated(false), CachedReuseCount(0) {}
RuntimeResourcePath(RuntimeResourcePath), Plugins(Plugins),
CachedCIInvalidated(false), CachedReuseCount(0) {}

/// NOTE: \p Args is only used for checking the equaity of the invocation.
/// Since this function assumes that it is already normalized, exact the same
Expand Down
3 changes: 1 addition & 2 deletions include/swift/IDETool/CompilerInvocation.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ bool initCompilerInvocation(
StringRef UnresolvedPrimaryFile,
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FileSystem,
const std::string &swiftExecutablePath,
const std::string &runtimeResourcePath,
const std::string &diagnosticDocumentationPath, time_t sessionTimestamp,
const std::string &runtimeResourcePath, time_t sessionTimestamp,
std::string &Error);

bool initInvocationByClangArguments(ArrayRef<const char *> ArgList,
Expand Down
6 changes: 2 additions & 4 deletions lib/IDETool/CompileInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,11 +258,9 @@ bool CompileInstance::setupCI(
auto &Diags = CI->getDiags();

SmallVector<const char *, 16> args;
// Put '-resource-dir' and '-diagnostic-documentation-path' at the top to
// allow overriding them with the passed in arguments.
// Put '-resource-dir' at the top to allow overriding them with the passed in
// arguments.
args.append({"-resource-dir", RuntimeResourcePath.c_str()});
args.append({"-Xfrontend", "-diagnostic-documentation-path", "-Xfrontend",
DiagnosticDocumentationPath.c_str()});
args.append(origArgs.begin(), origArgs.end());

SmallString<256> driverPath(SwiftExecutablePath);
Expand Down
11 changes: 3 additions & 8 deletions lib/IDETool/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,18 +157,13 @@ bool ide::initCompilerInvocation(
StringRef UnresolvedPrimaryFile,
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FileSystem,
const std::string &swiftExecutablePath,
const std::string &runtimeResourcePath,
const std::string &diagnosticDocumentationPath, time_t sessionTimestamp,
const std::string &runtimeResourcePath, time_t sessionTimestamp,
std::string &Error) {
SmallVector<const char *, 16> Args;
// Make sure to put '-resource-dir' and '-diagnostic-documentation-path' at
// the top to allow overriding them with the passed in arguments.
// Make sure to put '-resource-dir' at the top to allow overriding them with
// the passed in arguments.
Args.push_back("-resource-dir");
Args.push_back(runtimeResourcePath.c_str());
Args.push_back("-Xfrontend");
Args.push_back("-diagnostic-documentation-path");
Args.push_back("-Xfrontend");
Args.push_back(diagnosticDocumentationPath.c_str());
Args.append(OrigArgs.begin(), OrigArgs.end());

SmallString<32> ErrStr;
Expand Down
6 changes: 3 additions & 3 deletions test/SourceKit/Sema/educational_note_diags.swift
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
typealias Crap = () -> ()
extension Crap {}
typealias Foo = () -> ()
extension Foo {}

// RUN: %sourcekitd-test -req=sema %s -- %s | %FileCheck %s -check-prefix=NO_OVERRIDE

// NO_OVERRIDE: key.description: "non-nominal type
// NO_OVERRIDE: key.educational_note_paths: [
// NO_OVERRIDE-NEXT: share{{[/\\]+}}doc{{[/\\]+}}swift{{[/\\]+}}diagnostics{{[/\\]+}}nominal-types"
// NO_OVERRIDE-NEXT: "https://docs.swift.org/compiler/documentation/diagnostics/nominal-types"
// NO_OVERRIDE-NEXT: ]

// RUN: %sourcekitd-test -req=sema %s -- -Xfrontend -diagnostic-documentation-path -Xfrontend /educational/notes/path/prefix %s | %FileCheck %s -check-prefix=OVERRIDE
Expand Down
5 changes: 0 additions & 5 deletions tools/SourceKit/include/SourceKit/Core/Context.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,6 @@ class Context {
/// Used to find clang relative to it.
std::string SwiftExecutablePath;
std::string RuntimeLibPath;
std::string DiagnosticDocumentationPath;
std::unique_ptr<LangSupport> SwiftLang;
std::shared_ptr<NotificationCenter> NotificationCtr;
std::shared_ptr<GlobalConfig> Config;
Expand All @@ -176,7 +175,6 @@ class Context {

public:
Context(StringRef SwiftExecutablePath, StringRef RuntimeLibPath,
StringRef DiagnosticDocumentationPath,
llvm::function_ref<std::unique_ptr<LangSupport>(Context &)>
LangSupportFactoryFn,
llvm::function_ref<std::shared_ptr<PluginSupport>(Context &)>
Expand All @@ -187,9 +185,6 @@ class Context {
StringRef getSwiftExecutablePath() const { return SwiftExecutablePath; }

StringRef getRuntimeLibPath() const { return RuntimeLibPath; }
StringRef getDiagnosticDocumentationPath() const {
return DiagnosticDocumentationPath;
}

LangSupport &getSwiftLangSupport() { return *SwiftLang; }

Expand Down
2 changes: 0 additions & 2 deletions tools/SourceKit/lib/Core/Context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,12 @@ GlobalConfig::getIDEInspectionOpts() const {

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()),
Expand Down
13 changes: 5 additions & 8 deletions tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -564,12 +564,11 @@ struct SwiftASTManager::Implementation {
std::shared_ptr<SwiftStatistics> Stats,
std::shared_ptr<RequestTracker> ReqTracker,
std::shared_ptr<PluginRegistry> Plugins, StringRef SwiftExecutablePath,
StringRef RuntimeResourcePath, StringRef DiagnosticDocumentationPath)
StringRef RuntimeResourcePath)
: EditorDocs(EditorDocs), Config(Config), Stats(Stats),
ReqTracker(ReqTracker), Plugins(Plugins),
SwiftExecutablePath(SwiftExecutablePath),
RuntimeResourcePath(RuntimeResourcePath),
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
SessionTimestamp(llvm::sys::toTimeT(std::chrono::system_clock::now())) {
}

Expand All @@ -582,7 +581,6 @@ struct SwiftASTManager::Implementation {
/// Used to find clang relative to it.
std::string SwiftExecutablePath;
std::string RuntimeResourcePath;
std::string DiagnosticDocumentationPath;
SourceManager SourceMgr;
Cache<ASTKey, ASTProducerRef> ASTCache{ "sourcekit.swift.ASTCache" };
llvm::sys::Mutex CacheMtx;
Expand Down Expand Up @@ -668,10 +666,9 @@ SwiftASTManager::SwiftASTManager(
std::shared_ptr<SwiftStatistics> Stats,
std::shared_ptr<RequestTracker> ReqTracker,
std::shared_ptr<PluginRegistry> Plugins, StringRef SwiftExecutablePath,
StringRef RuntimeResourcePath, StringRef DiagnosticDocumentationPath)
StringRef RuntimeResourcePath)
: Impl(*new Implementation(EditorDocs, Config, Stats, ReqTracker, Plugins,
SwiftExecutablePath, RuntimeResourcePath,
DiagnosticDocumentationPath)) {}
SwiftExecutablePath, RuntimeResourcePath)) {}

SwiftASTManager::~SwiftASTManager() {
delete &Impl;
Expand Down Expand Up @@ -710,8 +707,8 @@ bool SwiftASTManager::initCompilerInvocation(
std::string &Error) {
return ide::initCompilerInvocation(
Invocation, OrigArgs, Action, Diags, UnresolvedPrimaryFile, FileSystem,
Impl.SwiftExecutablePath, Impl.RuntimeResourcePath,
Impl.DiagnosticDocumentationPath, Impl.SessionTimestamp, Error);
Impl.SwiftExecutablePath, Impl.RuntimeResourcePath, Impl.SessionTimestamp,
Error);
}

bool SwiftASTManager::initCompilerInvocation(
Expand Down
3 changes: 1 addition & 2 deletions tools/SourceKit/lib/SwiftLang/SwiftASTManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,7 @@ class SwiftASTManager : public std::enable_shared_from_this<SwiftASTManager> {
std::shared_ptr<RequestTracker> ReqTracker,
std::shared_ptr<swift::PluginRegistry> Plugins,
StringRef SwiftExecutablePath,
StringRef RuntimeResourcePath,
StringRef DiagnosticDocumentationPath);
StringRef RuntimeResourcePath);
~SwiftASTManager();

SwiftInvocationRef getTypecheckInvocation(ArrayRef<const char *> Args,
Expand Down
7 changes: 3 additions & 4 deletions tools/SourceKit/lib/SwiftLang/SwiftCompile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,9 @@ compile::SessionManager::getSession(StringRef name) {
}

bool inserted = false;
std::tie(i, inserted) =
sessions.try_emplace(name, std::make_shared<compile::Session>(
SwiftExecutablePath, RuntimeResourcePath,
DiagnosticDocumentationPath, Plugins));
std::tie(i, inserted) = sessions.try_emplace(
name, std::make_shared<compile::Session>(SwiftExecutablePath,
RuntimeResourcePath, Plugins));
assert(inserted);
return i->second;
}
Expand Down
7 changes: 2 additions & 5 deletions tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,6 @@ SwiftLangSupport::SwiftLangSupport(SourceKit::Context &SKCtx)
llvm::SmallString<128> LibPath(SKCtx.getRuntimeLibPath());
llvm::sys::path::append(LibPath, "swift");
RuntimeResourcePath = std::string(LibPath.str());
DiagnosticDocumentationPath = SKCtx.getDiagnosticDocumentationPath().str();

Stats = std::make_shared<SwiftStatistics>();
EditorDocuments = std::make_shared<SwiftEditorDocumentFileMap>();
Expand All @@ -290,16 +289,14 @@ SwiftLangSupport::SwiftLangSupport(SourceKit::Context &SKCtx)

ASTMgr = std::make_shared<SwiftASTManager>(
EditorDocuments, SKCtx.getGlobalConfiguration(), Stats, ReqTracker,
Plugins, SwiftExecutablePath, RuntimeResourcePath,
DiagnosticDocumentationPath);
Plugins, SwiftExecutablePath, RuntimeResourcePath);

IDEInspectionInst = std::make_shared<IDEInspectionInstance>(Plugins);
configureIDEInspectionInstance(IDEInspectionInst,
SKCtx.getGlobalConfiguration());

CompileManager = std::make_shared<compile::SessionManager>(
SwiftExecutablePath, RuntimeResourcePath, DiagnosticDocumentationPath,
Plugins);
SwiftExecutablePath, RuntimeResourcePath, Plugins);

// By default, just use the in-memory cache.
CCCache->inMemory = std::make_unique<ide::CodeCompletionCache>();
Expand Down
14 changes: 2 additions & 12 deletions tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,10 +283,8 @@ class Session {
public:
Session(const std::string &SwiftExecutablePath,
const std::string &RuntimeResourcePath,
const std::string &DiagnosticDocumentationPath,
std::shared_ptr<swift::PluginRegistry> Plugins)
: Compiler(SwiftExecutablePath, RuntimeResourcePath,
DiagnosticDocumentationPath, Plugins) {}
: Compiler(SwiftExecutablePath, RuntimeResourcePath, Plugins) {}

bool
performCompile(llvm::ArrayRef<const char *> Args,
Expand All @@ -300,7 +298,6 @@ class Session {
class SessionManager {
const std::string &SwiftExecutablePath;
const std::string &RuntimeResourcePath;
const std::string &DiagnosticDocumentationPath;
const std::shared_ptr<swift::PluginRegistry> Plugins;

llvm::StringMap<std::shared_ptr<Session>> sessions;
Expand All @@ -311,12 +308,9 @@ class SessionManager {
public:
SessionManager(const std::string &SwiftExecutablePath,
const std::string &RuntimeResourcePath,
const std::string &DiagnosticDocumentationPath,
const std::shared_ptr<swift::PluginRegistry> Plugins)
: SwiftExecutablePath(SwiftExecutablePath),
RuntimeResourcePath(RuntimeResourcePath),
DiagnosticDocumentationPath(DiagnosticDocumentationPath),
Plugins(Plugins) {}
RuntimeResourcePath(RuntimeResourcePath), Plugins(Plugins) {}

std::shared_ptr<Session> getSession(StringRef name);

Expand All @@ -342,7 +336,6 @@ class SwiftLangSupport : public LangSupport {
/// Used to find clang relative to it.
std::string SwiftExecutablePath;
std::string RuntimeResourcePath;
std::string DiagnosticDocumentationPath;
std::shared_ptr<SwiftASTManager> ASTMgr;
std::shared_ptr<SwiftEditorDocumentFileMap> EditorDocuments;
std::shared_ptr<RequestTracker> ReqTracker;
Expand All @@ -366,9 +359,6 @@ class SwiftLangSupport : public LangSupport {
}

StringRef getRuntimeResourcePath() const { return RuntimeResourcePath; }
StringRef getDiagnosticDocumentationPath() const {
return DiagnosticDocumentationPath;
}

std::shared_ptr<SwiftASTManager> getASTManager() { return ASTMgr; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class Connection {
std::shared_ptr<CodeCompletionCache> completionCache;
std::string swiftExecutablePath;
std::string runtimeResourcePath;
std::string diagnosticsDocumentationPath;
std::shared_ptr<SourceKit::RequestTracker> requestTracker;

public:
Expand All @@ -87,7 +86,6 @@ class Connection {
completionCache(std::make_shared<CodeCompletionCache>()),
swiftExecutablePath(getSwiftExecutablePath()),
runtimeResourcePath(getRuntimeResourcesPath()),
diagnosticsDocumentationPath(getDiagnosticDocumentationPath()),
requestTracker(new SourceKit::RequestTracker()),
sessionTimestamp(llvm::sys::toTimeT(std::chrono::system_clock::now())) {
if (ideInspectionInstance == nullptr) {
Expand Down Expand Up @@ -371,8 +369,8 @@ void Connection::codeComplete(
std::string compilerInvocationError;
bool creatingInvocationFailed = initCompilerInvocation(
invocation, args, FrontendOptions::ActionType::Typecheck, diags, path,
fileSystem, swiftExecutablePath, runtimeResourcePath,
diagnosticsDocumentationPath, sessionTimestamp, compilerInvocationError);
fileSystem, swiftExecutablePath, runtimeResourcePath, sessionTimestamp,
compilerInvocationError);
if (creatingInvocationFailed) {
callback(ResultType::failure(compilerInvocationError));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ _ZN10sourcekitd13handleRequestEPvPKvNSt3__18functionIFvS0_EEE
_ZN10sourcekitd16requestIsBarrierEPv
_ZN10sourcekitd23requestIsEnableBarriersEPv
_ZN10sourcekitd27sendBarriersEnabledResponseENSt3__18functionIFvPvEEE
_ZN10sourcekitd17initializeServiceEN4llvm9StringRefES1_S1_NSt3__18functionIFvPvEEE
_ZN10sourcekitd17initializeServiceEN4llvm9StringRefES1_NSt3__18functionIFvPvEEE
_ZN10sourcekitd24createErrorRequestFailedEN4llvm9StringRefE
_ZN10sourcekitd24disposeCancellationTokenEPKv
_ZN10sourcekitd11loadPluginsEN4llvm8ArrayRefINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEERNS_16PluginInitParamsE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,6 @@ std::string sourcekitdInProc::getSwiftExecutablePath() {
return path.str().str();
}

std::string sourcekitdInProc::getDiagnosticDocumentationPath() {
llvm::SmallString<128> docPath;
getToolchainPrefixPath(docPath);
llvm::sys::path::append(docPath, "share", "doc", "swift", "diagnostics");
return docPath.str().str();
}

static std::vector<std::string> registeredPlugins;

void sourcekitd_load_client_plugins(void) {
Expand All @@ -117,10 +110,9 @@ void sourcekitd_initialize(void) {
"sourcekitdInProc.msgHandlingQueue");
if (sourcekitd::initializeClient()) {
LOG_INFO_FUNC(High, "initializing");
sourcekitd::initializeService(
sourcekitdInProc::getSwiftExecutablePath(),
sourcekitdInProc::getRuntimeLibPath(),
sourcekitdInProc::getDiagnosticDocumentationPath(), postNotification);
sourcekitd::initializeService(sourcekitdInProc::getSwiftExecutablePath(),
sourcekitdInProc::getRuntimeLibPath(),
postNotification);
static std::once_flag flag;
std::call_once(flag, [] {
sourcekitd::PluginInitParams pluginParams(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,13 +225,6 @@ static std::string getSwiftExecutablePath() {
return path.str().str();
}

static std::string getDiagnosticDocumentationPath() {
llvm::SmallString<128> path;
getToolchainPrefixPath(path);
llvm::sys::path::append(path, "share", "doc", "swift", "diagnostics");
return path.str().str();
}

static dispatch_queue_t msgHandlingQueue;
static dispatch_queue_t requestQueue;

Expand Down Expand Up @@ -415,7 +408,6 @@ int main(int argc, const char *argv[]) {
return xpcUIdentFromSKDUID(uid).c_str();
});
sourcekitd::initializeService(getSwiftExecutablePath(), getRuntimeLibPath(),
getDiagnosticDocumentationPath(),
postNotification);

// Increase the file descriptor limit.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,9 @@ using SourceKit::SourceKitCancellationToken;
/// \param swiftExecutablePath The path of the swift-frontend executable.
/// Used to find clang relative to it.
/// \param runtimeLibPath The path to the toolchain's library directory.
/// \param diagnosticDocumentationPath The path to diagnostics documentation.
/// \param postNotification Callback to post a notification.
void initializeService(
llvm::StringRef swiftExecutablePath, llvm::StringRef runtimeLibPath,
llvm::StringRef diagnosticDocumentationPath,
std::function<void(sourcekitd_response_t)> postNotification);
/// Shutdown the service.
void shutdownService();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
namespace sourcekitdInProc {
std::string getRuntimeLibPath();
std::string getSwiftExecutablePath();
std::string getDiagnosticDocumentationPath();
} // namespace sourcekitdInProc

#endif
Loading