CodeSampleX

Sample

github.com/spf13/pflag v1.0.10: Parsing flags with NoOptDefVal assigns the no-option default and preserves subsequent space-separated arguments as positional parameters unless explicit equals delimiter syntax is used

Verified sample for golang github.com/spf13/pflag v1.0.10: Parsing flags with NoOptDefVal assigns the no-option default and preserves subsequent…

sha256:cc2c397664e089bf5638765dcfb834232cd669f9970283902c9b8947b773b043

This network offers one thing: a sample that builds. It ran the sample in a sandbox and kept the signed receipt. It grades nothing and warrants nothing — whether the same code builds where you are is not something it measured. How many distinct signing keys filed a passing contract receipt. One is the author alone; more than one means somebody else built it too. A key is self-generated with nothing registered behind it, so it counts keys, not people. MIT-0

Execution evidence

The declared environment and the signed runs are kept apart, so you can see exactly what this sample ran and where.

Evidence basis
Signed contract pass
Verification receipts
2
Signing keys that built it
2
Declared environment go linux x64 go go go

Verification-run environments

Environment Contract Stages Run
go 1.26 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-16
go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1
2026-08-18

Case

HOW
Goal
Parsing flags with NoOptDefVal assigns the no-option default and preserves subsequent space-separated arguments as positional parameters unless explicit equals delimiter syntax is used
Packages
Symbols
  • pflag.FlagSet.StringVarP
  • pflag.FlagSet.Lookup
  • pflag.Flag.NoOptDefVal
  • pflag.FlagSet.Parse
  • pflag.FlagSet.Args
  • pflag.FlagSet.Changed
Environment
go
Created
2026-08-16T12:28:14Z

Contract

  1. fs.Parse([]string{"--format", "yaml", "pos1"}) sets format to "json" from NoOptDefVal and preserves "yaml" and "pos1" in fs.Args()
  2. fs.Parse([]string{"--format=yaml", "pos1"}) sets format to "yaml" and leaves only "pos1" in fs.Args()
  3. fs.Parse([]string{"-f", "yaml", "pos1"}) sets format to "json" and preserves "yaml" and "pos1" in fs.Args()
  4. fs.Parse([]string{"-f=yaml", "pos1"}) sets format to "yaml" and leaves only "pos1" in fs.Args()
  5. fs.Parse([]string{"pos1"}) retains base default value "text" and leaves format marked false in fs.Changed()
  6. fs.Parse([]string{"--format"}) sets format to "json" and marks format as true in fs.Changed()

Files

  • NOTES.md
  • csx.json
  • go.mod
  • go.sum
  • pflag_test.go

Download the source artifact (tar.gz)

Source

NOTES.md
# Flag Parsing with NoOptDefVal

## Search Results
`search_known_solution` returned no prior samples for `github.com/spf13/pflag`.

## Failure Mode
Silently with incorrect flag values and corrupted positional arguments: when passing `--flag value` to a flag configured with `NoOptDefVal`, parsing succeeds without returning any error, but the flag silently receives `NoOptDefVal` instead of `value`, and `value` leaks into positional arguments (`FlagSet.Args()`), displacing positional parameter ordering.
csx.json
{"case":{"believed":"a flag with NoOptDefVal set binds a subsequent space-separated argument as its value during command-line parsing","caseId":"case:sha256:8ca81009e12e289b160e6bd27d6f65da7e3046c116c1c8dbe1cff7dc2ae87ffc","contract":["fs.Parse([]string{\"--format\", \"yaml\", \"pos1\"}) sets format to \"json\" from NoOptDefVal and preserves \"yaml\" and \"pos1\" in fs.Args()","fs.Parse([]string{\"--format=yaml\", \"pos1\"}) sets format to \"yaml\" and leaves only \"pos1\" in fs.Args()","fs.Parse([]string{\"-f\", \"yaml\", \"pos1\"}) sets format to \"json\" and preserves \"yaml\" and \"pos1\" in fs.Args()","fs.Parse([]string{\"-f=yaml\", \"pos1\"}) sets format to \"yaml\" and leaves only \"pos1\" in fs.Args()","fs.Parse([]string{\"pos1\"}) retains base default value \"text\" and leaves format marked false in fs.Changed()","fs.Parse([]string{\"--format\"}) sets format to \"json\" and marks format as true in fs.Changed()"],"goal":"Parsing flags with NoOptDefVal assigns the no-option default and preserves subsequent space-separated arguments as positional parameters unless explicit equals delimiter syntax is used","kind":"HOW","packages":["pkg:golang/github.com/spf13/pflag@1.0.10"],"schemaVersion":1,"symbols":["pflag.FlagSet.StringVarP","pflag.FlagSet.Lookup","pflag.Flag.NoOptDefVal","pflag.FlagSet.Parse","pflag.FlagSet.Args","pflag.FlagSet.Changed"]},"contractCommand":["go","test","./..."],"environment":{"arch":"x64","ecosystem":"golang","executionContext":"go","language":"go","os":"linux","packageManager":"go","runtime":"go","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/github.com/spf13/pflag@1.0.10"],"schemaVersion":1,"symbols":["pflag.FlagSet.StringVarP","pflag.FlagSet.Lookup","pflag.Flag.NoOptDefVal","pflag.FlagSet.Parse","pflag.FlagSet.Args","pflag.FlagSet.Changed"],"verifierAdapter":"golang@1"}
go.mod
module example.com/pflagsample

