Coverage report: 87%

Files Functions Classes

coverage.py v7.14.1, created at 2026-07-28 19:55 -0500

File function   statements missing excluded   coverage
src/pullapprove/__init__.py (no function)   0 0 0   100%
src/pullapprove/checklists.py ChecklistItem.notes_required_for_state   7 7 0   0%
src/pullapprove/checklists.py Checklist.compute_hash   6 6 0   0%
src/pullapprove/checklists.py (no function)   25 0 0   100%
src/pullapprove/cli.py cli   1 0 0   100%
src/pullapprove/cli.py init   7 7 0   0%
src/pullapprove/cli.py check   39 13 0   67%
src/pullapprove/cli.py match   46 35 0   24%
src/pullapprove/cli.py coverage   31 13 0   58%
src/pullapprove/cli.py diff   22 1 0   95%
src/pullapprove/cli.py diff.is_hidden   3 0 0   100%
src/pullapprove/cli.py _plural   1 0 0   100%
src/pullapprove/cli.py _read_diff   6 4 0   33%
src/pullapprove/cli.py trust   4 0 0   100%
src/pullapprove/cli.py _hunk_header   3 0 0   100%
src/pullapprove/cli.py _trust_list   13 2 0   85%
src/pullapprove/cli.py _trust_summary   21 2 0   90%
src/pullapprove/cli.py _trust_summary.pct   1 0 0   100%
src/pullapprove/cli.py (no function)   54 0 0   100%
src/pullapprove/config.py _resolve_config_filename_prefix   6 0 0   100%
src/pullapprove/config.py is_config_filename   1 0 0   100%
src/pullapprove/config.py _has_nested_quantifiers   11 3 0   73%
src/pullapprove/config.py _contains_quantifier   10 5 0   50%
src/pullapprove/config.py _split_team_ref   5 0 0   100%
src/pullapprove/config.py is_unexpanded_ref   1 0 0   100%
src/pullapprove/config.py _validate_team_refs   10 0 0   100%
src/pullapprove/config.py _expand_team_ref   6 0 0   100%
src/pullapprove/config.py _expand_aliases   32 0 0   100%
src/pullapprove/config.py _apply_negations   6 0 0   100%
src/pullapprove/config.py _validate_review_counts   3 0 0   100%
src/pullapprove/config.py _resolve_extends_path   7 0 0   100%
src/pullapprove/config.py _anchor_path   9 0 0   100%
src/pullapprove/config.py is_bot_login   1 0 0   100%
src/pullapprove/config.py _split_check_ref   2 0 0   100%
src/pullapprove/config.py _reject_bot_reviewers   3 0 0   100%
src/pullapprove/config.py _first_case_insensitive_duplicate   6 0 0   100%
src/pullapprove/config.py ScopeModel.validate_name   3 1 0   67%
src/pullapprove/config.py ScopeModel.validate_team_ref_shape   1 0 0   100%
src/pullapprove/config.py ScopeModel.validate_unless_refs   7 0 0   100%
src/pullapprove/config.py ScopeModel.validate_code_patterns   8 3 0   62%
src/pullapprove/config.py ScopeModel.validate_reviewers_for_require   8 0 0   100%
src/pullapprove/config.py ScopeModel.author_points   3 0 0   100%
src/pullapprove/config.py ScopeModel.unless_refs   1 0 0   100%
src/pullapprove/config.py ScopeModel.unsolvable_reason   9 1 0   89%
src/pullapprove/config.py ScopeModel.printed_name   6 2 0   67%
src/pullapprove/config.py ScopeModel.__eq__   1 1 0   0%
src/pullapprove/config.py ScopeModel.matches_path   1 0 0   100%
src/pullapprove/config.py ScopeModel.matches_code   13 0 0   100%
src/pullapprove/config.py ScopeModel.matches_author   12 0 0   100%
src/pullapprove/config.py LargeScaleChangeModel.validate_team_ref_shape   1 0 0   100%
src/pullapprove/config.py LargeScaleChangeModel.unsolvable_reason   10 3 0   70%
src/pullapprove/config.py ConfigModel.validate_unique_scope_names   3 0 0   100%
src/pullapprove/config.py ConfigModel.validate_extends   5 1 0   80%
src/pullapprove/config.py ConfigModel.compiled_config   28 0 0   100%
src/pullapprove/config.py ConfigModel._merged_data   33 0 0   100%
src/pullapprove/config.py ConfigModel.from_filesystem   2 0 0   100%
src/pullapprove/config.py ConfigModel.from_content   1 0 0   100%
src/pullapprove/config.py ConfigModel.from_data   1 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.from_config_models   4 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.get_config_models   1 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.__bool__   1 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.__getitem__   1 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.__contains__   1 0 0   100%
src/pullapprove/config.py _ConfigModelsBase.__len__   1 1 0   0%
src/pullapprove/config.py ConfigModels.declared_check_names   1 0 0   100%
src/pullapprove/config.py ConfigModels.from_configs_data   5 0 0   100%
src/pullapprove/config.py ConfigModels.from_contents   4 4 0   0%
src/pullapprove/config.py ConfigModels.add_config   1 0 0   100%
src/pullapprove/config.py ConfigModels.team_refs   21 0 0   100%
src/pullapprove/config.py ConfigModels.team_refs.collect_refs   3 0 0   100%
src/pullapprove/config.py ConfigModels.compiled   6 0 0   100%
src/pullapprove/config.py CompiledConfigModels.closest_config   8 1 0   88%
src/pullapprove/config.py CompiledConfigModels.get_default_large_scale_change   4 1 0   75%
src/pullapprove/config.py CompiledConfigModels.filter_for_pullrequest   8 0 0   100%
src/pullapprove/config.py (no function)   137 0 0   100%
src/pullapprove/diff.py DiffFile.__init__   4 0 0   100%
src/pullapprove/diff.py DiffFile.__repr__   1 1 0   0%
src/pullapprove/diff.py DiffFile.is_move   1 0 0   100%
src/pullapprove/diff.py DiffHunk.__init__   6 0 0   100%
src/pullapprove/diff.py DiffHunk.is_new_file   1 0 0   100%
src/pullapprove/diff.py DiffHunk.changed_lines   1 0 0   100%
src/pullapprove/diff.py DiffHunk.added_lines   1 0 0   100%
src/pullapprove/diff.py DiffHunk.removed_lines   1 0 0   100%
src/pullapprove/diff.py DiffCode.__init__   4 0 0   100%
src/pullapprove/diff.py DiffCode.is_addition   1 0 0   100%
src/pullapprove/diff.py DiffCode.is_deletion   1 0 0   100%
src/pullapprove/diff.py DiffCode.is_context   1 0 0   100%
src/pullapprove/diff.py DiffCode.line_number   3 1 0   67%
src/pullapprove/diff.py DiffCode.__str__   1 1 0   0%
src/pullapprove/diff.py DiffCode.__repr__   1 1 0   0%
src/pullapprove/diff.py DiffCode.raw   1 0 0   100%
src/pullapprove/diff.py _unquote_git_path   20 0 0   100%
src/pullapprove/diff.py _read_quoted_git_path   9 1 0   89%
src/pullapprove/diff.py _split_equal_git_names   7 0 0   100%
src/pullapprove/diff.py parse_diff_file_line   27 4 0   85%
src/pullapprove/diff.py parse_diff_hunk_line   7 1 0   86%
src/pullapprove/diff.py _lookahead   9 2 0   78%
src/pullapprove/diff.py _iterate_diff_parts   32 0 0   100%
src/pullapprove/diff.py iterate_diff_parts   3 0 0   100%
src/pullapprove/diff.py parse_diff   14 0 0   100%
src/pullapprove/diff.py iter_file_hunks   15 1 0   93%
src/pullapprove/diff.py iter_hunkless_files   11 0 0   100%
src/pullapprove/diff.py filter_diff_text   29 0 0   100%
src/pullapprove/diff.py filter_diff_text.flush_unhunked_file   2 0 0   100%
src/pullapprove/diff.py (no function)   42 0 2   100%
src/pullapprove/exceptions.py LargeScaleChangeException.__init__   1 1 0   0%
src/pullapprove/exceptions.py (no function)   2 0 0   100%
src/pullapprove/git.py git_root   2 2 0   0%
src/pullapprove/git.py git_pager   5 2 0   60%
src/pullapprove/git.py page   9 2 0   78%
src/pullapprove/git.py git_ls_files   6 0 0   100%
src/pullapprove/git.py git_ls_changes   6 6 0   0%
src/pullapprove/git.py git_diff_stream   7 1 0   86%
src/pullapprove/git.py (no function)   12 0 0   100%
src/pullapprove/matches.py match_path   7 0 0   100%
src/pullapprove/matches.py match_code   9 1 0   89%
src/pullapprove/matches.py match_files   2 0 0   100%
src/pullapprove/matches.py match_files._iterate   11 5 0   55%
src/pullapprove/matches.py iterate_diff   27 4 0   85%
src/pullapprove/matches.py iterate_diff.yield_code_diffs   8 0 0   100%
src/pullapprove/matches.py match_diff   9 3 0   67%
src/pullapprove/matches.py match_diff.iterate   11 2 0   82%
src/pullapprove/matches.py ChangeMatches.as_dict   1 1 0   0%
src/pullapprove/matches.py ChangeMatches.__bool__   1 1 0   0%
src/pullapprove/matches.py ChangeMatches.from_config_matches   15 1 0   93%
src/pullapprove/matches.py ChangeMatches.from_large_scale_change   1 1 0   0%
src/pullapprove/matches.py ScopePathMatch.add_scope   4 0 0   100%
src/pullapprove/matches.py ScopeCodeMatch.printed_location   3 3 0   0%
src/pullapprove/matches.py ScopeCodeMatch.add_scope   4 4 0   0%
src/pullapprove/matches.py ScopeCodeMatch.compute_location_id   5 0 0   100%
src/pullapprove/matches.py (no function)   54 0 0   100%
src/pullapprove/printer.py get_color_for_name   2 0 0   100%
src/pullapprove/printer.py get_scope_display   3 0 0   100%
src/pullapprove/printer.py print_scope_badge   4 1 0   75%
src/pullapprove/printer.py MatchesPrinter.__init__   2 0 0   100%
src/pullapprove/printer.py MatchesPrinter.print_by_path   37 21 0   43%
src/pullapprove/printer.py MatchesPrinter.print_by_scope   37 37 0   0%
src/pullapprove/printer.py MatchesPrinter._get_paths_for_scope   5 5 0   0%
src/pullapprove/printer.py MatchesPrinter._get_code_only_files_for_scope   6 6 0   0%
src/pullapprove/printer.py MatchesPrinter._get_file_code_patterns_simple   11 8 0   27%
src/pullapprove/printer.py MatchesPrinter._get_file_code_patterns_simple_for_scope   16 16 0   0%
src/pullapprove/printer.py (no function)   17 0 2   100%
src/pullapprove/results_migrations.py migrate_resview_results_scopes   5 1 0   80%
src/pullapprove/results_migrations.py migrate_drop_config_branches   5 0 0   100%
src/pullapprove/results_migrations.py migrate_drop_branch_fields   15 0 0   100%
src/pullapprove/results_migrations.py migrate_drop_reviewed_for   11 0 0   100%
src/pullapprove/results_migrations.py migrate_unwrap_review_results   6 0 0   100%
src/pullapprove/results_migrations.py migrate_drop_path_code_reviews   5 0 0   100%
src/pullapprove/results_migrations.py migrate_requested_reviews_to_flag   24 2 0   92%
src/pullapprove/results_migrations.py migrate_requested_reviews_to_flag.is_placeholder   1 0 0   100%
src/pullapprove/results_migrations.py migrate_drop_agents   5 0 0   100%
src/pullapprove/results_migrations.py ResultsMigrator.current_version   1 0 0   100%
src/pullapprove/results_migrations.py ResultsMigrator.migrate   5 0 0   100%
src/pullapprove/results_migrations.py (no function)   16 0 0   100%
src/pullapprove/trust/__init__.py trust_label   5 0 0   100%
src/pullapprove/trust/__init__.py trust_diff   5 0 0   100%
src/pullapprove/trust/__init__.py (no function)   14 0 0   100%
src/pullapprove/trust/annotations.py _type_span_to   17 0 0   100%
src/pullapprove/trust/annotations.py _py_var_spans   10 0 0   100%
src/pullapprove/trust/annotations.py _py_def_spans   19 1 0   95%
src/pullapprove/trust/annotations.py _py_spans   8 1 0   88%
src/pullapprove/trust/annotations.py _ts_var_span   13 3 0   77%
src/pullapprove/trust/annotations.py _ts_param_spans   16 1 0   94%
src/pullapprove/trust/annotations.py _ts_spans   5 0 0   100%
src/pullapprove/trust/annotations.py _span_has_call   5 0 0   100%
src/pullapprove/trust/annotations.py _annotation_token_flags   3 0 0   100%
src/pullapprove/trust/annotations.py _annotation_delta   11 0 0   100%
src/pullapprove/trust/annotations.py _type_annotations   8 0 0   100%
src/pullapprove/trust/annotations.py (no function)   22 0 0   100%
src/pullapprove/trust/comments.py _has_directive   2 0 0   100%
src/pullapprove/trust/comments.py _is_shebang   1 0 0   100%
src/pullapprove/trust/comments.py _string_quotes   1 0 0   100%
src/pullapprove/trust/comments.py strip_inline_comment   9 0 0   100%
src/pullapprove/trust/comments.py _block_comment_step   15 0 0   100%
src/pullapprove/trust/comments.py _all_comment_lines   17 0 0   100%
src/pullapprove/trust/comments.py _inline_comment_change   22 1 0   95%
src/pullapprove/trust/comments.py _comments   18 0 0   100%
src/pullapprove/trust/comments.py (no function)   17 0 0   100%
src/pullapprove/trust/delta.py paired_changed_lines   6 0 0   100%
src/pullapprove/trust/delta.py _pair_changed_lines   19 0 0   100%
src/pullapprove/trust/delta.py _non_token_text   7 0 0   100%
src/pullapprove/trust/delta.py paired_token_delta   16 0 0   100%
src/pullapprove/trust/delta.py (no function)   10 0 0   100%
src/pullapprove/trust/formatting.py _empty_file   5 0 0   100%
src/pullapprove/trust/formatting.py _whitespace   6 0 0   100%
src/pullapprove/trust/formatting.py _bracket_delta   13 1 0   92%
src/pullapprove/trust/formatting.py _is_reflow   8 0 0   100%
src/pullapprove/trust/formatting.py _contiguous_replacement   16 1 0   94%
src/pullapprove/trust/formatting.py _has_line_comment   8 0 0   100%
src/pullapprove/trust/formatting.py _join_crosses_string   21 4 0   81%
src/pullapprove/trust/formatting.py _line_length   26 0 0   100%
src/pullapprove/trust/formatting.py _string_value   4 0 0   100%
src/pullapprove/trust/formatting.py _style_key   9 0 0   100%
src/pullapprove/trust/formatting.py _style_delta   5 0 0   100%
src/pullapprove/trust/formatting.py _continues_previous_line   6 0 0   100%
src/pullapprove/trust/formatting.py _asi_hazard   14 0 0   100%
src/pullapprove/trust/formatting.py _style   10 0 0   100%
src/pullapprove/trust/formatting.py _whitespace_gaps_only   6 0 0   100%
src/pullapprove/trust/formatting.py _line_tail   1 0 0   100%
src/pullapprove/trust/formatting.py _spacing_delta   17 2 0   88%
src/pullapprove/trust/formatting.py _spacing   8 0 0   100%
src/pullapprove/trust/formatting.py (no function)   29 0 0   100%
src/pullapprove/trust/helpers.py extension   3 0 0   100%
src/pullapprove/trust/helpers.py leading_indent   1 0 0   100%
src/pullapprove/trust/helpers.py change_suffix   5 0 0   100%
src/pullapprove/trust/helpers.py (no function)   12 0 0   100%
src/pullapprove/trust/imports.py _has_trailing_statement   2 0 0   100%
src/pullapprove/trust/imports.py _is_dynamic_import   1 0 0   100%
src/pullapprove/trust/imports.py _is_import_line   2 0 0   100%
src/pullapprove/trust/imports.py _imports_only   18 1 0   94%
src/pullapprove/trust/imports.py _sorted_imports   17 2 0   88%
src/pullapprove/trust/imports.py _is_import_reorder   2 0 0   100%
src/pullapprove/trust/imports.py _is_side_effect_import   2 0 0   100%
src/pullapprove/trust/imports.py _reorder_is_trivial   5 1 0   80%
src/pullapprove/trust/imports.py _import_source   19 8 0   58%
src/pullapprove/trust/imports.py _same_import_sources   7 1 0   86%
src/pullapprove/trust/imports.py _imports   21 0 0   100%
src/pullapprove/trust/imports.py (no function)   22 0 0   100%
src/pullapprove/trust/labels.py Trust.family   1 0 0   100%
src/pullapprove/trust/labels.py (no function)   21 0 0   100%
src/pullapprove/trust/linescan.py collapse_ws   1 0 0   100%
src/pullapprove/trust/linescan.py collapse_ws_outside_strings   19 0 0   100%
src/pullapprove/trust/linescan.py scan_string   14 0 0   100%
src/pullapprove/trust/linescan.py consume_string   2 0 0   100%
src/pullapprove/trust/linescan.py (no function)   5 0 0   100%
src/pullapprove/trust/lockfiles.py _lockfile   5 0 0   100%
src/pullapprove/trust/lockfiles.py (no function)   6 0 0   100%
src/pullapprove/trust/renames.py trust_file_label   14 2 0   86%
src/pullapprove/trust/renames.py (no function)   4 0 0   100%
src/pullapprove/trust/tokens.py Token.__init__   4 0 0   100%
src/pullapprove/trust/tokens.py Token.__repr__   0 0 1   100%
src/pullapprove/trust/tokens.py tokenize   47 3 0   94%
src/pullapprove/trust/tokens.py (no function)   16 0 1   100%
Total     2321 300 6   87%

No items found using the specified filter.