Future Plans
This page includes the project TODO list.
Open a GitHub issue to suggest another feature or improvement.
TODO
- migrate docs from
mdbooktozensical - complete code coverage - 83 lines uncovered at last run
- add
zizmorlinting to the GitHub actions - both local and as an action itself. Usehttps://github.com/GitHubSecurityLab/actions-permissionto help. - after hardening the release workflow permissions, switch both local and
CI
zizmorruns to thepedanticpersona - add colorization for different file types, folders and symlinks. Make it customizable and theme-able. Make it default but allow an option to disable it (or vice-versa). Files that have a known extension should all be colored the same way, and different to unknown file tipes.
- Add icons for partials like
TODO.*,LICENSE.*and more - brands like claude, codex, vscode and more where the nerdfont exists - using the config file, allow extending the existing file and folder mapping, or deleting specific maps.
- When adding recursion or tree-style output, revisit whether directory
traversal should move over to the
ignorecrate instead of the current custom walker. - Unify recursive and tree traversal policy behind a shared walker so depth limits, symlink handling, pruning, and error handling cannot drift between output modes.
- Revisit recursive operand error semantics so explicit file-operand stat errors can be reported without aborting later directory walks.
- Avoid duplicate stderr for already-reported recursive traversal errors while still returning a non-zero exit status.
- Add configurable tree rendering styles, including the current compact root display, classic root branch graphics, and an ASCII fallback.
- Consider GNU-style
totallines or another consistent empty-directory marker for long and tree output, rather than special-casing single-root tree output. - Add inode and allocated block size support for long-format output.
- Add explicit long-format header modes, keeping plain
--headeras an alias for per-section headers. Suggested modes:sectionfor every recursive section,oncefor the first long-format table only, andnoneto disable config-enabled headers for one invocation. - Evaluate the Rust crate
uutils-term-gridas a short-format layout alternative before expanding the current custom grid code. - Improve listing performance with focused architecture changes, in this
order:
1. Add a short-format entry model so short output does not build full
long-format
FileInfodata such as owner/group names, permissions, size, mtime, and long symlink target text. 2. Pass a shared buffered stdout writer through render paths so recursive streaming does not pay for many small stdout writes. 3. Cache UID-to-user and GID-to-group lookups during long-format runs. 4. Carry cheapDirEntry::file_type()data through directory filtering and sorting so short mode can avoid extra metadata calls where possible. 5. Avoid per-entrysymlink_metadataon Unix whereDirEntry::file_typeand entry-name visibility rules are sufficient, while preserving the Windows reparse and hidden-attribute classification path. 6. Cache platform-native entry-name sort keys before sorting, so Windows avoids repeated UTF-16 allocation and ordinal comparisons. 7. CarryEntryClassificationfrom directory collection intoFileInfoconstruction so Windows reparse tags are not queried twice per entry. 8. Avoidcurrent_dir()lookup for already-absolute Windows paths before callingFindFirstFileWfor reparse classification. 9. Reuse a singleGitignoreCacheacross recursive and tree traversal so ancestor ignore files are not rediscovered for every directory. 10. Revisitprettytablefor long recursive output; a custom row formatter may be leaner for hot paths. - better handle dotfiles?
- option to list dotfiles (and folders) before non-dotfiles
- Investigate an optional name-shortening mode for very long filenames that preserves extensions without changing the default wrap behavior.
- Consider separating config-loaded values from effective runtime params so
merge behavior is more explicit than the current shared
Paramstype. - Detect terminal color capability once at startup and pass the effective
color mode/level through render paths, instead of re-checking
colored_textcapability while building long-format tables. Refactorlsplusrender tests to inject explicit color levels rather than mutatingTERM,NO_COLOR, orCOLORTERM; leave the env/terminal detection matrix tocolored_text. - Extend human-readable size units beyond petabytes so exabyte-scale values
render as
Einstead of largePmultiples. - Review
src/lib.rsand crate/module visibility. Keep the current out-of-source unit test layout, but reduce the accidental public library API for this app crate where modules/items do not need to be exported. - Improve rustdoc/docstring coverage in a dedicated docs PR. Start by
running
RUSTDOCFLAGS='-D missing-docs' cargo doc --no-deps; current known gaps include the publicstructsmodule export and publicIconenum variants. - Continue shifting tests toward behavior-focused checks at module seams
(
app,settings,render) instead of broad smoke-style coverage. - Evaluate
rstestfor table-driven tests/fixtures andserial_testfor tests that mutate process-global state such as color mode or environment variables. - Consider deriving or implementing
Defaultforcli::Flagsso tests can use struct update syntax instead of hand-rolling every flag field. Keep the parsed default path behavior (".") explicit in tests that need it.