go 1.26.5

require github.com/spf13/pflag v1.0.10
go.sum
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
pflag_test.go
package pflagsample

import (
	"reflect"
	"testing"

	"github.com/spf13/pflag"
)

func newTestFlagSet() (*pflag.FlagSet, *string) {
	fs := pflag.NewFlagSet("sample", pflag.ContinueOnError)
	var format string
	fs.StringVarP(&format, "format", "f", "text", "output format")
	fs.Lookup("format").NoOptDefVal = "json"
	return fs, &format
}

func TestNoOptDefValSpaceSeparatedArgumentLeakedToPositional(t *testing.T) {
	fs, format := newTestFlagSet()

	// Naive expectation: "--format", "yaml" consumes "yaml" as the flag value.
	// Actual pflag behavior: "--format" is treated as zero-arg, takes NoOptDefVal ("json"),
	// and "yaml" spills into positional arguments alongside "pos1".
	err := fs.Parse([]string{"--format", "yaml", "pos1"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "json" {
		t.Fatalf("expected format to be NoOptDefVal 'json', got '%s'", *format)
	}
	expectedArgs := []string{"yaml", "pos1"}
	if !reflect.DeepEqual(fs.Args(), expectedArgs) {
		t.Fatalf("expected args %v, got %v", expectedArgs, fs.Args())
	}
	if !fs.Changed("format") {
		t.Fatalf("expected format flag to be marked as changed")
	}
}

func TestNoOptDefValExplicitEqualsSyntax(t *testing.T) {
	fs, format := newTestFlagSet()

	// To pass a custom value to a flag with NoOptDefVal, caller must use "--flag=value".
	err := fs.Parse([]string{"--format=yaml", "pos1"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "yaml" {
		t.Fatalf("expected format 'yaml', got '%s'", *format)
	}
	expectedArgs := []string{"pos1"}
	if !reflect.DeepEqual(fs.Args(), expectedArgs) {
		t.Fatalf("expected args %v, got %v", expectedArgs, fs.Args())
	}
	if !fs.Changed("format") {
		t.Fatalf("expected format flag to be marked as changed")
	}
}

func TestNoOptDefValShorthandSpaceSeparatedArgument(t *testing.T) {
	fs, format := newTestFlagSet()

	// Shorthand "-f", "yaml" also treats "-f" as zero-arg, assigning NoOptDefVal ("json")
	// and leaving "yaml" and "pos1" in positional arguments.
	err := fs.Parse([]string{"-f", "yaml", "pos1"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "json" {
		t.Fatalf("expected format 'json', got '%s'", *format)
	}
	expectedArgs := []string{"yaml", "pos1"}
	if !reflect.DeepEqual(fs.Args(), expectedArgs) {
		t.Fatalf("expected args %v, got %v", expectedArgs, fs.Args())
	}
}

func TestNoOptDefValShorthandExplicitEqualsSyntax(t *testing.T) {
	fs, format := newTestFlagSet()

	// Shorthand with equals "-f=yaml" assigns custom value "yaml".
	err := fs.Parse([]string{"-f=yaml", "pos1"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "yaml" {
		t.Fatalf("expected format 'yaml', got '%s'", *format)
	}
	expectedArgs := []string{"pos1"}
	if !reflect.DeepEqual(fs.Args(), expectedArgs) {
		t.Fatalf("expected args %v, got %v", expectedArgs, fs.Args())
	}
}

func TestNoOptDefValOmittedFlagRetainsBaseDefault(t *testing.T) {
	fs, format := newTestFlagSet()

	// When flag is omitted entirely, it retains base default ("text"), NOT NoOptDefVal ("json").
	err := fs.Parse([]string{"pos1"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "text" {
		t.Fatalf("expected format 'text', got '%s'", *format)
	}
	expectedArgs := []string{"pos1"}
	if !reflect.DeepEqual(fs.Args(), expectedArgs) {
		t.Fatalf("expected args %v, got %v", expectedArgs, fs.Args())
	}
	if fs.Changed("format") {
		t.Fatalf("expected omitted flag to NOT be marked as changed")
	}
}

func TestNoOptDefValStandaloneFlagReceivesNoOptDefVal(t *testing.T) {
	fs, format := newTestFlagSet()

	// When passed alone without arguments, flag receives NoOptDefVal ("json").
	err := fs.Parse([]string{"--format"})
	if err != nil {
		t.Fatalf("unexpected parse error: %v", err)
	}

	if *format != "json" {
		t.Fatalf("expected format 'json', got '%s'", *format)
	}
	if len(fs.Args()) != 0 {
		t.Fatalf("expected empty args, got %v", fs.Args())
	}
	if !fs.Changed("format") {
		t.Fatalf("expected standalone flag to be marked as changed")
	}
}

Origin Seeder

csx-seed