Skip to content

Show [default: true] in help for bool options/arguments with explicit default factories#2781

Open
Copilot wants to merge 4 commits intomainfrom
copilot/fix-help-output-boolean-defaults
Open

Show [default: true] in help for bool options/arguments with explicit default factories#2781
Copilot wants to merge 4 commits intomainfrom
copilot/fix-help-output-boolean-defaults

Conversation

Copy link

Copilot AI commented Mar 10, 2026

--help was omitting defaults for boolean symbols even when DefaultValueFactory explicitly returned true, while non-boolean defaults were shown. This change aligns bool default rendering with actual configured defaults and preserves suppression for empty/default-like values.

  • Help default rendering: bool-aware formatting

    • Updated default value formatting in HelpBuilder.Default.GetArgumentDefaultValue to evaluate both value and symbol type.
    • bool / bool? defaults now render as:
      • true → shown as true
      • false / null → suppressed (empty), consistent with current help style that avoids noisy implicit defaults.
  • Default visibility decision simplified

    • ShouldShowDefaultValue(Option) and ShouldShowDefaultValue(Argument) now gate on HasDefaultValue.
    • Type-specific suppression is handled during formatting, so explicit true defaults are no longer dropped.
  • Output composition cleanup

    • Filtered empty default fragments before joining multi-argument default text in HelpBuilder, preventing empty entries from affecting bracketed default output formatting.
  • Regression coverage

    • Added focused test in HelpBuilderTests to verify help output includes [default: true] for Option<bool> with DefaultValueFactory = _ => true.

Example:

new Option<bool>("--bool-default")
{
    Description = "Bool value with default",
    DefaultValueFactory = _ => true
}

Now renders in help as:

--bool-default    Bool value with default [default: true]

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 11vvsblobprodcus336.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/command-line-api/command-line-api/.dotnet/dotnet /home/REDACTED/work/command-line-api/command-line-api/.dotnet/dotnet msbuild /m /nologo /clp:Summary /v:minimal /nr:true /warnaserror /p:TreatWarningsAsErrors=true /p:ContinuousIntegrationBuild=false /home/REDACTED/work/command-line-api/command-line-api/artifacts/toolset/restore.proj /t:__WriteToolsetLocation /clp:ErrorsOnly;NoSummary /p:__ToolsetLocationOutputFile=/home/REDACTED/work/command-line-api/command-line-api/artifacts/toolset/11.0.0-beta.26076.102.txt (dns block)
    • Triggering command: ./.dotnet/dotnet ./.dotnet/dotnet test src/System.CommandLine.Tests/System.CommandLine.Tests.csproj -c Debug --filter FullyQualifiedName~HelpBuilderTests 00/microsoft.net.workload.emscripten.net7/11.0.100-alpha.1.26064.118/ (dns block)
    • Triggering command: ./.dotnet/dotnet ./.dotnet/dotnet test src/System.CommandLine.Tests/System.CommandLine.Tests.csproj -c Debug --filter FullyQualifiedName~Help_describes_default_value_for_boolean_option_when_default_value_is_true|FullyQualifiedName~Help_describes_default_value_for_option_with_argument_having_default_value (dns block)
  • 2kmvsblobprodcus39.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/DCBAF03DA291655FB2C64D553E1C1E2E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/46EB19D8E6D150879BD3367A72FC2FBC/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2zrvsblobprodcus388.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/940B32AFA3A9BBA00112E7C1E2D1C63E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 7devsblobprodcus323.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/C774AB016F77C95E8B121BD603D54D05/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/38137712C671CCEA0DDC198C705E19A0/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • gervsblobprodcus329.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • imzvsblobprodcus368.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/5707D9CCD3909344C2384588AB311A3D/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force api/�� (dns block)
  • josvsblobprodcus372.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • k4kvsblobprodcus344.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/24383DCD8ED80912D633926A44052A4E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force api/�� Tests/Help/HelpBuilderTests.cs (dns block)
  • m8dvsblobprodcus37.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/5A662EEFB2568432D6FDBE7CF1D19C8E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force ng/emptyFakeDotnetRoot ing/emptyFakeDotnetRoot (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/2BAB33F2843F471466949892BFF6B2A0/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • p2ovsblobprodcus312.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/C190587CB2C89F00A34B95E024BCCC9E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • securitytools.pkgs.visualstudio.com
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.24.2/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp /opt/hostedtoolcache/CodeQL/2.24.2/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp (dns block)
  • xupvsblobprodcus332.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • yluvsblobprodcus367.vsblob.vsassets.io
    • Triggering command: /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/940B32AFA3A9BBA00112E7C1E2D1C63E/missingpackages_workingdir --packages /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-b6908f6fe5fd91fa/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 3 commits March 10, 2026 20:17
Co-authored-by: jonsequitur <547415+jonsequitur@users.noreply.github.com>
Co-authored-by: jonsequitur <547415+jonsequitur@users.noreply.github.com>
Co-authored-by: jonsequitur <547415+jonsequitur@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix help output for bool options with DefaultValueFactory Show [default: true] in help for bool options/arguments with explicit default factories Mar 10, 2026
@jonsequitur jonsequitur requested a review from adamsitnik March 10, 2026 21:17
@jonsequitur jonsequitur marked this pull request as ready for review March 10, 2026 21:17
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.

--help output lacks "[default: true]" if Option<bool> has DefaultValueFactory returning true

2 participants