Skip to content

Migrate Python and Cookiecutter options to native Unified Settings - #8662

Merged
Stella Huang (StellaHuang95) merged 10 commits into
microsoft:mainfrom
matteo-prosperi:copilot/usx-options-migration
Oct 30, 2026
Merged

Stella Huang (StellaHuang95) merged 10 commits into
microsoft:mainfrom
matteo-prosperi:copilot/usx-options-migration

Conversation

@matteo-prosperi

@matteo-prosperi Matteo Prosperi (matteo-prosperi) commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Convert eight legacy options pages to native Unified Settings for Visual Studio 2026 / 18.x, covering 39 previously visible settings: 36 Python/editor settings and three Cookiecutter settings.
  • Use one local import-completed flag per component. Any existing native customization, including an explicit default, skips that component's whole legacy import; otherwise import persisted values in one native writer batch and mark complete after a confirmed commit. An all-absent profile remains incomplete, matching the F# reference.
  • Treat USX as always enabled; remove classic-storage fallback. Preserve native notifications, typed path arrays, runtime overrides, and explicit error reporting.
  • Restore the legacy controls' visual order in every category, including Debugging's variable-presentation rows and Cookiecutter's alphabetically sorted property grid. Set cookiecutter.general.hideFromNavigation to true.
  • Exclude the previously identified three non-UI preferences and UseLibraryCodeForTypes, which also has no legacy page control. Preserve their legacy reads/writes/defaults, suppressed-dialog values, and trusted-workspace records.
  • Wire native settings navigation, the reset-suppressed-dialogs action, localized manifests, SDK dependencies, and shipping VSIX assets. Update the manifest-build SDK to 18.13.940 to validate hidden navigation categories without disabling strict checks.
  • Keep fixed formatter choices (black, autopep8, yapf) and the approved reset defaults: Type Checking Off and build-error prompting On. No external settings providers, independent roaming rules, or legacy import/export compatibility were added.
  • Remove the implementation plan from the PR; retain the local copy outside version control.

General settings ordering

  • Place the six migrated Python/General settings in an inline Python tools group beneath the built-in editor controls, preserving their original relative order and existing setting identities. The group adds no navigation entry. USX orders child groups after direct settings, avoiding unreliable numeric ordering against the editor settings' maximum default order.
  • Keep the reset-hidden-dialogs command in the General header. Revision b27f44817 is deployed to VS 18 Main using the default root suffix; installed files match the current VSIX by SHA-256.

Legacy UI cleanup

  • Delete all eight legacy page classes, their seven WinForms control/Designer/resource families, the Python page base, and Cookiecutter-only property-grid localization helpers: 32 obsolete files removed.
  • Remove all eight legacy page registrations and their project items, plus 35 unused shared/page-registration strings and the obsolete generated accessors.
  • Keep live runtime options models and legacy import storage identities. Cookiecutter's original property-key prefix is retained as a constant, without retaining its old page type; a regression verifies all three exact legacy paths.
  • Move suppressed-dialog and trusted-workspace reset behavior into its native action command. Preserve old page GUIDs in native category metadata for deep links, and navigate to native Analysis settings without a legacy page type.
  • Keep Cookiecutter's live template-creation view; it is unrelated to the deleted Tools > Options page.
image image image image image image image image

Validation

  • Affected product/test builds pass with deployment disabled, using VS 2026 Enterprise MSBuild; native test-project build also passes.
  • 42/42 targeted tests pass, including complete per-category ordering, Cookiecutter hidden navigation, group-wide import gating, batch failures, customized defaults, four legacy-only preference cases, reset persistence, and stable Cookiecutter import paths.
  • Both manifests pass strict SDK validation.
  • Rebuilt Core/Cookiecutter archives contain current binaries, 39 native definitions, and 121 resolving localized references (113 Core, eight Cookiecutter).
  • Packaged assemblies contain no deleted page/control/helper types or control resources; packaged registry definitions contain no legacy options-page registrations. Native Analysis navigation identity is preserved.
  • git diff --check passes. The pre-existing unrelated package.json changes remain excluded.
  • Latest revision b27f44817 deployed into the explicitly approved VS 18 Main default root suffix. Core installer exited successfully; all 26 installed Core DLL/resource/manifest/registry files match the latest VSIX by SHA-256. Cookiecutter remains current, with its DLL, registry definition, and settings manifest also verified against its VSIX. The six migrated General settings are placed in the inline group below the editor controls. Settings were not reset. This verifies deployment, not installed-VS runtime acceptance.

Approved editor-setting exception

  • Parameter Information: Preserve the existing standard editor machinery for TextEditor.Python.Auto List Params. VS promotes the declared apiOnly mapping to effective FullWithoutDefaults because this editor setting is shared/roamed. The user explicitly approved retaining that standard synchronization/roaming after the initial legacy-to-USX migration. This is an approved exception, not an unresolved blocker. The two component import-completed flags remain unchanged; no additional programmatic import passes, external settings provider, or independent roaming rule are introduced.

Remaining runtime validation

  • Installed-VS acceptance is unverified: live change propagation, the Parameter Information/text-manager/signature-help path, native settings Apply/Cancel, and native navigation/reset behavior still need runtime checks. Deployment alone does not establish those behaviors.

Add native Python and Cookiecutter settings, one-time legacy import, typed persistence, change notifications, navigation, and VS 2026 packaging. Keep hidden preferences and operational state in legacy storage. Add regression coverage and document remaining integration limitations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Use one completion flag and one import batch per component, assume native settings are always enabled, restore legacy setting order, hide Cookiecutter General from navigation, and exclude the non-UI analysis preference. Remove the implementation plan from the PR.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
1 pipeline(s) were filtered out due to trigger conditions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@StellaHuang95
Stella Huang (StellaHuang95) marked this pull request as ready for review October 30, 2026 17:16
@StellaHuang95
Stella Huang (StellaHuang95) requested a review from a team as a code owner October 30, 2026 17:16
@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run PTVS-Build

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@StellaHuang95

Stella Huang (StellaHuang95) commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

🔒 Automated review in progress — Stella Huang (@StellaHuang95) is auto-reviewing this PR.

@bschnurr Bill Schnurr (bschnurr) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved via Review Center.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved via Review Center.

@rchiodo Rich Chiodo (rchiodo) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved via Review Center.

auto-merge was automatically disabled October 30, 2026 18:09

Head branch was pushed to by a user without write access

@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run PTVS-Build

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
auto-merge was automatically disabled October 30, 2026 19:07

Head branch was pushed to by a user without write access

@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run PTVS-Build

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
auto-merge was automatically disabled October 30, 2026 20:24

Head branch was pushed to by a user without write access

@sonarqubecloud

Copy link
Copy Markdown

@StellaHuang95

Copy link
Copy Markdown
Contributor

/azp run PTVS-Build

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@StellaHuang95
Stella Huang (StellaHuang95) merged commit 219dfb5 into microsoft:main Oct 30, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants