Coverage report: 94%

Files Functions Classes

coverage.py v7.15.2, created at 2026-07-24 13:38 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/footman/__init__.py main   100% 7 0 0   100% 2 0   100%
src/footman/__init__.py __getattr__   100% 31 0 0   100% 20 0   100%
src/footman/__init__.py (no function)   100% 6 0 53   100% 0 0   100%
src/footman/__main__.py (no function)   100% 1 0 2   100% 0 0   100%
src/footman/_app.py _resolve_color   100% 15 0 0   100% 12 0   100%
src/footman/_app.py _set_colors   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _error   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _refuse   100% 5 0 0   100% 2 0   100%
src/footman/_app.py _wants_json   83% 12 2 0   75% 8 2   80%
src/footman/_app.py _print_version   100% 5 0 0   100% 2 0   100%
src/footman/_app.py _globals_to_dict   100% 15 0 0   100% 6 0   100%
src/footman/_app.py resolve_task_files   100% 11 0 0   100% 2 0   100%
src/footman/_app.py _discover   100% 18 0 0   100% 8 0   100%
src/footman/_app.py _format_value   60% 5 2 0   50% 4 2   56%
src/footman/_app.py _plan_line   100% 15 0 0   100% 10 0   100%
src/footman/_app.py _print_plan   100% 5 0 0   75% 4 1   89%
src/footman/_app.py _print_footer   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _styled_name   100% 4 0 0   100% 0 0   100%
src/footman/_app.py _styled_help   100% 5 0 0   100% 4 0   100%
src/footman/_app.py _print_list   100% 9 0 0   100% 4 0   100%
src/footman/_app.py _print_tree   100% 12 0 0   100% 6 0   100%
src/footman/_app.py _print_task_help   97% 39 1 0   90% 20 2   95%
src/footman/_app.py _print_group_help   65% 34 12 0   50% 16 4   60%
src/footman/_app.py _print_global_help   100% 17 0 0   100% 6 0   100%
src/footman/_app.py _wants_help   100% 6 0 0   100% 6 0   100%
src/footman/_app.py _expand_help_path   100% 10 0 0   100% 6 0   100%
src/footman/_app.py _help_targets   100% 21 0 0   100% 12 0   100%
src/footman/_app.py _print_help   93% 15 1 0   90% 10 1   92%
src/footman/_app.py _where   85% 20 3 0   67% 6 2   81%
src/footman/_app.py _print_summary   88% 34 4 0   82% 22 2   86%
src/footman/_app.py _print_json   100% 13 0 0   100% 4 0   100%
src/footman/_app.py _resolve_shell   100% 14 0 0   100% 6 0   100%
src/footman/_app.py _install_completion   100% 14 0 0   100% 6 0   100%
src/footman/_app.py _uninstall_completion   71% 14 4 0   83% 6 1   75%
src/footman/_app.py _setup_completion   100% 8 0 0   100% 4 0   100%
src/footman/_app.py run   100% 4 0 0   100% 0 0   100%
src/footman/_app.py _maybe_collect   100% 16 0 0   100% 4 0   100%
src/footman/_app.py _spawn_gc   78% 9 2 0   100% 2 0   82%
src/footman/_app.py _uv_handoff   84% 43 7 0   88% 16 2   85%
src/footman/_app.py _run   100% 28 0 0   100% 10 0   100%
src/footman/_app.py _execute   88% 33 4 0   100% 8 0   90%
src/footman/_app.py _run_tree   96% 80 3 0   95% 40 2   96%
src/footman/_app.py run_group   82% 11 2 0   100% 2 0   85%
src/footman/_app.py (no function)   100% 59 0 0   100% 0 0   100%
src/footman/_colordata.py (no function)   100% 2 0 0   100% 0 0   100%
src/footman/_colorprobe.py flag_candidate   90% 10 1 0   67% 6 2   81%
src/footman/_colorprobe.py _fixture   100% 10 0 0   100% 4 0   100%
src/footman/_colorprobe.py _argv   100% 1 0 0   100% 0 0   100%
src/footman/_colorprobe.py _capture   78% 9 2 0   50% 2 1   73%
src/footman/_colorprobe.py probe   76% 29 7 0   56% 16 5   69%
src/footman/_colorprobe.py probe.coloured   100% 1 0 0   100% 0 0   100%
src/footman/_colorprobe.py probe_all   100% 1 0 0   100% 0 0   100%
src/footman/_colorprobe.py render   100% 9 0 0   100% 2 0   100%
src/footman/_colorprobe.py (no function)   100% 43 0 0   100% 0 0   100%
src/footman/_complete.py _consume_globals   83% 23 4 0   72% 18 3   78%
src/footman/_complete.py _Segment.__init__   100% 11 0 0   100% 2 0   100%
src/footman/_complete.py _describe   100% 3 0 0   100% 0 0   100%
src/footman/_complete.py complete   97% 99 3 0   92% 76 6   95%
src/footman/_complete.py _load_manifest   100% 6 0 0   100% 0 0   100%
src/footman/_complete.py _maybe_refresh   80% 10 2 0   100% 4 0   86%
src/footman/_complete.py _spawn_refresh   100% 13 0 0   100% 4 0   100%
src/footman/_complete.py _cold_build   100% 12 0 0   100% 8 0   100%
src/footman/_complete.py _leading_global_value   100% 14 0 0   100% 10 0   100%
src/footman/_complete.py _tasks_file_from   100% 1 0 0   100% 0 0   100%
src/footman/_complete.py _emit   75% 8 2 0   50% 4 2   67%
src/footman/_complete.py _fresh_dynamic   100% 15 0 0   100% 8 0   100%
src/footman/_complete.py complete_cli   97% 38 1 0   86% 22 3   93%
src/footman/_complete.py main   0% 1 1 0   100% 0 0   0%
src/footman/_complete.py (no function)   100% 32 0 2   100% 0 0   100%
src/footman/_describe.py wants_color   80% 10 2 0   100% 4 0   86%
src/footman/_describe.py bold   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py dim   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py cyan   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py bold_cyan   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py red   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py value_hint   89% 9 1 0   83% 6 1   87%
src/footman/_describe.py usage_fragment   92% 13 1 0   88% 8 1   90%
src/footman/_describe.py param_label   100% 7 0 0   100% 4 0   100%
src/footman/_describe.py param_detail   0% 2 2 0   100% 0 0   0%
src/footman/_describe.py param_detail_parts   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py _mechanics   82% 17 3 0   79% 14 3   81%
src/footman/_describe.py sample_value   100% 2 0 0   100% 0 0   100%
src/footman/_describe.py paint_cli   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py invocation_parts   100% 5 0 0   50% 2 1   86%
src/footman/_describe.py usage_parts   100% 7 0 0   75% 4 1   91%
src/footman/_describe.py example_parts   100% 13 0 0   100% 8 0   100%
src/footman/_describe.py example   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py task_line   100% 8 0 0   100% 6 0   100%
src/footman/_describe.py iter_tasks   100% 4 0 0   100% 4 0   100%
src/footman/_describe.py iter_group_paths   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py json_default   100% 15 0 0   100% 14 0   100%
src/footman/_describe.py jsonable   50% 4 2 0   100% 0 0   50%
src/footman/_describe.py (no function)   100% 34 0 0   100% 0 0   100%
src/footman/_drivers.py Provision.target   100% 1 0 0   100% 0 0   100%
src/footman/_drivers.py Driver.key   100% 1 0 0   100% 0 0   100%
src/footman/_drivers.py Driver.wanted   100% 3 0 0   100% 2 0   100%
src/footman/_drivers.py _brew_prefixes   100% 7 0 0   83% 6 1   92%
src/footman/_drivers.py _resolve   100% 6 0 0   100% 6 0   100%
src/footman/_drivers.py installed   100% 1 0 0   100% 0 0   100%
src/footman/_drivers.py version   78% 9 2 0   100% 2 0   82%
src/footman/_drivers.py in_process_capable   100% 2 0 0   100% 0 0   100%
src/footman/_drivers.py extract   100% 6 0 0   100% 4 0   100%
src/footman/_drivers.py _rebase   100% 5 0 0   100% 4 0   100%
src/footman/_drivers.py _from_click   100% 12 0 0   100% 4 0   100%
src/footman/_drivers.py _select   80% 5 1 0   50% 2 1   71%
src/footman/_drivers.py find   100% 4 0 0   100% 4 0   100%
src/footman/_drivers.py (no function)   100% 64 0 0   100% 0 0   100%
src/footman/_fetch.py cache_dir   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _key   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _paths_for   100% 2 0 0   100% 0 0   100%
src/footman/_fetch.py _load_meta   100% 5 0 0   100% 0 0   100%
src/footman/_fetch.py _digest   100% 5 0 0   100% 2 0   100%
src/footman/_fetch.py _resolve_backend   85% 13 2 0   83% 12 2   84%
src/footman/_fetch.py _available   100% 6 0 0   100% 4 0   100%
src/footman/_fetch.py _download   100% 5 0 0   100% 4 0   100%
src/footman/_fetch.py _conditional_headers   83% 6 1 0   75% 4 1   80%
src/footman/_fetch.py _download_urllib   90% 20 2 0   75% 8 2   86%
src/footman/_fetch.py _download_curl   88% 8 1 0   75% 4 1   83%
src/footman/_fetch.py _download_lib   100% 9 0 0   100% 4 0   100%
src/footman/_fetch.py fetch   100% 24 0 0   88% 8 1   97%
src/footman/_fetch.py _configured_backend   100% 2 0 0   100% 0 0   100%
src/footman/_fetch.py _deliver   100% 8 0 0   100% 6 0   100%
src/footman/_fetch.py _record   100% 2 0 0   100% 0 0   100%
src/footman/_fetch.py (no function)   100% 30 0 0   100% 0 0   100%
src/footman/_gc.py collect   100% 29 0 0   100% 16 0   100%
src/footman/_gc.py collect.unlink   60% 5 2 0   100% 0 0   60%
src/footman/_gc.py _idle   100% 5 0 0   100% 2 0   100%
src/footman/_gc.py main   75% 4 1 0   50% 2 1   67%
src/footman/_gc.py (no function)   100% 11 0 0   100% 0 0   100%
src/footman/_paths.py find_project_root   100% 5 0 0   100% 4 0   100%
src/footman/_paths.py find_repo_root   100% 5 0 0   100% 4 0   100%
src/footman/_paths.py dir_chain   100% 8 0 0   100% 4 0   100%
src/footman/_paths.py task_files   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py cache_home   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py config_home   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py footman_config_file   100% 4 0 0   100% 2 0   100%
src/footman/_paths.py footman_cache_dir   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py _dir_key   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py manifest_path   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py times_path   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py source_manifest_path   100% 3 0 0   100% 0 0   100%
src/footman/_paths.py cwd_manifest_path   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py (no function)   100% 20 0 0   100% 0 0   100%
src/footman/_progress.py default_jobs   100% 1 0 0   100% 0 0   100%
src/footman/_progress.py chain_key   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py estimate   100% 7 0 0   100% 4 0   100%
src/footman/_progress.py load_runs   86% 7 1 0   75% 4 1   82%
src/footman/_progress.py load_cmd_width   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py record   100% 27 0 0   100% 8 0   100%
src/footman/_progress.py _load   100% 5 0 0   100% 0 0   100%
src/footman/_progress.py fmt_secs   80% 5 1 0   75% 4 1   78%
src/footman/_progress.py StatusLine.__init__   100% 15 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.open   100% 2 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.close   100% 5 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._run_ticker   50% 2 1 0   50% 2 1   50%
src/footman/_progress.py StatusLine.unit_added   100% 2 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_started   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_counted   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_finished   100% 7 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine.unit_skipped   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.notify   100% 5 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine.paint   100% 7 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._clear_locked   100% 4 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._counted_fraction   91% 11 1 0   75% 8 2   84%
src/footman/_progress.py StatusLine._render   94% 31 2 0   86% 14 2   91%
src/footman/_progress.py (no function)   100% 49 0 0   100% 0 0   100%
src/footman/_provision.py bin_dir   100% 1 0 0   100% 0 0   100%
src/footman/_provision.py provision   86% 22 3 0   83% 12 2   85%
src/footman/_provision.py _uv_env   100% 1 0 0   100% 0 0   100%
src/footman/_provision.py _uv_tier   100% 14 0 0   100% 4 0   100%
src/footman/_provision.py _python_tier   16% 19 16 0   17% 6 1   16%
src/footman/_provision.py _node_tier   100% 9 0 0   100% 4 0   100%
src/footman/_provision.py _release   100% 9 0 0   100% 0 0   100%
src/footman/_provision.py _latest_assets   100% 12 0 0   100% 6 0   100%
src/footman/_provision.py _platform_tokens   100% 4 0 0   100% 0 0   100%
src/footman/_provision.py _pick_asset   100% 8 0 0   100% 2 0   100%
src/footman/_provision.py _pick_asset.matches   100% 4 0 0   100% 2 0   100%
src/footman/_provision.py _pick_asset.rank   100% 3 0 0   100% 0 0   100%
src/footman/_provision.py _get_json   100% 6 0 0   100% 0 0   100%
src/footman/_provision.py _download   83% 12 2 0   100% 2 0   86%
src/footman/_provision.py _extract_binary   86% 21 3 0   70% 10 3   81%
src/footman/_provision.py _run   0% 5 5 0   100% 0 0   0%
src/footman/_provision.py (no function)   100% 40 0 0   100% 0 0   100%
src/footman/_refresh.py refresh_cwd   100% 2 0 0   100% 0 0   100%
src/footman/_refresh.py _rebuild   100% 21 0 0   83% 6 1   96%
src/footman/_refresh.py refresh_source   100% 2 0 0   100% 0 0   100%
src/footman/_refresh.py _rebuild_source   87% 15 2 0   75% 4 1   84%
src/footman/_refresh.py (no function)   100% 6 0 0   100% 0 0   100%
src/footman/_shellcomp.py script_for   100% 2 0 0   100% 0 0   100%
src/footman/_shellcomp.py _data_home   100% 1 0 0   100% 0 0   100%
src/footman/_shellcomp.py _config_home   100% 1 0 0   100% 0 0   100%
src/footman/_shellcomp.py _sniff_encoding   82% 11 2 0   67% 6 2   76%
src/footman/_shellcomp.py _append_once   88% 17 2 0   100% 2 0   89%
src/footman/_shellcomp.py _manual_hint   100% 1 0 0   100% 0 0   100%
src/footman/_shellcomp.py _remove_once   79% 19 4 0   100% 4 0   83%
src/footman/_shellcomp.py _zsh_rc   100% 3 0 0   100% 0 0   100%
src/footman/_shellcomp.py _bash_rcs   100% 7 0 0   100% 2 0   100%
src/footman/_shellcomp.py detect_shell   100% 5 0 0   100% 4 0   100%
src/footman/_shellcomp.py _detect_posix   81% 21 4 0   88% 8 1   83%
src/footman/_shellcomp.py _ask_shell   45% 11 6 0   50% 6 1   47%
src/footman/_shellcomp.py _pwsh_profiles   100% 8 0 0   100% 6 0   100%
src/footman/_shellcomp.py _nu_config_path   75% 4 1 0   50% 2 1   67%
src/footman/_shellcomp.py _bash_path   90% 10 1 0   83% 6 1   88%
src/footman/_shellcomp.py install   100% 24 0 0   100% 12 0   100%
src/footman/_shellcomp.py uninstall   97% 32 1 0   94% 18 1   96%
src/footman/_shellcomp.py (no function)   100% 33 0 0   100% 0 0   100%
src/footman/_stubgen.py render   100% 5 0 0   100% 0 0   100%
src/footman/_stubgen.py _imports   100% 10 0 0   100% 2 0   100%
src/footman/_stubgen.py _class_name   100% 1 0 0   100% 0 0   100%
src/footman/_stubgen.py _tree   100% 9 0 0   100% 4 0   100%
src/footman/_stubgen.py _classes   100% 18 0 0   100% 10 0   100%
src/footman/_stubgen.py _has_subcommands   100% 1 0 0   100% 0 0   100%
src/footman/_stubgen.py _flags_method   100% 14 0 0   100% 4 0   100%
src/footman/_stubgen.py _method   100% 17 0 0   100% 6 0   100%
src/footman/_stubgen.py _positional_lines   100% 8 0 0   100% 6 0   100%
src/footman/_stubgen.py _unique   100% 6 0 0   100% 4 0   100%
src/footman/_stubgen.py _safe   100% 2 0 0   100% 0 0   100%
src/footman/_stubgen.py _esc   100% 1 0 0   100% 0 0   100%
src/footman/_stubgen.py _annotation   100% 8 0 0   100% 6 0   100%
src/footman/_stubgen.py _docstring   100% 14 0 0   100% 6 0   100%
src/footman/_stubgen.py _md_safe   100% 6 0 0   100% 2 0   100%
src/footman/_stubgen.py _arg_lines   100% 13 0 0   100% 8 0   100%
src/footman/_stubgen.py (no function)   100% 24 0 0   100% 0 0   100%
src/footman/_suggest.py _values   83% 24 4 0   71% 14 4   79%
src/footman/_suggest.py main   76% 25 6 0   50% 14 3   67%
src/footman/_suggest.py (no function)   100% 7 0 2   100% 0 0   100%
src/footman/_toolhelp.py _sections   100% 11 0 0   100% 6 0   100%
src/footman/_toolhelp.py _blocks   100% 33 0 0   100% 18 0   100%
src/footman/_toolhelp.py _spellings   100% 9 0 0   100% 2 0   100%
src/footman/_toolhelp.py _clean   100% 6 0 0   100% 0 0   100%
src/footman/_toolhelp.py _first_sentence   100% 5 0 0   100% 4 0   100%
src/footman/_toolhelp.py _parse_default   100% 4 0 0   100% 2 0   100%
src/footman/_toolhelp.py _option   100% 20 0 0   100% 8 0   100%
src/footman/_toolhelp.py _choices   100% 7 0 0   100% 4 0   100%
src/footman/_toolhelp.py _spell   100% 1 0 0   100% 0 0   100%
src/footman/_toolhelp.py _values   100% 1 0 0   100% 0 0   100%
src/footman/_toolhelp.py _kind   100% 7 0 0   100% 6 0   100%
src/footman/_toolhelp.py _coerce_default   80% 5 1 0   75% 4 1   78%
src/footman/_toolhelp.py _pair_negations   100% 15 0 0   100% 10 0   100%
src/footman/_toolhelp.py _with_negation   67% 3 1 0   50% 2 1   60%
src/footman/_toolhelp.py parse_help   100% 23 0 0   94% 18 1   98%
src/footman/_toolhelp.py _with_short_aliases   100% 9 0 0   100% 6 0   100%
src/footman/_toolhelp.py _wraps   100% 8 0 0   100% 6 0   100%
src/footman/_toolhelp.py _is_option_token   100% 2 0 0   100% 0 0   100%
src/footman/_toolhelp.py _top_level_positionals   100% 7 0 0   100% 4 0   100%
src/footman/_toolhelp.py _usage_shape   100% 1 0 0   100% 0 0   100%
src/footman/_toolhelp.py _grammar_shape   100% 14 0 0   100% 10 0   100%
src/footman/_toolhelp.py _synopsis_shape   90% 10 1 0   75% 4 1   86%
src/footman/_toolhelp.py _usage_line   100% 23 0 0   100% 16 0   100%
src/footman/_toolhelp.py _summary   92% 12 1 0   90% 10 1   91%
src/footman/_toolhelp.py subcommands   100% 9 0 0   88% 8 1   94%
src/footman/_toolhelp.py run_help   67% 9 3 0   75% 4 1   69%
src/footman/_toolhelp.py _run_man   0% 6 6 0   100% 0 0   0%
src/footman/_toolhelp.py _wide_env   100% 1 0 0   100% 0 0   100%
src/footman/_toolhelp.py from_help   82% 17 3 0   58% 12 3   72%
src/footman/_toolhelp.py (no function)   100% 59 0 0   100% 0 0   100%
src/footman/_toolspec.py ToolSpec.negations   100% 9 0 0   100% 8 0   100%
src/footman/_toolspec.py ToolSpec.wrappers   100% 1 0 0   100% 0 0   100%
src/footman/_toolspec.py ToolSpec.color_flags   100% 8 0 0   100% 6 0   100%
src/footman/_toolspec.py _color_option   100% 9 0 0   100% 4 0   100%
src/footman/_toolspec.py _type_name   100% 5 0 0   100% 2 0   100%
src/footman/_toolspec.py from_click   83% 6 1 0   50% 2 1   75%
src/footman/_toolspec.py _verb_from_click   93% 15 1 0   88% 8 1   91%
src/footman/_toolspec.py _click_positional   100% 7 0 0   100% 4 0   100%
src/footman/_toolspec.py _click_choices   100% 4 0 0   100% 2 0   100%
src/footman/_toolspec.py _keyword   100% 3 0 0   100% 0 0   100%
src/footman/_toolspec.py _plain_default   100% 4 0 0   100% 2 0   100%
src/footman/_toolspec.py _first_line   100% 5 0 0   75% 4 1   89%
src/footman/_toolspec.py (no function)   100% 52 0 0   100% 0 0   100%
src/footman/app.py App.__init__   100% 1 0 0   100% 0 0   100%
src/footman/app.py App.run   100% 6 0 0   100% 2 0   100%
src/footman/app.py (no function)   100% 14 0 0   100% 0 0   100%
src/footman/coerce.py _tag_of   100% 11 0 0   100% 10 0   100%
src/footman/coerce.py _is_union   100% 1 0 0   100% 0 0   100%
src/footman/coerce.py _strip_none   100% 1 0 0   100% 0 0   100%
src/footman/coerce.py union_members   100% 3 0 0   100% 2 0   100%
src/footman/coerce.py _union_of   80% 5 1 0   50% 2 1   71%
src/footman/coerce.py peel   100% 63 0 0   98% 42 1   99%
src/footman/coerce.py is_flag   100% 1 0 0   100% 0 0   100%
src/footman/coerce.py sort_tags   100% 1 0 0   100% 0 0   100%
src/footman/coerce.py element_tags   100% 5 0 0   100% 2 0   100%
src/footman/coerce.py type_phrase   100% 1 0 0   100% 0 0   100%
src/footman/coerce.py element_choices   100% 6 0 0   100% 4 0   100%
src/footman/coerce.py all_choices   100% 6 0 0   100% 4 0   100%
src/footman/coerce.py eagerly_checkable   100% 8 0 0   100% 6 0   100%
src/footman/coerce.py coerce_scalar   100% 18 0 0   94% 16 1   97%
src/footman/coerce.py coerce_one   89% 18 2 0   88% 16 2   88%
src/footman/coerce.py _coerce_union   87% 23 3 0   77% 22 5   82%
src/footman/coerce.py coerce_token   100% 7 0 0   100% 4 0   100%
src/footman/coerce.py coerce_custom   90% 10 1 0   83% 6 1   88%
src/footman/coerce.py (no function)   100% 48 0 0   100% 0 0   100%
src/footman/compose.py _tree_of_module   75% 4 1 0   50% 2 1   67%
src/footman/compose.py _adopt_explicit_group   100% 5 0 0   100% 2 0   100%
src/footman/compose.py _import_source   92% 13 1 0   75% 4 1   88%
src/footman/compose.py _as_group   100% 5 0 0   100% 4 0   100%
src/footman/compose.py _fork   100% 7 0 0   100% 2 0   100%
src/footman/compose.py include   100% 24 0 0   94% 16 1   98%
src/footman/compose.py plugin   97% 29 1 0   100% 12 0   98%
src/footman/compose.py mount_plugins   100% 9 0 0   100% 4 0   100%
src/footman/compose.py _namespace   100% 7 0 0   100% 2 0   100%
src/footman/compose.py _named   100% 4 0 0   100% 0 0   100%
src/footman/compose.py (no function)   100% 17 0 0   100% 0 0   100%
src/footman/config.py _read_toml   91% 11 1 0   50% 2 1   85%
src/footman/config.py _footman_table   100% 8 0 0   100% 4 0   100%
src/footman/config.py _dir_config   100% 12 0 0   100% 8 0   100%
src/footman/config.py _parse_duration   100% 19 0 0   100% 10 0   100%
src/footman/config.py completion_max_age   100% 3 0 0   100% 0 0   100%
src/footman/config.py load_config   100% 14 0 0   88% 8 1   95%
src/footman/config.py (no function)   100% 17 0 0   100% 0 0   100%
src/footman/context.py Result.__new__   100% 7 0 0   100% 0 0   100%
src/footman/context.py Result.code   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.ok   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.output   100% 1 0 0   100% 0 0   100%
src/footman/context.py current   100% 2 0 0   100% 0 0   100%
src/footman/context.py use_context   100% 5 0 0   100% 0 0   100%
src/footman/context.py passthrough   100% 1 0 0   100% 0 0   100%
src/footman/context.py progress   100% 9 0 0   100% 4 0   100%
src/footman/context.py track   86% 14 2 0   62% 8 3   77%
src/footman/context.py inherited   91% 11 1 0   75% 4 1   87%
src/footman/context.py inherited.call_inherited   100% 6 0 0   100% 0 0   100%
src/footman/context.py RunFailed.__init__   100% 2 0 0   100% 0 0   100%
src/footman/context.py Failed.__init__   100% 3 0 0   100% 0 0   100%
src/footman/context.py fail   100% 1 0 0   100% 0 0   100%
src/footman/context.py _is_deliberate_stop   100% 1 0 0   100% 0 0   100%
src/footman/context.py context_param_name   100% 7 0 0   100% 4 0   100%
src/footman/context.py seed_cmd_width   100% 1 0 0   100% 0 0   100%
src/footman/context.py cmd_width   100% 1 0 0   100% 0 0   100%
src/footman/context.py _observe_cmd   100% 3 0 0   100% 2 0   100%
src/footman/context.py set_status   100% 1 0 0   100% 0 0   100%
src/footman/context.py active_status   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.__init__   67% 6 2 0   100% 0 0   67%
src/footman/context.py _Router._sink   100% 2 0 0   100% 0 0   100%
src/footman/context.py _Router.write   83% 6 1 0   75% 4 1   80%
src/footman/context.py _Router.flush   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.isatty   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.__getattr__   100% 1 0 0   100% 0 0   100%
src/footman/context.py real_stdout   100% 1 0 0   100% 0 0   100%
src/footman/context.py real_stderr   100% 1 0 0   100% 0 0   100%
src/footman/context.py _stdin_is_tty   0% 4 4 0   100% 0 0   0%
src/footman/context.py _scrub   100% 1 0 0   100% 0 0   100%
src/footman/context.py _prompt_core   78% 18 4 0   70% 10 3   75%
src/footman/context.py _guard_interactive   100% 4 0 0   100% 2 0   100%
src/footman/context.py prompt   100% 6 0 0   100% 4 0   100%
src/footman/context.py confirm   100% 7 0 0   100% 4 0   100%
src/footman/context.py select   86% 29 4 0   75% 16 4   82%
src/footman/context.py _parse_one   100% 7 0 0   100% 2 0   100%
src/footman/context.py _parse_multi   100% 6 0 0   100% 4 0   100%
src/footman/context.py routing   100% 12 0 0   100% 4 0   100%
src/footman/context.py _is_code   100% 1 0 0   100% 0 0   100%
src/footman/context.py Invocation.text   100% 3 0 0   100% 2 0   100%
src/footman/context.py Invocation.painted   100% 4 0 0   100% 2 0   100%
src/footman/context.py _shell_quote   100% 3 0 0   100% 2 0   100%
src/footman/context.py _exact   100% 5 0 0   100% 4 0   100%
src/footman/context.py _label   100% 4 0 0   100% 2 0   100%
src/footman/context.py _exit_code   100% 1 0 0   100% 0 0   100%
src/footman/context.py _call_for_code   71% 7 2 0   100% 2 0   78%
src/footman/context.py _process_state   100% 15 0 0   100% 6 0   100%
src/footman/context.py _run_callable   100% 17 0 0   100% 4 0   100%
src/footman/context.py _kill_tree   100% 8 0 0   100% 4 0   100%
src/footman/context.py _register_child   100% 6 0 0   100% 2 0   100%
src/footman/context.py _forget_child   100% 2 0 0   100% 0 0   100%
src/footman/context.py reset_abort   100% 2 0 0   100% 0 0   100%
src/footman/context.py terminate_live_children   100% 11 0 0   100% 6 0   100%
src/footman/context.py terminate_live_children._escalate   100% 4 0 0   100% 4 0   100%
src/footman/context.py _run_subprocess   93% 15 1 0   90% 10 1   92%
src/footman/context.py _dim   100% 1 0 0   100% 0 0   100%
src/footman/context.py _colored   100% 5 0 0   100% 4 0   100%
src/footman/context.py color_on   100% 1 0 0   100% 0 0   100%
src/footman/context.py color_env   100% 3 0 0   100% 2 0   100%
src/footman/context.py run_colour_on   100% 4 0 0   100% 2 0   100%
src/footman/context.py color_environment   100% 10 0 0   100% 6 0   100%
src/footman/context.py _name_col   100% 4 0 0   100% 2 0   100%
src/footman/context.py _step_line   100% 10 0 0   100% 2 0   100%
src/footman/context.py _shell_operator   60% 5 2 0   100% 0 0   60%
src/footman/context.py _find_exe   100% 4 0 0   100% 4 0   100%
src/footman/context.py _resolve_shell   88% 24 3 0   83% 18 3   86%
src/footman/context.py _shell_kind_of   100% 1 0 0   100% 0 0   100%
src/footman/context.py _shell_prep   100% 11 0 0   88% 8 1   95%
src/footman/context.py run   95% 65 3 0   94% 32 2   95%
src/footman/context.py parallel   100% 23 0 0   100% 12 0   100%
src/footman/context.py parallel._call_name   75% 4 1 0   50% 2 1   67%
src/footman/context.py parallel.invoke   89% 38 4 0   100% 12 0   92%
src/footman/context.py (no function)   100% 184 0 0   100% 0 0   100%
src/footman/discover.py TasksImportError.__init__   100% 3 0 0   100% 0 0   100%
src/footman/discover.py FinalizeError.__init__   100% 3 0 0   100% 0 0   100%
src/footman/discover.py _import_file   95% 19 1 0   75% 4 1   91%
src/footman/discover.py _evict_siblings   89% 9 1 0   83% 6 1   87%
src/footman/discover.py _tag   75% 4 1 0   75% 4 1   75%
src/footman/discover.py _overlay   100% 13 0 0   100% 8 0   100%
src/footman/discover.py load_tree   100% 15 0 0   100% 4 0   100%
src/footman/discover.py load_single   0% 1 1 0   100% 0 0   0%
src/footman/discover.py defining_dir   100% 1 0 0   100% 0 0   100%
src/footman/discover.py shadowed   100% 1 0 0   100% 0 0   100%
src/footman/discover.py shadow_chain   100% 4 0 0   100% 2 0   100%
src/footman/discover.py (no function)   100% 21 0 0   100% 0 0   100%
src/footman/docstrings.py parse   94% 18 1 0   92% 12 1   93%
src/footman/docstrings.py _long_end   89% 9 1 0   88% 8 1   88%
src/footman/docstrings.py _find_google   100% 6 0 0   100% 6 0   100%
src/footman/docstrings.py _find_numpy   100% 4 0 0   100% 4 0   100%
src/footman/docstrings.py _find_sphinx   100% 4 0 0   100% 4 0   100%
src/footman/docstrings.py _prose   100% 5 0 0   100% 4 0   100%
src/footman/docstrings.py _indent   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _clean_name   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _join   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _store   100% 2 0 0   100% 2 0   100%
src/footman/docstrings.py _google_params   100% 15 0 0   100% 8 0   100%
src/footman/docstrings.py _numpy_params   100% 27 0 0   100% 10 0   100%
src/footman/docstrings.py _numpy_params.flush   100% 2 0 0   100% 2 0   100%
src/footman/docstrings.py _sphinx_params   100% 20 0 0   100% 10 0   100%
src/footman/docstrings.py (no function)   100% 34 0 0   100% 0 0   100%
src/footman/executor.py resolve   90% 10 1 0   83% 6 1   88%
src/footman/executor.py _wants_context   100% 11 0 0   83% 6 1   94%
src/footman/executor.py _run_checks   100% 11 0 0   83% 6 1   94%
src/footman/executor.py _validate_value   47% 17 9 0   50% 12 2   48%
src/footman/executor.py _coerce_extra   100% 5 0 0   100% 0 0   100%
src/footman/executor.py _env_value   100% 9 0 0   100% 4 0   100%
src/footman/executor.py _env_value.one   100% 1 0 0   100% 0 0   100%
src/footman/executor.py _prompt_param   100% 21 0 0   100% 4 0   100%
src/footman/executor.py _left_siblings   100% 9 0 0   88% 8 1   94%
src/footman/executor.py bind   94% 66 4 0   90% 40 4   92%
src/footman/executor.py forward_map   83% 24 4 0   79% 14 1   82%
src/footman/executor.py _call   100% 15 0 0   100% 2 0   100%
src/footman/executor.py run_task   96% 27 1 0   100% 8 0   97%
src/footman/executor.py _result   100% 1 0 0   100% 0 0   100%
src/footman/executor.py run_chain   100% 2 0 0   100% 0 0   100%
src/footman/executor.py (no function)   100% 43 0 0   100% 0 0   100%
src/footman/manifest.py resolved_signature   100% 4 0 0   100% 0 0   100%
src/footman/manifest.py param_spec   96% 80 3 0   93% 54 4   95%
src/footman/manifest.py _marker_keys   100% 16 0 0   94% 16 1   97%
src/footman/manifest.py _run_completer   100% 10 0 0   100% 4 0   100%
src/footman/manifest.py _finish   100% 4 0 0   100% 2 0   100%
src/footman/manifest.py _cli_params   100% 3 0 0   100% 0 0   100%
src/footman/manifest.py _source_of   75% 4 1 0   50% 2 1   67%
src/footman/manifest.py _task_node   100% 34 0 0   100% 24 0   100%
src/footman/manifest.py _node   100% 4 0 0   100% 2 0   100%
src/footman/manifest.py tree_hash   100% 2 0 0   100% 0 0   100%
src/footman/manifest.py build_manifest   100% 2 0 0   100% 0 0   100%
src/footman/manifest.py write_manifest   100% 4 0 0   100% 0 0   100%
src/footman/manifest.py load_manifest   100% 5 0 0   100% 0 0   100%
src/footman/manifest.py sync_manifest   100% 9 0 0   100% 4 0   100%
src/footman/manifest.py (no function)   100% 30 0 0   100% 0 0   100%
src/footman/markdown.py globals_table   100% 10 0 0   100% 2 0   100%
src/footman/markdown.py render_page   100% 5 0 0   100% 2 0   100%
src/footman/markdown.py render_site   100% 8 0 0   100% 2 0   100%
src/footman/markdown.py _resolve   100% 10 0 0   100% 6 0   100%
src/footman/markdown.py _slug   100% 1 0 0   100% 0 0   100%
src/footman/markdown.py _cell   100% 1 0 0   100% 0 0   100%
src/footman/markdown.py _h   100% 2 0 0   100% 0 0   100%
src/footman/markdown.py _type_cell   87% 15 2 0   83% 12 2   85%
src/footman/markdown.py _default_cell   100% 5 0 0   100% 4 0   100%
src/footman/markdown.py _task_page   100% 23 0 0   92% 12 1   97%
src/footman/markdown.py _group_page   100% 9 0 0   100% 6 0   100%
src/footman/markdown.py _site_group   100% 16 0 0   88% 8 1   96%
src/footman/markdown.py (no function)   100% 17 0 0   100% 0 0   100%
src/footman/params.py suggest.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py _NoSplitMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py _ForwardMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py _PathRequirement.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py _PathRequirement.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py between.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py env.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py check.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py doc.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py ask.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py (no function)   100% 50 0 10   100% 0 0   100%
src/footman/pytest_plugin.py fm   100% 2 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_project   100% 3 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_project.make   100% 5 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_record   100% 3 0 0   100% 0 0   100%
src/footman/pytest_plugin.py (no function)   100% 11 0 5   100% 0 0   100%
src/footman/registry.py cli_name   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _empty_body   80% 15 3 0   75% 4 1   79%
src/footman/registry.py _opts_overrides   100% 10 0 0   100% 4 0   100%
src/footman/registry.py _Opted.__init__   100% 3 0 0   100% 0 0   100%
src/footman/registry.py _Opted.__getattr__   100% 4 0 0   100% 2 0   100%
src/footman/registry.py _Opted.__call__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _Opted.opts   100% 4 0 0   100% 0 0   100%
src/footman/registry.py _Opted._dedup_key   100% 3 0 0   100% 0 0   100%
src/footman/registry.py _apply_policy   100% 14 0 0   100% 12 0   100%
src/footman/registry.py TaskFn.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.opts   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.__init__   100% 6 0 0   100% 0 0   100%
src/footman/registry.py Group._claim   100% 5 0 0   100% 4 0   100%
src/footman/registry.py Group.task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.task   75% 4 1 1   50% 2 1   67%
src/footman/registry.py Group.task.register   100% 6 0 0   100% 0 0   100%
src/footman/registry.py Group.group   100% 5 0 0   100% 0 0   100%
src/footman/registry.py Group.finalize   100% 2 0 0   100% 0 0   100%
src/footman/registry.py Group.default   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.default   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.default   100% 3 0 0   100% 0 0   100%
src/footman/registry.py Group.default.register   100% 18 0 0   100% 8 0   100%
src/footman/registry.py Group.opts   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Group.__call__   100% 9 0 0   100% 6 0   100%
src/footman/registry.py reset   100% 3 0 0   100% 0 0   100%
src/footman/registry.py _importable   100% 5 0 0   100% 0 0   100%
src/footman/registry.py pre_tasks   100% 1 0 0   100% 0 0   100%
src/footman/registry.py post_tasks   100% 1 0 0   100% 0 0   100%
src/footman/registry.py default_group   100% 1 0 0   100% 0 0   100%
src/footman/registry.py fans_out   100% 1 0 0   100% 0 0   100%
src/footman/registry.py wants_progress   100% 5 0 0   100% 4 0   100%
src/footman/registry.py is_infinite   100% 1 0 0   100% 0 0   100%
src/footman/registry.py is_interactive   100% 1 0 0   100% 0 0   100%
src/footman/registry.py keeps_going   100% 1 0 0   100% 0 0   100%
src/footman/registry.py is_atomic   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_confirm   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _gate   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _gate.decorate   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires   100% 2 0 1   100% 0 0   100%
src/footman/registry.py requires.check   100% 6 0 0   100% 0 0   100%
src/footman/registry.py requires_dep   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_dep.check   100% 4 0 0   100% 2 0   100%
src/footman/registry.py requires_tool   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_tool.check   100% 4 0 0   100% 2 0   100%
src/footman/registry.py requires_env   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_env.check   100% 4 0 0   100% 2 0   100%
src/footman/registry.py availability   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _as_fn   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.__init__   100% 6 0 0   100% 0 0   100%
src/footman/registry.py TaskView.pre   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.post   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.disabled   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.keep_going   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.atomic   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.infinite   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.interactive   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.timed   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.confirm   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.defining_dir   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.shadowed   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.shadow_chain   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.source_file   60% 5 2 0   100% 0 0   60%
src/footman/registry.py TaskView.add_pre   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.add_post   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.disable   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.set_opts   100% 2 0 0   100% 2 0   100%
src/footman/registry.py Tasks.__init__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Tasks.__iter__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Tasks.get   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Tasks.__getitem__   100% 3 0 0   100% 2 0   100%
src/footman/registry.py Tasks.__contains__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _task_views   100% 4 0 0   100% 4 0   100%
src/footman/registry.py capture   100% 9 0 0   100% 0 0   100%
src/footman/registry.py (no function)   100% 113 0 34   100% 0 0   100%
src/footman/schedule.py _default_seg   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _dep_key   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _as_task   90% 10 1 0   88% 8 1   89%
src/footman/schedule.py _build_dag   88% 26 3 0   90% 10 1   89%
src/footman/schedule.py _build_dag.new_node   100% 3 0 0   100% 0 0   100%
src/footman/schedule.py _build_dag.add_dep   100% 6 0 0   100% 2 0   100%
src/footman/schedule.py _build_dag._thread   100% 9 0 0   100% 8 0   100%
src/footman/schedule.py _build_dag._link   100% 12 0 0   100% 6 0   100%
src/footman/schedule.py _check_cycles   100% 6 0 0   100% 4 0   100%
src/footman/schedule.py _check_cycles.visit   93% 14 1 0   88% 8 1   91%
src/footman/schedule.py _toposort   100% 7 0 0   100% 2 0   100%
src/footman/schedule.py _toposort.visit   100% 7 0 0   83% 6 1   92%
src/footman/schedule.py _plain_output   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _make_ctx   100% 8 0 0   100% 0 0   100%
src/footman/schedule.py resolve_keep_going   71% 7 2 0   100% 2 0   78%
src/footman/schedule.py _scope_keep_going   100% 10 0 0   100% 8 0   100%
src/footman/schedule.py dag_wants_progress   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py NotConfirmed.__init__   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _ask_confirm   100% 4 0 0   100% 2 0   100%
src/footman/schedule.py _gate_confirms   100% 11 0 0   100% 4 0   100%
src/footman/schedule.py run_plan   94% 34 2 0   100% 6 0   95%
src/footman/schedule.py _run_sequential   95% 22 1 0   92% 12 1   94%
src/footman/schedule.py _make_status   100% 4 0 0   100% 2 0   100%
src/footman/schedule.py _run_parallel   85% 41 6 0   91% 22 2   87%
src/footman/schedule.py _run_parallel.dep_ok   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _run_parallel.dep_lost   100% 2 0 0   100% 0 0   100%
src/footman/schedule.py _run_parallel.dep_lost.lost   100% 1 0 0   100% 0 0   100%
src/footman/schedule.py _run_parallel.run_node   100% 9 0 0   75% 4 1   92%
src/footman/schedule.py (no function)   100% 42 0 0   100% 0 0   100%
src/footman/split.py _did_you_mean   100% 2 0 0   100% 0 0   100%
src/footman/split.py _misplaced_global   100% 6 0 0   100% 2 0   100%
src/footman/split.py _required_label   100% 2 0 0   100% 0 0   100%
src/footman/split.py _suggest_only   100% 1 0 0   100% 0 0   100%
src/footman/split.py _check   100% 17 0 0   100% 14 0   100%
src/footman/split.py _check_path   100% 3 0 0   100% 2 0   100%
src/footman/split.py _check_bounds   86% 7 1 0   75% 4 1   82%
src/footman/split.py _validate   100% 3 0 0   100% 0 0   100%
src/footman/split.py _parse_globals   95% 20 1 0   93% 14 1   94%
src/footman/split.py split_chain   100% 62 0 0   100% 30 0   100%
src/footman/split.py _consume_option   95% 40 2 0   88% 26 3   92%
src/footman/split.py _values   100% 3 0 0   100% 2 0   100%
src/footman/split.py _consume_pair   100% 7 0 0   100% 2 0   100%
src/footman/split.py _consume_positional   100% 8 0 0   100% 6 0   100%
src/footman/split.py (no function)   100% 34 0 0   100% 0 0   100%
src/footman/tasks/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py _project_tree   100% 16 0 0   75% 4 1   95%
src/footman/tasks/docs.py _path_of   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py page   100% 10 0 0   100% 2 0   100%
src/footman/tasks/docs.py site   100% 11 0 0   100% 2 0   100%
src/footman/tasks/docs.py reduce_frames   100% 3 0 0   100% 0 0   100%
src/footman/tasks/docs.py shots   95% 39 2 0   67% 6 2   91%
src/footman/tasks/docs.py keystrokes   100% 12 0 0   100% 10 0   100%
src/footman/tasks/docs.py _answer_queries   100% 11 0 0   100% 14 0   100%
src/footman/tasks/docs.py _pty_session   94% 78 5 0   88% 24 3   92%
src/footman/tasks/docs.py _pty_session._own_the_tty   0% 2 2 0   100% 0 0   0%
src/footman/tasks/docs.py _cell_style   100% 14 0 0   100% 12 0   100%
src/footman/tasks/docs.py _screens   100% 13 0 0   100% 6 0   100%
src/footman/tasks/docs.py compose_animation   100% 18 0 0   100% 2 0   100%
src/footman/tasks/docs.py _boot_shell   96% 27 1 0   90% 10 1   95%
src/footman/tasks/docs.py cast   81% 36 7 0   69% 16 5   77%
src/footman/tasks/docs.py globals_   100% 9 0 0   100% 2 0   100%
src/footman/tasks/docs.py (no function)   100% 52 0 0   100% 0 0   100%
src/footman/tasks/tools.py _stub_path   100% 1 0 0   100% 0 0   100%
src/footman/tasks/tools.py _platform   100% 1 0 0   100% 0 0   100%
src/footman/tasks/tools.py _generate   100% 2 0 0   100% 0 0   100%
src/footman/tasks/tools.py _render   100% 1 0 0   100% 0 0   100%
src/footman/tasks/tools.py _mode   100% 3 0 0   100% 2 0   100%
src/footman/tasks/tools.py _class_name   100% 1 0 0   100% 0 0   100%
src/footman/tasks/tools.py _formatted   100% 6 0 0   100% 0 0   100%
src/footman/tasks/tools.py list_   100% 15 0 0   100% 6 0   100%
src/footman/tasks/tools.py spec   94% 16 1 0   90% 10 1   92%
src/footman/tasks/tools.py sync   78% 18 4 0   67% 12 4   73%
src/footman/tasks/tools.py audit   86% 37 5 0   85% 26 4   86%
src/footman/tasks/tools.py color   75% 8 2 0   50% 2 1   70%
src/footman/tasks/tools.py _color_probe_and_write   73% 26 7 0   75% 12 3   74%
src/footman/tasks/tools.py _color_docs_table   0% 10 10 0   0% 4 0   0%
src/footman/tasks/tools.py provision   100% 11 0 0   100% 4 0   100%
src/footman/tasks/tools.py _print_outcomes   100% 4 0 0   100% 2 0   100%
src/footman/tasks/tools.py _sync_against   100% 7 0 0   100% 0 0   100%
src/footman/tasks/tools.py _header   100% 5 0 0   100% 2 0   100%
src/footman/tasks/tools.py _verbs_of   100% 8 0 0   100% 8 0   100%
src/footman/tasks/tools.py pages   100% 10 0 0   100% 4 0   100%
src/footman/tasks/tools.py write_tools_nav   100% 3 0 0   100% 0 0   100%
src/footman/tasks/tools.py nav_keys   100% 2 0 0   100% 0 0   100%
src/footman/tasks/tools.py _row   100% 7 0 0   100% 2 0   100%
src/footman/tasks/tools.py _page   100% 2 0 0   100% 0 0   100%
src/footman/tasks/tools.py (no function)   100% 52 0 0   100% 0 0   100%
src/footman/testing.py recording   100% 3 0 0   100% 0 0   100%
src/footman/testing.py InvokeResult.ok   100% 1 0 0   100% 0 0   100%
src/footman/testing.py _isolated   100% 11 0 0   75% 4 1   93%
src/footman/testing.py Runner.__init__   100% 1 0 0   100% 0 0   100%
src/footman/testing.py Runner.invoke   100% 10 0 0   100% 4 0   100%
src/footman/testing.py (no function)   100% 31 0 0   100% 0 0   100%
src/footman/tools.py _Off.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/tools.py _negation   100% 5 0 0   100% 2 0   100%
src/footman/tools.py _is_wrapper   100% 2 0 0   100% 0 0   100%
src/footman/tools.py _load_color   78% 9 2 0   100% 4 0   85%
src/footman/tools.py _color_flag   100% 5 0 0   100% 2 0   100%
src/footman/tools.py _color_tokens   100% 7 0 0   100% 4 0   100%
src/footman/tools.py _emit   100% 14 0 0   100% 10 0   100%
src/footman/tools.py _spell   100% 9 0 0   100% 6 0   100%
src/footman/tools.py _flags   100% 4 0 0   100% 2 0   100%
src/footman/tools.py _show_parts   100% 25 0 0   100% 14 0   100%
src/footman/tools.py _quote   100% 4 0 0   100% 2 0   100%
src/footman/tools.py _console_entrypoint   100% 4 0 0   100% 2 0   100%
src/footman/tools.py _accepts_args   71% 7 2 0   100% 0 0   71%
src/footman/tools.py _opts_overrides   100% 5 0 0   100% 2 0   100%
src/footman/tools.py Tool.__init__   100% 7 0 0   100% 0 0   100%
src/footman/tools.py Tool._sub   100% 1 0 0   100% 0 0   100%
src/footman/tools.py Tool.__getattr__   67% 3 1 0   50% 2 1   60%
src/footman/tools.py Tool.opts   100% 3 0 0   100% 0 0   100%
src/footman/tools.py Tool.flags   100% 1 0 0   100% 0 0   100%
src/footman/tools.py Tool.__call__   100% 23 0 0   100% 6 0   100%
src/footman/tools.py Tool.__call__._tail   100% 3 0 0   100% 2 0   100%
src/footman/tools.py Tool.__call__._spawn   100% 7 0 0   100% 4 0   100%
src/footman/tools.py Tool.__call__._invoke   100% 9 0 0   100% 2 0   100%
src/footman/tools.py Tool._inprocess_loader   75% 12 3 0   75% 4 1   75%
src/footman/tools.py Tool._inprocess_loader.load   0% 3 3 0   100% 0 0   0%
src/footman/tools.py Tool.installed_version   86% 7 1 0   75% 4 1   82%
src/footman/tools.py __getattr__   100% 3 0 0   100% 2 0   100%
src/footman/tools.py (no function)   100% 80 0 0   100% 0 0   100%
Total     95% 6883 343 116   91% 2556 208   94%

No items found using the specified filter.