Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
e3fb3e9
feat(Async): Add IAsyncConfigurationReader + ParseAsync overload
dimension-zero May 23, 2026
65c81bd
test(ParseAsync): Coverage for IAsyncConfigurationReader + ParseAsync
dimension-zero May 23, 2026
657524d
Merge branch 'master' into pr/29-async-config-reader
dimension-zero May 25, 2026
0dd505c
chore: expand .gitignore with build and IDE artifacts
May 28, 2026
a796266
feat(Async): Add IAsyncConfigurationReader + ParseAsync overload
dimension-zero May 23, 2026
c2fc2ad
test(ParseAsync): Coverage for IAsyncConfigurationReader + ParseAsync
dimension-zero May 23, 2026
3acc425
chore: expand .gitignore with build and IDE artifacts
May 28, 2026
c2fc8db
chore: remove .recode tooling artifacts and ignore the directory
Jun 1, 2026
df5b6d8
fix(ParseAsync): treat faulted GetValueAsync as missing, matching syn…
Jun 1, 2026
4027d0f
Revert "chore: expand .gitignore with build and IDE artifacts"
bartelink Jun 3, 2026
66d67cd
Merge: resolved conflicts via git-sync
Jun 4, 2026
35786cd
Merge remote-tracking branch 'origin/master' into pr/29-async-config-…
bartelink Jun 5, 2026
c838e15
chore: add fsharp build state to gitignore
Jun 5, 2026
eba2d5e
chore: Remove .recode tooling artifacts and ignore the directory
dimension-zero Jun 7, 2026
0e83042
feat(Async): Redesign IAsyncConfigurationReader around batched reads
dimension-zero Jun 7, 2026
c6eda31
docs(Async): Add Azure Key Vault sample, tutorial section, failure mo…
dimension-zero Jun 7, 2026
cbfb71b
chore: Trim .gitignore to repo-specific entries
dimension-zero Jun 8, 2026
b4660fe
Merge upstream/master into pr/29-async-config-reader
dimension-zero Jun 8, 2026
69c261d
Merge branch 'master' into pr/29-async-config-reader
dimension-zero Jun 8, 2026
c901626
tidy
bartelink Jun 8, 2026
fb30fb0
feat(ConfigurationReader): FromEnvironmentVariables(prefix), FromMicr…
dimension-zero Jun 8, 2026
9890737
# This is a combination of 2 commits.
bartelink Jun 8, 2026
e0f8b92
feat(ConfigurationReader): FromEnvironmentVariables(prefix), FromMicr…
dimension-zero Jun 8, 2026
1da665b
Remove ParseConfig release-note reference (#329)
Copilot Jun 10, 2026
f0afaf3
Merge remote-tracking branch 'origin/master' into pr/29-async-config-…
bartelink Jun 10, 2026
a49a45d
chore: add bash, .NET, and IDE ignore patterns
Jun 10, 2026
d979b6c
docs: daily diary auto-sync entry (2026-07-14)
Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 180 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -202,4 +202,183 @@ launchSettings.json
/tools/

# Ionide
.ionide/
.ionide/

# Local Recode tooling artifacts (per-machine session data)
.recode/

# bash
.fuse_hidden*
.directory
.Trash-*
.nfs*
nohup.out

# fsharp
*.rsuser
*.userosscache
*.sln.docstates
*.env
mono_crash.*
[Dd]ebugPublic/
[Rr]eleases/
[Dd]ebug/x64/
[Dd]ebugPublic/x64/
[Rr]elease/x64/
[Rr]eleases/x64/
bin/x64/
obj/x64/
[Dd]ebug/x86/
[Dd]ebugPublic/x86/
[Rr]elease/x86/
[Rr]eleases/x86/
bin/x86/
obj/x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
[Aa][Rr][Mm]64[Ee][Cc]/
bld/
[Oo]ut/
[Ll]og/
[Ll]ogs/
**/[Bb]in/*
Generated\ Files/
*.trx
*.VisualState.xml
TestResult.xml
nunit-*.xml
*.received.*
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
BenchmarkDotNet.Artifacts/
project.fragment.lock.json
artifacts/
.artifacts/
ScaffoldingReadMe.txt
StyleCopReport.xml
*_h.h
*.idb
*.iobj
*.ipdb
!Directory.Build.rsp
*_wpftmp.csproj
*.tlog
*.svclog
_Chutzpah*
*.opendb
*.VC.db
*.VC.VC.opendb
*.sap
*.e2e
$tf/
*.DotSettings.user
.axoCover/*
!.axoCover/settings.json
coverage*.json
coverage*.xml
coverage*.info
*.coverage
*.coveragexml
_NCrunch_*
.NCrunch_*
nCrunchTemp_*
*.mm.*
AutoTest.Net/
.sass-cache/
*.azurePubxml
*.pubxml
*.publishproj
PublishScripts/
*.nupkg
*.snupkg
**/[Pp]ackages/*
!**/[Pp]ackages/build/
*.nuget.props
*.nuget.targets
csx/
ecf/
rcf/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
*.[Cc]ache
!?*.[Cc]ache/
*.dbproj.schemaview
*.jfm
orleans.codegen.cs
ServiceFabricBackup/
*.rptproj.bak
*.mdf
*.ldf
*.ndf
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
FakesAssemblies/
*.GhostDoc.xml
.ntvs_analysis.dat
node_modules/
*.plg
*.opt
*.vbw
*.dsw
*.dsp
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
**/.paket/paket.exe
paket-files/
**/.fake/
**/.cr/personal
**/__pycache__/
*.pyc
*.tss
*.jmconfig
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
OpenCover/
ASALocalRun/
*.binlog
MSBuild_Logs/
.aws-sam
*.nvuser
**/.mfractor/
**/.localhistory/
.vshistory/
healthchecksdb
MigrationBackup/
**/.ionide/
FodyWeavers.xsd
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
.history/
*.vsix
*.cab
*.msi
*.msix
*.msm
*.msp

# OS/IDE
.idea/
*.swp
*.swo

1 change: 1 addition & 0 deletions Argu.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<Folder Name="/resource/">
<File Path="resource/logo.png" />
</Folder>
<Project Path="samples/Argu.Samples.AsyncConfig/Argu.Samples.AsyncConfig.fsproj" />
<Project Path="samples/Argu.Samples.Introspect/Argu.Samples.Introspect.fsproj" />
<Project Path="samples/Argu.Samples.LS/Argu.Samples.LS.fsproj" />
<Project Path="samples/Argu.Samples.SourceGenerated/Argu.Samples.SourceGenerated.fsproj" />
Expand Down
2 changes: 2 additions & 0 deletions DIARY-ANNUAL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Annual Diary

104 changes: 104 additions & 0 deletions DIARY-DAILY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Daily Diary

## 2026-06-10
**Docs Cleanup & Repo Hygiene**

- Removed stale ParseConfig reference from release notes to keep docs accurate.
- Merged latest master changes into async config reader branch to stay in sync.
- Added ignore patterns for bash, .NET, and IDE artifacts to keep repo clean.
## 2026-06-08
**AOT Compatibility & Async Config Reader**

- Trimmed .gitignore down to repo-specific entries, removing 341 lines of generic noise.
- Marked AOT-incompatible APIs with RequiresDynamicCode and RequiresUnreferencedCode attributes (#314) for native-AOT compatibility.
- Scaffolded a source generator project with an [ArguGenerate] marker attribute (#318) to support compile-time code generation.
- Finalized ConfigurationReader.FromEnvironmentVariables(prefix) and FromMicrosoftConfiguration (#308), iterating through several revisions to land the API.
- Merged upstream master and Ruben Bartelink's tidy-up and combined-commit changes into the async config reader branch, keeping the PR in sync.
## 2026-06-07
**Async Config Reader & Benchmarks**

- Redesigned IAsyncConfigurationReader around batched reads for efficiency
- Added Azure Key Vault sample, tutorial section, and failure-mode docs for async config
- Added BenchmarkDotNet harness for performance testing (#313)
- Cleaned up repo by removing .recode tooling artifacts and adding ignore rule
## 2026-06-05
**Attribute Cleanup & Config Reader Merge**

- Added unified SeparatorAttribute, marked 6 old separator attributes obsolete (#315)
- Fixed usage rendering bug when param description empty (#173, #323)
- Shipped Obsolete markers on deprecated PostProcess overloads (#296)
- Swapped PrefixDictionary internals to char-keyed trie for perf gain (#316)
- Merged master into async-config-reader branch, pulling in recent upstream changes
- Added F# build state to gitignore
## 2026-06-04
**ParseConfig Overload & Usage Strings**

- Added a record-based Parse(config) overload for ParseConfig, giving callers a way to invoke parsing with a configuration object instead of separate parameters (#307).
- Merged latest changes from origin/master, resolving conflicts across 22 files via git-sync.
- Introduced a UsageStrings record holding localisable labels for the usage/help message, laying groundwork for translating CLI output (#303).
## 2026-06-03
**Argu Parser Performance & Cleanup**

- Reverted premature .gitignore expansion (removed 341 lines) to keep repo config minimal
- Optimized ParseResults.getAllResults by replacing Seq pipeline with direct buffer access
- Flattened UnionCaseArgInfo fields (Name, CommandLineNames, AppSettingsName) for reduced overhead across 7 files
- Refactored Cli.parseCommandLinePartial into named helper functions for readability
- Fixed usage/help output to narrow the Console.WindowWidth exception catch and floor the wrap width calculation
## 2026-06-02
**F# Nullable Refs & Test Suite Split**

- Enabled F# nullable reference types on the Argu.fsproj to catch null-related bugs at compile time.
- Refactored UnParsers to use mutable closure state instead of workarounds, and fixed broken RELEASE_NOTES URLs.
- Split the monolithic Tests.fs file into three focused modules: Shared, Tests, and PrimitiveTests, improving test organization and maintainability.
## 2026-06-01
**Argu Introspection & Async Fixes**

- Fixed ParseAsync so faulted GetValueAsync treated as missing, matching sync parser behaviour
- Added Argu.Samples.Introspect sample demonstrating introspection API
- Fixed mandatory-group validation to report all missing groups in single error message instead of one at a time
- Refactored UnionCaseArgInfo to remove unneeded laziness, tidied parent backreferences
- Cleaned up repo tooling: removed .recode artifacts and added ignore rules
## 2026-05-30
```json
{
"title": "Build Migration & Test Framework Cleanup",
"bullets": [
"Merged PR #08 adding null-guard checks on entry assembly resolution, plus a changelog correction.",
"Migrated the test suite to xunit v3 running on Microsoft Testing Platform v2, cleaning up leftover test config in a follow-up commit.",
"Converted the solution file to the new .slnx format, trimming 97 lines from the old .sln.",
"Scoped an nowarn suppression to the specific case it was needed for (issue #289) instead of leaving it broad.",
"Bumped DotNet.ReproducibleBuilds to 2.0.2.",
"Clarified the exception message thrown by expr2Uci for easier debugging (issue #293).",
"Added a build workaround to keep SDK 10 compatible with Microsoft Testing Platform v2 after the migration surfaced a break.",
"Did general top-and-tail cleanup pass across the touched files."
]
}
```
## 2026-05-28
**Repo Hygiene: Gitignore Cleanup**

- Expanded .gitignore with build artifacts and IDE-specific patterns for bash, .NET, and common IDEs.
- Touched 3 files (1 added, 1 modified) to reduce untracked noise in future git status checks.
## 2026-05-27
**Docs Toolchain Bump**

- Bumped fsdocs-tool dependency from version 20.0.1 to 22.1.0 to keep the documentation generation toolchain current.
## 2026-05-25
**Argu Cleanup & Docs**

- Stripped reimplemented stdlib helpers from Utils.fs (#290), trimming 44 lines of dead weight.
- Added XML doc summaries to previously-undocumented public members (#304).
- Documented last-wins attribute pickup behavior in TryGetAttribute (#291).
- Documented order-sensitive equality on ParseResults (#295).
- Added 204 lines of coverage tests for error text, AppSettings, and deep subcommand scenarios (#312).
- Merged master into the async-config-reader branch to stay current.
## 2026-05-23
**Async Configuration Reader**

- Added IAsyncConfigurationReader interface plus ParseAsync overload for async config parsing
- Added test coverage for new IAsyncConfigurationReader and ParseAsync functionality
## 2026-05-22
**Program Name Resolution & Late-Binding Refactor**

- Added null-guard around Assembly.GetEntryAssembly() when deriving program name, preventing crash when entry assembly is unavailable (e.g. certain host/test environments)
- Refactored late-binding logic from ref-cell pattern to a mutable let binding, simplifying state handling across 14 added and 8 removed lines in the parser
53 changes: 53 additions & 0 deletions DIARY-MONTHLY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Monthly Diary

## 2026-06
**Docs Cleanup & Repo Hygiene**

- Removed stale ParseConfig reference from release notes to keep docs accurate.
- Merged latest master changes into async config reader branch to stay in sync.
- Added ignore patterns for bash, .NET, and IDE artifacts to keep repo clean.
**AOT Compatibility & Async Config Reader**

- Trimmed .gitignore down to repo-specific entries, removing 341 lines of generic noise.
- Marked AOT-incompatible APIs with RequiresDynamicCode and RequiresUnreferencedCode attributes (#314) for native-AOT compatibility.
- Scaffolded a source generator project with an [ArguGenerate] marker attribute (#318) to support compile-time code generation.
- Finalized ConfigurationReader.FromEnvironmentVariables(prefix) and FromMicrosoftConfiguration (#308), iterating through several revisions to land the API.
- Merged upstream master and Ruben Bartelink's tidy-up and combined-commit changes into the async config reader branch, keeping the PR in sync.
**Async Config Reader & Benchmarks**

- Redesigned IAsyncConfigurationReader around batched reads for efficiency
- Added Azure Key Vault sample, tutorial section, and failure-mode docs for async config
- Added BenchmarkDotNet harness for performance testing (#313)
- Cleaned up repo by removing .recode tooling artifacts and adding ignore rule
**Attribute Cleanup & Config Reader Merge**

- Added unified SeparatorAttribute, marked 6 old separator attributes obsolete (#315)
- Fixed usage rendering bug when param description empty (#173, #323)
- Shipped Obsolete markers on deprecated PostProcess overloads (#296)
- Swapped PrefixDictionary internals to char-keyed trie for perf gain (#316)
- Merged master into async-config-reader branch, pulling in recent upstream changes
- Added F# build state to gitignore
**ParseConfig Overload & Usage Strings**

- Added a record-based Parse(config) overload for ParseConfig, giving callers a way to invoke parsing with a configuration object instead of separate parameters (#307).
- Merged latest changes from origin/master, resolving conflicts across 22 files via git-sync.
- Introduced a UsageStrings record holding localisable labels for the usage/help message, laying groundwork for translating CLI output (#303).
**Argu Parser Performance & Cleanup**

- Reverted premature .gitignore expansion (removed 341 lines) to keep repo config minimal
- Optimized ParseResults.getAllResults by replacing Seq pipeline with direct buffer access
- Flattened UnionCaseArgInfo fields (Name, CommandLineNames, AppSettingsName) for reduced overhead across 7 files
- Refactored Cli.parseCommandLinePartial into named helper functions for readability
- Fixed usage/help output to narrow the Console.WindowWidth exception catch and floor the wrap width calculation
**F# Nullable Refs & Test Suite Split**

- Enabled F# nullable reference types on the Argu.fsproj to catch null-related bugs at compile time.
- Refactored UnParsers to use mutable closure state instead of workarounds, and fixed broken RELEASE_NOTES URLs.
- Split the monolithic Tests.fs file into three focused modules: Shared, Tests, and PrimitiveTests, improving test organization and maintainability.
**Argu Introspection & Async Fixes**

- Fixed ParseAsync so faulted GetValueAsync treated as missing, matching sync parser behaviour
- Added Argu.Samples.Introspect sample demonstrating introspection API
- Fixed mandatory-group validation to report all missing groups in single error message instead of one at a time
- Refactored UnionCaseArgInfo to remove unneeded laziness, tidied parent backreferences
- Cleaned up repo tooling: removed .recode artifacts and added ignore rules
2 changes: 2 additions & 0 deletions DIARY-WEEKLY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Weekly Diary

4 changes: 4 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,9 @@

<!-- Benchmark harness -->
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0"/>

<!-- Sample-only deps (Azure Key Vault async config reader) -->
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.7.0"/>
<PackageVersion Include="Azure.Identity" Version="1.13.1"/>
</ItemGroup>
</Project>
2 changes: 2 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
* Add `SourceGenerator.ArguGenerate` marker [#318](https://github.com/fsprojects/Argu/pull/318) [@dimension-zero](https://github.com/dimension-zero)
* Add `ConfigurationReader.FromEnvironmentVariables(prefix : String)` [#308](https://github.com/fsprojects/Argu/pull/308) [@dimension-zero](https://github.com/dimension-zero)
* Add `ConfigurationReader.FromMicrosoftConfiguration(Microsoft.Extensions.Configuration.IConfiguration)` [#308](https://github.com/fsprojects/Argu/pull/308) [@dimension-zero](https://github.com/dimension-zero)
* Add `ConfigurationReader.FromFunctionAsync`, `ConfigurationReader.WithFallback`: Provides support and error handling for batched retrieval from remote configuration stores [#317](https://github.com/fsprojects/Argu/pull/317) [@dimension-zero](https://github.com/dimension-zero)
* Add `ArgumentParser.ParseAsync`: Handles parsing from an asynchronously loaded configuration (i.e. `ConfigurationReader.FromFunctionAsync`) [#317](https://github.com/fsprojects/Argu/pull/317) [@dimension-zero](https://github.com/dimension-zero)
* Obsolete `EqualsAssignmentAttribute`, `ColonAssignmentAttribute`, `CustomAssignmentAttribute`, `EqualsAssignmentOrSpacedAttribute`, `ColonAssignmentOrSpacedAttribute` and `CustomAssignmentOrSpacedAttribute` [#315](https://github.com/fsprojects/Argu/pull/315) [@dimension-zero](https://github.com/dimension-zero)
* Obsolete `PostProcessResult`, `PostProcessResults`, `TryPostProcessResult` [#296](https://github.com/fsprojects/Argu/pull/296) [@dimension-zero](https://github.com/dimension-zero)

Expand Down
Loading