├── .github └── workflows │ └── test.yaml ├── .gitignore ├── LICENSE ├── README.md ├── command.go ├── command_test.go ├── doc.go ├── errors.go ├── example_test.go ├── examples ├── basicflags │ └── basicflags.go ├── objectctl │ ├── cmd │ │ └── objectctl │ │ │ ├── main.go │ │ │ └── main_test.go │ └── pkg │ │ ├── createcmd │ │ └── create.go │ │ ├── deletecmd │ │ └── delete.go │ │ ├── listcmd │ │ └── list.go │ │ ├── objectapi │ │ └── client.go │ │ └── rootcmd │ │ └── root.go └── textctl │ └── textctl.go ├── ffenv ├── ffenv.go ├── ffenv_test.go └── testdata │ ├── ambiguous-1.env │ ├── ambiguous-2.env │ ├── basic.env │ ├── case-sensitive.env │ ├── comments.env │ ├── empty.env │ ├── newlines.env │ ├── no-value.env │ ├── prefix-undef.env │ ├── prefix.env │ ├── quotes.env │ ├── short.env │ └── spaces.env ├── ffhelp ├── doc.go ├── flag.go ├── flag_test.go ├── help.go ├── help_test.go ├── rewrap.go ├── rewrap_test.go ├── section.go └── section_test.go ├── ffjson ├── ffjson.go ├── ffjson_test.go └── testdata │ ├── bad.json │ ├── basic.json │ ├── empty.json │ ├── nested.json │ └── value_arrays.json ├── fftest ├── constructor.go ├── doc.go ├── example_test.go ├── helpers.go ├── test_case.go ├── validate_flags.go └── vars.go ├── fftoml ├── fftoml.go ├── fftoml_test.go └── testdata │ ├── bad.toml │ ├── basic.toml │ ├── empty.toml │ └── table.toml ├── ffval ├── collections.go ├── collections_test.go ├── doc.go ├── types.go ├── value.go └── value_test.go ├── ffyaml ├── ffyaml.go ├── ffyaml_test.go └── testdata │ ├── basic.yaml │ ├── basic_array.yaml │ ├── empty.yaml │ ├── invalid_prefix.yaml │ ├── line_break_array.yaml │ ├── multi_line_array.yaml │ ├── nested.yaml │ ├── no_value_i.yaml │ ├── no_value_s.yaml │ └── unquoted_string_array.yaml ├── flag_set.go ├── flag_set_test.go ├── flags.go ├── go.mod ├── go.sum ├── hack ├── lint-parallel-tests ├── run-action-tests └── update-action-tests ├── helpers.go ├── internal └── ffdata │ ├── doc.go │ ├── traverse_map.go │ └── traverse_map_test.go ├── options.go ├── parse.go ├── parse_test.go └── testdata ├── 1.conf ├── 2.conf ├── 3.conf ├── 4.conf ├── 5.conf ├── comments.conf ├── newlines.conf ├── solo_bool.conf ├── spaces.conf └── undefined.conf /.github/workflows/test.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/.github/workflows/test.yaml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/README.md -------------------------------------------------------------------------------- /command.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/command.go -------------------------------------------------------------------------------- /command_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/command_test.go -------------------------------------------------------------------------------- /doc.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/doc.go -------------------------------------------------------------------------------- /errors.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/errors.go -------------------------------------------------------------------------------- /example_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/example_test.go -------------------------------------------------------------------------------- /examples/basicflags/basicflags.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/basicflags/basicflags.go -------------------------------------------------------------------------------- /examples/objectctl/cmd/objectctl/main.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/cmd/objectctl/main.go -------------------------------------------------------------------------------- /examples/objectctl/cmd/objectctl/main_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/cmd/objectctl/main_test.go -------------------------------------------------------------------------------- /examples/objectctl/pkg/createcmd/create.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/pkg/createcmd/create.go -------------------------------------------------------------------------------- /examples/objectctl/pkg/deletecmd/delete.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/pkg/deletecmd/delete.go -------------------------------------------------------------------------------- /examples/objectctl/pkg/listcmd/list.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/pkg/listcmd/list.go -------------------------------------------------------------------------------- /examples/objectctl/pkg/objectapi/client.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/pkg/objectapi/client.go -------------------------------------------------------------------------------- /examples/objectctl/pkg/rootcmd/root.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/objectctl/pkg/rootcmd/root.go -------------------------------------------------------------------------------- /examples/textctl/textctl.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/examples/textctl/textctl.go -------------------------------------------------------------------------------- /ffenv/ffenv.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/ffenv.go -------------------------------------------------------------------------------- /ffenv/ffenv_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/ffenv_test.go -------------------------------------------------------------------------------- /ffenv/testdata/ambiguous-1.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/ambiguous-1.env -------------------------------------------------------------------------------- /ffenv/testdata/ambiguous-2.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/ambiguous-2.env -------------------------------------------------------------------------------- /ffenv/testdata/basic.env: -------------------------------------------------------------------------------- 1 | STR=bar 2 | INT=99 3 | BFLAG=true 4 | DUR=1h 5 | -------------------------------------------------------------------------------- /ffenv/testdata/case-sensitive.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/case-sensitive.env -------------------------------------------------------------------------------- /ffenv/testdata/comments.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/comments.env -------------------------------------------------------------------------------- /ffenv/testdata/empty.env: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ffenv/testdata/newlines.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/newlines.env -------------------------------------------------------------------------------- /ffenv/testdata/no-value.env: -------------------------------------------------------------------------------- 1 | INT=32 2 | DUR= 3 | STR=this is fine 4 | -------------------------------------------------------------------------------- /ffenv/testdata/prefix-undef.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/prefix-undef.env -------------------------------------------------------------------------------- /ffenv/testdata/prefix.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/prefix.env -------------------------------------------------------------------------------- /ffenv/testdata/quotes.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/quotes.env -------------------------------------------------------------------------------- /ffenv/testdata/short.env: -------------------------------------------------------------------------------- 1 | S=hello 2 | I=99 3 | 4 | # long names are still valid 5 | DUR=8ms 6 | -------------------------------------------------------------------------------- /ffenv/testdata/spaces.env: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffenv/testdata/spaces.env -------------------------------------------------------------------------------- /ffhelp/doc.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/doc.go -------------------------------------------------------------------------------- /ffhelp/flag.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/flag.go -------------------------------------------------------------------------------- /ffhelp/flag_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/flag_test.go -------------------------------------------------------------------------------- /ffhelp/help.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/help.go -------------------------------------------------------------------------------- /ffhelp/help_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/help_test.go -------------------------------------------------------------------------------- /ffhelp/rewrap.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/rewrap.go -------------------------------------------------------------------------------- /ffhelp/rewrap_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/rewrap_test.go -------------------------------------------------------------------------------- /ffhelp/section.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/section.go -------------------------------------------------------------------------------- /ffhelp/section_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffhelp/section_test.go -------------------------------------------------------------------------------- /ffjson/ffjson.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffjson/ffjson.go -------------------------------------------------------------------------------- /ffjson/ffjson_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffjson/ffjson_test.go -------------------------------------------------------------------------------- /ffjson/testdata/bad.json: -------------------------------------------------------------------------------- 1 | { -------------------------------------------------------------------------------- /ffjson/testdata/basic.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffjson/testdata/basic.json -------------------------------------------------------------------------------- /ffjson/testdata/empty.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /ffjson/testdata/nested.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffjson/testdata/nested.json -------------------------------------------------------------------------------- /ffjson/testdata/value_arrays.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffjson/testdata/value_arrays.json -------------------------------------------------------------------------------- /fftest/constructor.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/constructor.go -------------------------------------------------------------------------------- /fftest/doc.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/doc.go -------------------------------------------------------------------------------- /fftest/example_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/example_test.go -------------------------------------------------------------------------------- /fftest/helpers.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/helpers.go -------------------------------------------------------------------------------- /fftest/test_case.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/test_case.go -------------------------------------------------------------------------------- /fftest/validate_flags.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/validate_flags.go -------------------------------------------------------------------------------- /fftest/vars.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftest/vars.go -------------------------------------------------------------------------------- /fftoml/fftoml.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftoml/fftoml.go -------------------------------------------------------------------------------- /fftoml/fftoml_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftoml/fftoml_test.go -------------------------------------------------------------------------------- /fftoml/testdata/bad.toml: -------------------------------------------------------------------------------- 1 | { -------------------------------------------------------------------------------- /fftoml/testdata/basic.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftoml/testdata/basic.toml -------------------------------------------------------------------------------- /fftoml/testdata/empty.toml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /fftoml/testdata/table.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/fftoml/testdata/table.toml -------------------------------------------------------------------------------- /ffval/collections.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/collections.go -------------------------------------------------------------------------------- /ffval/collections_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/collections_test.go -------------------------------------------------------------------------------- /ffval/doc.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/doc.go -------------------------------------------------------------------------------- /ffval/types.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/types.go -------------------------------------------------------------------------------- /ffval/value.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/value.go -------------------------------------------------------------------------------- /ffval/value_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffval/value_test.go -------------------------------------------------------------------------------- /ffyaml/ffyaml.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/ffyaml.go -------------------------------------------------------------------------------- /ffyaml/ffyaml_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/ffyaml_test.go -------------------------------------------------------------------------------- /ffyaml/testdata/basic.yaml: -------------------------------------------------------------------------------- 1 | s: hello 2 | i: 10 3 | b: true 4 | d: 5s 5 | f: 3.14 -------------------------------------------------------------------------------- /ffyaml/testdata/basic_array.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/testdata/basic_array.yaml -------------------------------------------------------------------------------- /ffyaml/testdata/empty.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ffyaml/testdata/invalid_prefix.yaml: -------------------------------------------------------------------------------- 1 | i: 123 2 | s: foo 3 | -------------------------------------------------------------------------------- /ffyaml/testdata/line_break_array.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/testdata/line_break_array.yaml -------------------------------------------------------------------------------- /ffyaml/testdata/multi_line_array.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/testdata/multi_line_array.yaml -------------------------------------------------------------------------------- /ffyaml/testdata/nested.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/ffyaml/testdata/nested.yaml -------------------------------------------------------------------------------- /ffyaml/testdata/no_value_i.yaml: -------------------------------------------------------------------------------- 1 | s: woozlewozzle 2 | i: 3 | -------------------------------------------------------------------------------- /ffyaml/testdata/no_value_s.yaml: -------------------------------------------------------------------------------- 1 | s: 2 | i: 123 3 | -------------------------------------------------------------------------------- /ffyaml/testdata/unquoted_string_array.yaml: -------------------------------------------------------------------------------- 1 | x: [one, two, three] -------------------------------------------------------------------------------- /flag_set.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/flag_set.go -------------------------------------------------------------------------------- /flag_set_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/flag_set_test.go -------------------------------------------------------------------------------- /flags.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/flags.go -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/go.mod -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/go.sum -------------------------------------------------------------------------------- /hack/lint-parallel-tests: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/hack/lint-parallel-tests -------------------------------------------------------------------------------- /hack/run-action-tests: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/hack/run-action-tests -------------------------------------------------------------------------------- /hack/update-action-tests: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/hack/update-action-tests -------------------------------------------------------------------------------- /helpers.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/helpers.go -------------------------------------------------------------------------------- /internal/ffdata/doc.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/internal/ffdata/doc.go -------------------------------------------------------------------------------- /internal/ffdata/traverse_map.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/internal/ffdata/traverse_map.go -------------------------------------------------------------------------------- /internal/ffdata/traverse_map_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/internal/ffdata/traverse_map_test.go -------------------------------------------------------------------------------- /options.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/options.go -------------------------------------------------------------------------------- /parse.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/parse.go -------------------------------------------------------------------------------- /parse_test.go: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/parse_test.go -------------------------------------------------------------------------------- /testdata/1.conf: -------------------------------------------------------------------------------- 1 | s bar 2 | i 99 3 | b true 4 | d 1h -------------------------------------------------------------------------------- /testdata/2.conf: -------------------------------------------------------------------------------- 1 | 2 | s should be overridden 3 | 4 | d 3s -------------------------------------------------------------------------------- /testdata/3.conf: -------------------------------------------------------------------------------- 1 | s bar 2 | i 99 3 | d 34s 4 | # comment line 5 | -------------------------------------------------------------------------------- /testdata/4.conf: -------------------------------------------------------------------------------- 1 | s from file 2 | i 200 # comment 3 | d 1m 4 | f 2.3 -------------------------------------------------------------------------------- /testdata/5.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/testdata/5.conf -------------------------------------------------------------------------------- /testdata/comments.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/testdata/comments.conf -------------------------------------------------------------------------------- /testdata/newlines.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/testdata/newlines.conf -------------------------------------------------------------------------------- /testdata/solo_bool.conf: -------------------------------------------------------------------------------- 1 | b 2 | s x -------------------------------------------------------------------------------- /testdata/spaces.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/testdata/spaces.conf -------------------------------------------------------------------------------- /testdata/undefined.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peterbourgon/ff/HEAD/testdata/undefined.conf --------------------------------------------------------------------------------