Allow user to force the default implicit formatting to use AutoSize - #28018
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
🟡 Changes recommended
Critical formatting defects and missing regression coverage must be addressed before approval.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds $PSStyle.AutoSizeDefaultFormatting to enable AutoSize for implicit table and wide formatting.
Changes:
- Adds the new
$PSStylesetting. - Applies it during default formatting.
- Adds formatting tests.
File summaries
| File | Review findings |
|---|---|
test/powershell/engine/Formatting/PSStyle.Tests.ps1 |
Moderate (3 votes): Add coverage for implicit wide views and untyped objects. Moderate (1 vote): Restore the original process-wide setting in cleanup rather than hard-coding $false. |
src/System.Management.Automation/FormatAndOutput/format-default/format-default.cs |
Critical (3 votes): Preserve null parameters during shape inference for objects without default views. Critical (3 votes): Apply the override only to selected Table or Wide views to avoid buffering List and Complex output. |
src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs |
Nit (1 vote): Include AutoSizeDefaultFormatting in the default $PSStyle formatter view. |
Review details
Suppressed comments (2)
src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs:647
- The default
PSStyleview is an explicitListControlthat enumerates the top-level settings (PowerShellCore_format_ps1xml.cs:2139-2212), but it has no entry forAutoSizeDefaultFormatting. As a result,$PSStyleand$PSStyle | Format-Listhide this new user-facing setting; add it to the generated default formatter view.
public bool AutoSizeDefaultFormatting { get; set; }
test/powershell/engine/Formatting/PSStyle.Tests.ps1:624
- The cleanup hard-codes
$falseinstead of restoring the value present when the test started. BecausePSStyle.Instanceis process-wide and the surrounding tests save and restore settings (for example, lines 143-153), this can leak state to later tests and makes the test depend on an initially disabled feature. Save the original value, establish a false baseline before capturing$defaultOutput, and restore the original infinally.
$PSStyle.AutoSizeDefaultFormatting = $false
- Files reviewed: 3/3 changed files
- Comments generated: 3
- Review effort level: Lite
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🔵 Needs a closer look
Fix autosizing for inferred views and update the user-facing documentation/checklist.
Review details
Suppressed comments (2)
src/System.Management.Automation/FormatAndOutput/common/PSStyle.cs:647
- This adds a new public
$PSStylesetting that users must discover and configure, while the PR checklist marks “User-facing changes” as Not Applicable. Please update the user-facingPSStyledocumentation (or file the required documentation issue) and correct the checklist before merging.
public bool AutoSizeDefaultFormatting { get; set; }
src/System.Management.Automation/FormatAndOutput/format-default/format-default.cs:33
- The no-default-view branch in
FormatViewManager.Initialize()still callsSelectViewGeneratorFromProperties(..., null), so this parameters object is discarded for inferred views. As a result,$PSStyle.AutoSizeDefaultFormatting = $truehas no effect for an untyped object that is inferred as a table (for example, a[pscustomobject]with four or fewer properties), even though the feature promises to autosize the chosen table/wide view. Preservenullfor shape inference, then apply the autosize flag to the resulting Table/Wide generator, and add a regression case for this path.
var parameters = new FormattingCommandLineParameters { autosize = true };
((InnerFormatShapeCommand)this.implementation).SetCommandLineParameters(parameters);
- Files reviewed: 5/5 changed files
- Comments generated: 0 new
- Review effort level: Lite
|
Mark this PR 7.6-consider because this could be potentially required by agent to reduce the output verbosity from shell invocation. |
2179219
into
PowerShell:master
PR Summary
Allow user to force the default implicit formatting to use
AutoSize.When
$PSStyle.AutoSizeDefaultFormatting = $true, the default implicit formatting applied by PowerShell (viaOut-Default) will enforceAutoSizewhen the chosen formatting view istableorwide, similar to runningFormat-Table -AutoSizeandFormat-Wide -AutoSizeexplicitly.The
ListandComplexviews formatting won't be buffered though -- they will continue to be streamed. A test was added to make the formatting for those 2 views are streamed.This allows PowerShell to generate less verbose output when used by an agent. It also makes PowerShell works better with small-window terminal.
PR Checklist
.h,.cpp,.cs,.ps1and.psm1files have the correct copyright header$PSStyle.AutoSizeDefaultFormattingis added to allow user to force the default implicit formatting to useAutoSizefor Table and Wide views MicrosoftDocs/PowerShell-Docs#13289