Skip to content

Add dotfile config resolution for CLI options#547

Open
Samoppakiks wants to merge 1 commit intozio:masterfrom
Samoppakiks:feature/cli-options-from-files
Open

Add dotfile config resolution for CLI options#547
Samoppakiks wants to merge 1 commit intozio:masterfrom
Samoppakiks:feature/cli-options-from-files

Conversation

@Samoppakiks
Copy link

Summary

Implements #191: reading CLI options from dotfiles, with full directory-walk resolution, override hierarchy, and diagnostics.

/claim #191

Features

Dotfile Resolution

  • Walks up directory tree from CWD to root looking for .<appname> files
  • Each file contains options in --key=value or --key value format (one per line)
  • Comments (#) and blank lines supported

Override Hierarchy

  • Parent directory settings are loaded first
  • Closer (deeper) files override parent settings
  • Command-line arguments override all file settings

Diagnostics

  • --config-diagnostics flag prints which settings came from which files
  • Shows full provenance: file path + line number for each resolved option
  • Helps users understand exactly where their configuration comes from

Cross-Platform

  • JVM/Native: Uses java.nio.file for directory walking and file reading
  • JS: No-op implementation (no filesystem access)

Changes

File Description
ConfigFileResolver.scala (shared) Core resolution logic: parsing, merging, override, diagnostics
ConfigFileResolverPlatformSpecific.scala (jvm) JVM filesystem implementation
ConfigFileResolverPlatformSpecific.scala (native) Native filesystem implementation
ConfigFileResolverPlatformSpecific.scala (js) JS no-op stub
CliApp.scala Integration: resolve dotfiles before parsing CLI args
ConfigFilesSpec.scala 28 tests: parsing, merging, diagnostics, e2e
ConfigFileResolverSpec.scala Platform-specific resolver tests

Testing

28 new tests covering:

  • File parsing (key=value, key value, comments, blank lines)
  • Merge behavior (closer overrides parent)
  • CLI override (args beat all files)
  • Diagnostics output format
  • Cross-platform resolution
  • Edge cases (empty files, missing files, malformed lines)

@CLAassistant
Copy link

CLAassistant commented Mar 6, 2026

CLA assistant check
All committers have signed the CLA.

@Samoppakiks Samoppakiks force-pushed the feature/cli-options-from-files branch 5 times, most recently from 206c536 to 44eab65 Compare March 6, 2026 10:38
Implements reading CLI options from dotfiles (.appname), walking the directory
tree from CWD upward. Closer files override parent directories. CLI arguments
override all file settings.

Features:
- ConfigFileResolver trait with platform-specific implementations (JVM/Native: java.nio.file, JS: no-op)
- Automatic dotfile discovery and parsing
- Override hierarchy: parent dir < child dir < CLI args
- --config-diagnostics flag shows provenance (file path per option)
- Full test suites for parsing, merging, and end-to-end resolution

/claim zio#191
@Samoppakiks Samoppakiks force-pushed the feature/cli-options-from-files branch from 44eab65 to cf6c6ff Compare March 6, 2026 10:39
@Samoppakiks
Copy link
Author

Samoppakiks commented Mar 10, 2026

Demo GIF

ZIO-CLI Config Files Demo

Human-written implementation. /claim #191

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants