From 5a23029dacf091acf668a8d234af7b8c0e5ab4c8 Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Wed, 20 Oct 2021 01:52:00 +0200 Subject: [PATCH] Further reduce number of generated VS profiles (#11489) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit reduces the number of generated VS profiles from 6 down to just 2 per VS instance. The reason we did this is out of concern of overwhelming or annoying new users with too many profiles. Especially since it's far easier at the moment to add new generators compared to removing them. As before only the latest instance is not hidden by default. ## PR Checklist * [x] I work here * [x] Tests added/passed * [x] As discussed in a Team Sync meeting ## Validation Steps Performed * Installed Visual Studio 2019 and 2022 Preview * A profile for both is generated, while the 2019 one is hidden by default ✔️ * $env:VSCMD_ARG_TGT_ARCH is x64 on my AMD64 machine ✔️ --- ...crosoft.Terminal.Settings.ModelLib.vcxproj | 4 +- ...Terminal.Settings.ModelLib.vcxproj.filters | 8 +- .../VcDevCmdGenerator.cpp | 94 ------------------- .../TerminalSettingsModel/VcDevCmdGenerator.h | 40 -------- .../VisualStudioGenerator.cpp | 4 - .../VsDevCmdGenerator.cpp | 11 ++- .../VsDevShellGenerator.cpp | 17 +++- .../VsSetupConfiguration.cpp | 12 +-- .../VsSetupConfiguration.h | 8 +- 9 files changed, 30 insertions(+), 168 deletions(-) delete mode 100644 src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp delete mode 100644 src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h diff --git a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj index a5d82e34d..60de4fd1c 100644 --- a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj +++ b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj @@ -14,7 +14,6 @@ - DefaultTerminal.idl @@ -85,7 +84,6 @@ - DefaultTerminal.idl @@ -267,4 +265,4 @@ - \ No newline at end of file + diff --git a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters index 873dcb28c..a99f5e654 100644 --- a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters +++ b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters @@ -46,9 +46,6 @@ profileGeneration - - profileGeneration - @@ -95,9 +92,6 @@ profileGeneration - - profileGeneration - @@ -129,4 +123,4 @@ {81a6314f-aa5b-4533-a499-13bc3a5c4af0} - \ No newline at end of file + diff --git a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp b/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp deleted file mode 100644 index 633e5b94c..000000000 --- a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -#include "pch.h" -#include "DynamicProfileUtils.h" -#include "VcDevCmdGenerator.h" - -using namespace winrt::Microsoft::Terminal::Settings::Model; - -void VcDevCmdGenerator::GenerateProfiles(const VsSetupConfiguration::VsSetupInstance& instance, bool hidden, std::vector>& profiles) const -{ - try - { - const std::filesystem::path root{ GetVcCmdScriptDirectory(instance) }; - if (!std::filesystem::exists(root)) - { - return; - } - -// x64 environments only installed on 64-bit machines. -#ifdef _WIN64 - const auto vcvars64 = root / L"vcvars64.bat"; - if (std::filesystem::exists(vcvars64)) - { - auto profile = CreateProfile(instance, L"x64", vcvars64, hidden); - profiles.emplace_back(std::move(profile)); - - // Only the VC environment for the matching architecture should be shown by default. - hidden = true; - } - - const auto vcvarsamd64_x86 = root / L"vcvarsamd64_x86.bat"; - if (std::filesystem::exists(vcvarsamd64_x86)) - { - auto profile = CreateProfile(instance, L"x64_x86", vcvarsamd64_x86, true); - profiles.emplace_back(std::move(profile)); - } - - const auto vcvarsx86_amd64 = root / L"vcvarsx86_amd64.bat"; - if (std::filesystem::exists(vcvarsx86_amd64)) - { - auto profile = CreateProfile(instance, L"x86_x64", vcvarsx86_amd64, true); - profiles.emplace_back(std::move(profile)); - } -#endif // _WIN64 - - const auto vcvars32 = root / L"vcvars32.bat"; - if (std::filesystem::exists(vcvars32)) - { - auto profile = CreateProfile(instance, L"x86", vcvars32, hidden); - profiles.emplace_back(std::move(profile)); - } - } - CATCH_LOG(); -} - -winrt::com_ptr VcDevCmdGenerator::CreateProfile(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix, const std::filesystem::path& path, bool hidden) const -{ - const auto seed = GetProfileGuidSeed(instance, path); - const winrt::guid profileGuid{ ::Microsoft::Console::Utils::CreateV5Uuid(TERMINAL_PROFILE_NAMESPACE_GUID, gsl::as_bytes(gsl::make_span(seed))) }; - - auto profile = winrt::make_self(profileGuid); - profile->Name(winrt::hstring{ GetProfileName(instance, prefix) }); - profile->Commandline(winrt::hstring{ GetProfileCommandLine(path) }); - profile->StartingDirectory(winrt::hstring{ instance.GetInstallationPath() }); - profile->Icon(winrt::hstring{ GetProfileIconPath() }); - profile->Hidden(hidden); - - return profile; -} - -std::wstring VcDevCmdGenerator::GetProfileGuidSeed(const VsSetupConfiguration::VsSetupInstance& instance, const std::filesystem::path& path) const -{ - return L"VsDevCmd" + instance.GetInstanceId() + path.native(); -} - -std::wstring VcDevCmdGenerator::GetProfileName(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix) const -{ - std::wstring name{ prefix + L" Native Tools Command Prompt for VS " }; - name.append(instance.GetProfileNameSuffix()); - return name; -} - -std::wstring VcDevCmdGenerator::GetProfileCommandLine(const std::filesystem::path& path) const -{ - std::wstring commandLine{ L"cmd.exe /k \"" + path.native() + L"\"" }; - - return commandLine; -} - -std::wstring VcDevCmdGenerator::GetVcCmdScriptDirectory(const VsSetupConfiguration::VsSetupInstance& instance) const -{ - return instance.ResolvePath(L"VC\\Auxiliary\\Build\\"); -} diff --git a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h b/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h deleted file mode 100644 index 8e30cf28b..000000000 --- a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h +++ /dev/null @@ -1,40 +0,0 @@ -/*++ -Copyright (c) Microsoft Corporation -Licensed under the MIT license. - -Module Name: -- VcDevCmdGenerator - -Abstract: -- Dynamic profile generator for Visual C++ development environments. - -Author(s): -- Heath Stewart - September 2021 - ---*/ - -#pragma once -#include "VisualStudioGenerator.h" -#include "VsSetupConfiguration.h" - -namespace winrt::Microsoft::Terminal::Settings::Model -{ - class VcDevCmdGenerator final : public VisualStudioGenerator::IVisualStudioProfileGenerator - { - public: - void GenerateProfiles(const VsSetupConfiguration::VsSetupInstance& instance, bool hidden, std::vector>& profiles) const override; - - private: - winrt::com_ptr CreateProfile(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix, const std::filesystem::path& path, bool hidden) const; - - std::wstring GetProfileIconPath() const - { - return L"ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png"; - } - - std::wstring GetProfileGuidSeed(const VsSetupConfiguration::VsSetupInstance& instance, const std::filesystem::path& path) const; - std::wstring GetProfileName(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix) const; - std::wstring GetProfileCommandLine(const std::filesystem::path& path) const; - std::wstring GetVcCmdScriptDirectory(const VsSetupConfiguration::VsSetupInstance& instance) const; - }; -}; diff --git a/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp b/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp index 9e883205e..2c1069b3f 100644 --- a/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp +++ b/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp @@ -4,7 +4,6 @@ #include "pch.h" #include "DynamicProfileUtils.h" #include "VisualStudioGenerator.h" -#include "VcDevCmdGenerator.h" #include "VsDevCmdGenerator.h" #include "VsDevShellGenerator.h" @@ -20,7 +19,6 @@ void VisualStudioGenerator::GenerateProfiles(std::vector