UNPKG

sussudio

Version:

An unofficial VS Code Internal API

111 lines (110 loc) 4.34 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Codicon } from "../../../base/common/codicons.mjs"; import { URI } from "../../../base/common/uri.mjs"; import { localize } from "../../../nls.mjs"; import { ThemeIcon } from "../../theme/common/themeService.mjs"; export function createProfileSchemaEnums(detectedProfiles, extensionProfiles) { const result = [{ name: null, description: localize('terminalAutomaticProfile', 'Automatically detect the default') }]; result.push(...detectedProfiles.map(e => { return { name: e.profileName, description: createProfileDescription(e) }; })); if (extensionProfiles) { result.push(...extensionProfiles.map(extensionProfile => { return { name: extensionProfile.title, description: createExtensionProfileDescription(extensionProfile) }; })); } return { values: result.map(e => e.name), markdownDescriptions: result.map(e => e.description) }; } function createProfileDescription(profile) { let description = `$(${ThemeIcon.isThemeIcon(profile.icon) ? profile.icon.id : profile.icon ? profile.icon : Codicon.terminal.id}) ${profile.profileName}\n- path: ${profile.path}`; if (profile.args) { if (typeof profile.args === 'string') { description += `\n- args: "${profile.args}"`; } else { description += `\n- args: [${profile.args.length === 0 ? '' : `'${profile.args.join(`','`)}'`}]`; } } if (profile.overrideName !== undefined) { description += `\n- overrideName: ${profile.overrideName}`; } if (profile.color) { description += `\n- color: ${profile.color}`; } if (profile.env) { description += `\n- env: ${JSON.stringify(profile.env)}`; } return description; } function createExtensionProfileDescription(profile) { const description = `$(${ThemeIcon.isThemeIcon(profile.icon) ? profile.icon.id : profile.icon ? profile.icon : Codicon.terminal.id}) ${profile.title}\n- extensionIdentifier: ${profile.extensionIdentifier}`; return description; } export function terminalProfileArgsMatch(args1, args2) { if (!args1 && !args2) { return true; } else if (typeof args1 === 'string' && typeof args2 === 'string') { return args1 === args2; } else if (Array.isArray(args1) && Array.isArray(args2)) { if (args1.length !== args2.length) { return false; } for (let i = 0; i < args1.length; i++) { if (args1[i] !== args2[i]) { return false; } } return true; } return false; } export function terminalIconsEqual(a, b) { if (!a && !b) { return true; } else if (!a || !b) { return false; } if (ThemeIcon.isThemeIcon(a) && ThemeIcon.isThemeIcon(b)) { return a.id === b.id && a.color === b.color; } if (typeof a === 'object' && 'light' in a && 'dark' in a && typeof b === 'object' && 'light' in b && 'dark' in b) { const castedA = a; const castedB = b; if ((URI.isUri(castedA.light) || isUriComponents(castedA.light)) && (URI.isUri(castedA.dark) || isUriComponents(castedA.dark)) && (URI.isUri(castedB.light) || isUriComponents(castedB.light)) && (URI.isUri(castedB.dark) || isUriComponents(castedB.dark))) { return castedA.light.path === castedB.light.path && castedA.dark.path === castedB.dark.path; } } if ((URI.isUri(a) && URI.isUri(b)) || (isUriComponents(a) || isUriComponents(b))) { const castedA = a; const castedB = b; return castedA.path === castedB.path && castedA.scheme === castedB.scheme; } return false; } export function isUriComponents(thing) { if (!thing) { return false; } return typeof thing.path === 'string' && typeof thing.scheme === 'string'; }