Files
openidea/src/features/tools/index.ts
T
l0ng-ai e2f8e8d5bc fix(cpp): explain missing clang-tidy checks with Apple's clangd (#770)
Apple's clangd (/usr/bin/clangd, Xcode and CommandLineTools toolchains) is built without clang-tidy, so on a Mac without a managed clangd the checks from .clang-tidy never appear. When a clangd server for C, C++, Objective-C or Objective-C++ resolves to Apple's binary and the project has a .clang-tidy, show one warning per session with Install (managed LLVM clangd, which already takes precedence once installed) and Language Servers… actions. Fixes #692.
2026-11-02 11:14:27 +08:00

88 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Tools installer: Settings › Languages & Frameworks › Language Servers, plus
* install prompts for missing language servers.
*
* Actions: `tools.languageServers` (open the page), `tools.install` (arg: tool name),
* `java.downloadJdk` (arg: `DownloadJdkArgs`).
*/
import { lazyComponent } from "@/ui";
import { executeAction, registerActions } from "@/platform/actions";
import { registerSettingsPage } from "@/workbench/contributions";
import { installJdkPrompts, registerJdkActions } from "./jdk";
import { installMissingServerPrompts, installServerWarningPrompts, promptInstall } from "./missing";
import { installTool, refreshTools, SETTINGS_PAGE_ID, toolByName, useTools } from "./store";
/** The Language Servers page (also used by the Settings window). */
export function activateSettingsPages(): () => void {
return registerSettingsPage({
id: SETTINGS_PAGE_ID,
title: "Language Servers",
group: "Languages & Frameworks",
order: 400,
keywords: [
"lsp",
"language server",
"debugger",
"adapter",
"dap",
"install",
"initialization options",
"rust-analyzer",
"gopls",
"pyright",
],
projectScope: true,
component: lazyComponent(() => import("./LanguageServersPage").then((m) => m.LanguageServersPage)),
});
}
export function activate(): () => void {
const disposers = [
activateSettingsPages(),
registerActions([
{
id: "tools.promptInstall",
title: "Install Missing Tool",
hidden: true,
run: async ({ arg }) => {
if (arg && typeof arg === "object" && "name" in arg && typeof arg.name === "string") {
await promptInstall(arg.name, !("sticky" in arg) || arg.sticky !== false);
}
},
},
{
id: "tools.languageServers",
title: "Language Servers…",
category: "Tools",
icon: "package",
keywords: ["lsp", "install", "debugger", "adapter"],
run: () => void executeAction("file.settings", SETTINGS_PAGE_ID),
},
{
id: "tools.install",
title: "Install Language Server / Debugger",
category: "Tools",
hidden: true,
// Tools the IDE can't install (no recipe, missing npm/curl) open the page with the manual hint.
run: async ({ arg }) => {
if (typeof arg === "string") {
if (!useTools.getState().loaded) await refreshTools();
const tool = toolByName(arg);
// Unknown because the list failed to load: try anyway, so the failure is reported.
if (tool ? tool.canInstall : useTools.getState().error !== null) {
await installTool(arg);
return;
}
}
await executeAction("file.settings", SETTINGS_PAGE_ID);
},
},
]),
installMissingServerPrompts(),
installServerWarningPrompts(),
registerJdkActions(),
installJdkPrompts(),
];
return () => disposers.reverse().forEach((d) => d());
}