Файли
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 рядки
3.0 KiB
TypeScript
Неформатований Анотація Історія

Цей файл містить неоднозначні символи Юнікоду
Цей файл містить символи Юнікоду, які можна сплутати з іншими символами. Якщо ви вважаєте, що це зроблено навмисно, можете сміливо ігнорувати це попередження. Щоб показати їх, скористайтеся кнопкою Escape.
/**
* 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());
}