Rich is a Python library for rich text and beautiful formatting in the terminal.
This report summarizes scanner evidence for Textualize/rich, a Python project with 57,490 GitHub stars. SynthScan examined 68,106 lines of code across 454 source files, recording 554 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 13.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 334 finding(s).
Are imports declared and package/API names verified? 114 finding(s).
Are wrappers, guards, and repeated structures necessary? 365 finding(s).
Which changes need focused human review? 554 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 554 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_pretty.py | 65 | def test_ipy_display_hook__repr_html() -> None: | CODE |
| LOW | tests/test_pretty.py | 79 | def test_ipy_display_hook__multiple_special_reprs() -> None: | CODE |
| LOW | tests/test_pretty.py | 101 | def test_ipy_display_hook__no_special_repr_methods() -> None: | CODE |
| LOW | tests/test_pretty.py | 113 | def test_ipy_display_hook__special_repr_raises_exception() -> None: | CODE |
| LOW | tests/test_pretty.py | 137 | def test_ipy_display_hook__console_renderables_on_newline() -> None: | CODE |
| LOW⚡ | tests/test_pretty.py | 234 | def test_pretty_namedtuple_length_one_no_trailing_comma() -> None: | CODE |
| LOW⚡ | tests/test_pretty.py | 239 | def test_pretty_namedtuple_empty() -> None: | CODE |
| LOW⚡ | tests/test_pretty.py | 244 | def test_pretty_namedtuple_custom_repr() -> None: | CODE |
| LOW⚡ | tests/test_pretty.py | 252 | def test_pretty_namedtuple_fields_invalid_type() -> None: | CODE |
| LOW⚡ | tests/test_pretty.py | 261 | def test_pretty_namedtuple_max_depth() -> None: | CODE |
| LOW | tests/test_pretty.py | 312 | def test_reference_cycle_container() -> None: | CODE |
| LOW | tests/test_pretty.py | 330 | def test_reference_cycle_namedtuple() -> None: | CODE |
| LOW | tests/test_pretty.py | 347 | def test_reference_cycle_dataclass() -> None: | CODE |
| LOW | tests/test_pretty.py | 370 | def test_reference_cycle_attrs() -> None: | CODE |
| LOW | tests/test_pretty.py | 393 | def test_reference_cycle_custom_repr() -> None: | CODE |
| LOW | tests/test_pretty.py | 730 | def test_tuple_rich_repr_default() -> None: | CODE |
| LOW | tests/test_pretty.py | 742 | def test_dataclass_no_attribute() -> None: | CODE |
| LOW | tests/test_filesize.py | 17 | def test_pick_unit_and_suffix(): | CODE |
| LOW | tests/test_tree.py | 18 | def test_render_single_branch(): | CODE |
| LOW | tests/test_tree.py | 30 | def test_render_double_branch(): | CODE |
| LOW | tests/test_logging.py | 64 | def test_exception_with_extra_lines(): | CODE |
| LOW | tests/test_logging.py | 94 | def test_stderr_and_stdout_are_none(monkeypatch): | CODE |
| LOW | tests/test_logging.py | 125 | def test_markup_and_highlight(): | CODE |
| LOW | tests/test_win32_console.py | 30 | def test_windows_coordinates_to_ctype(): | CODE |
| LOW | tests/test_win32_console.py | 123 | def test_write_styled_reverse( | CODE |
| LOW | tests/test_win32_console.py | 140 | def test_write_styled_reverse( | CODE |
| LOW | tests/test_win32_console.py | 157 | def test_write_styled_no_foreground_color( | CODE |
| LOW | tests/test_win32_console.py | 174 | def test_write_styled_no_background_color( | CODE |
| LOW | tests/test_win32_console.py | 263 | def test_move_cursor_to_out_of_bounds_row( | CODE |
| LOW | tests/test_win32_console.py | 274 | def test_move_cursor_to_out_of_bounds_col( | CODE |
| LOW | tests/test_win32_console.py | 321 | def test_move_cursor_forward_newline_wrap( | CODE |
| LOW⚡ | tests/test_win32_console.py | 338 | def test_move_cursor_to_column( | CODE |
| LOW⚡ | tests/test_win32_console.py | 348 | def test_move_cursor_backward( | CODE |
| LOW⚡ | tests/test_win32_console.py | 358 | def test_move_cursor_backward_prev_line_wrap( | CODE |
| LOW⚡ | tests/test_console.py | 243 | def test_print_json_ensure_ascii() -> None: | CODE |
| LOW⚡ | tests/test_console.py | 252 | def test_print_json_with_default_ensure_ascii() -> None: | CODE |
| LOW⚡ | tests/test_console.py | 261 | def test_print_json_indent_none() -> None: | CODE |
| LOW | tests/test_console.py | 82 | def test_console_options_update() -> None: | CODE |
| LOW | tests/test_console.py | 106 | def test_console_options_update_height() -> None: | CODE |
| LOW | tests/test_console.py | 155 | def test_size_can_fall_back_to_std_descriptors( | CODE |
| LOW | tests/test_console.py | 164 | def get_terminal_size_mock_impl(fileno: int = None) -> Tuple[int, int]: | CODE |
| LOW | tests/test_console.py | 195 | def test_print_empty_with_end() -> None: | CODE |
| LOW | tests/test_console.py | 448 | def test_justify_renderable_none() -> None: | CODE |
| LOW | tests/test_console.py | 460 | def test_justify_renderable_left() -> None: | CODE |
| LOW | tests/test_console.py | 472 | def test_justify_renderable_center() -> None: | CODE |
| LOW | tests/test_console.py | 484 | def test_justify_renderable_right() -> None: | CODE |
| LOW | tests/test_console.py | 504 | def test_render_broken_renderable() -> None: | CODE |
| LOW | tests/test_console.py | 551 | def test_export_svg_specified_unique_id() -> None: | CODE |
| LOW | tests/test_console.py | 837 | def test_update_options_markup() -> None: | CODE |
| LOW | tests/test_console.py | 872 | def test_is_terminal_broken_file() -> None: | CODE |
| LOW | tests/test_console.py | 915 | def test_render_lines_height_minus_vertical_pad_is_negative() -> None: | CODE |
| LOW | tests/test_console.py | 930 | def test_recording_no_stdout_and_no_stderr_files(monkeypatch) -> None: | CODE |
| LOW | tests/test_console.py | 943 | def test_capturing_no_stdout_and_no_stderr_files(monkeypatch) -> None: | CODE |
| LOW | tests/test_console.py | 980 | def test_reenable_highlighting() -> None: | CODE |
| LOW | tests/test_syntax.py | 75 | def test_python_render_simple() -> None: | CODE |
| LOW | tests/test_syntax.py | 90 | def test_python_render_simple_passing_lexer_instance() -> None: | CODE |
| LOW | tests/test_syntax.py | 106 | def test_python_render_simple_indent_guides() -> None: | CODE |
| LOW | tests/test_syntax.py | 123 | def test_python_render_line_range_indent_guides() -> None: | CODE |
| LOW | tests/test_syntax.py | 140 | def test_python_render_indent_guides() -> None: | CODE |
| LOW | tests/test_syntax.py | 160 | def test_pygments_syntax_theme_non_str() -> None: | CODE |
| 155 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.hi.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.fr.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.sv.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.it.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.es.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.cn.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.tr.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.de.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.fa.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.ja.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.pt-br.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.de-ch.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.zh-tw.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.id.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.pl.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.ru.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.kr.md | 0 | def iter_first_last(values: iterable[t]) -> iterable[tuple[bool, bool, t]]: | STRING |
| HIGH | README.hi.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.fr.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.sv.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.it.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.es.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.cn.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.tr.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.de.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.fa.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.ja.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.pt-br.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.de-ch.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.zh-tw.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.id.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.pl.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.ru.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | README.kr.md | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | tests/test_syntax.py | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return first = true for value i | STRING |
| HIGH | tests/render.py | 0 | link ids have a random id and system path which is a problem for reproducible tests. | STRING |
| HIGH | tests/test_log.py | 0 | link ids have a random id and system path which is a problem for reproducible tests. | STRING |
| HIGH | tests/test_card.py | 0 | link ids have a random id and system path which is a problem for reproducible tests. | STRING |
| HIGH | tests/test_markdown_no_hyperlinks.py | 0 | link ids have a random id and system path which is a problem for reproducible tests. | STRING |
| HIGH | tests/test_markdown.py | 0 | link ids have a random id and system path which is a problem for reproducible tests. | STRING |
| HIGH | rich/live.py | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return for value in iter_values | STRING |
| HIGH | rich/progress.py | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return for value in iter_values | STRING |
| HIGH | rich/__main__.py | 0 | iter_values = iter(values) try: previous_value = next(iter_values) except stopiteration: return for value in iter_values | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_cells.py | 1 | CODE | |
| LOW | tests/test_unicode_data.py | 1 | CODE | |
| LOW | rich/screen.py | 9 | CODE | |
| LOW | rich/screen.py | 9 | CODE | |
| LOW | rich/screen.py | 9 | CODE | |
| LOW | rich/screen.py | 9 | CODE | |
| LOW | rich/logging.py | 1 | CODE | |
| LOW | rich/measure.py | 8 | CODE | |
| LOW | rich/measure.py | 8 | CODE | |
| LOW | rich/measure.py | 8 | CODE | |
| LOW | rich/tree.py | 4 | CODE | |
| LOW | rich/tree.py | 4 | CODE | |
| LOW | rich/console.py | 60 | CODE | |
| LOW | rich/box.py | 7 | CODE | |
| LOW | rich/color.py | 14 | CODE | |
| LOW | rich/_fileno.py | 1 | CODE | |
| LOW | rich/align.py | 11 | CODE | |
| LOW | rich/align.py | 11 | CODE | |
| LOW | rich/align.py | 11 | CODE | |
| LOW | rich/_wrap.py | 1 | CODE | |
| LOW | rich/_log_render.py | 8 | CODE | |
| LOW | rich/_log_render.py | 8 | CODE | |
| LOW | rich/emoji.py | 10 | CODE | |
| LOW | rich/emoji.py | 10 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/containers.py | 14 | CODE | |
| LOW | rich/control.py | 7 | CODE | |
| LOW | rich/control.py | 7 | CODE | |
| LOW | rich/__init__.py | 6 | CODE | |
| LOW | rich/file_proxy.py | 8 | CODE | |
| LOW | rich/constrain.py | 7 | CODE | |
| LOW | rich/constrain.py | 7 | CODE | |
| LOW | rich/constrain.py | 7 | CODE | |
| LOW | rich/constrain.py | 7 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/pretty.py | 50 | CODE | |
| LOW | rich/markdown.py | 1 | CODE | |
| LOW | rich/text.py | 33 | CODE | |
| LOW | rich/text.py | 33 | CODE | |
| LOW | rich/text.py | 33 | CODE | |
| LOW | rich/live.py | 1 | CODE | |
| LOW | rich/live.py | 6 | CODE | |
| LOW | rich/syntax.py | 1 | CODE | |
| LOW | rich/table.py | 28 | CODE | |
| LOW | rich/table.py | 28 | CODE | |
| LOW | rich/table.py | 28 | CODE | |
| LOW | rich/table.py | 28 | CODE | |
| LOW | rich/table.py | 28 | CODE | |
| LOW | rich/segment.py | 29 | CODE | |
| LOW | rich/segment.py | 29 | CODE | |
| LOW | rich/progress.py | 1 | CODE | |
| LOW | rich/progress.py | 14 | CODE | |
| 26 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_stack.py | 6 | stack.push("foo") | CODE |
| HIGH | tests/test_stack.py | 7 | stack.push("bar") | CODE |
| HIGH⚡ | tests/test_console.py | 271 | # When stdout and stderr are null, Console.file should be replaced with NullFile | COMMENT |
| HIGH | tests/test_console.py | 221 | console.print_json('[false, true, null, "foo"]', indent=4) | CODE |
| HIGH⚡ | tests/test_rich_print.py | 35 | rich.print_json('[false, true, null, "foo"]', indent=4) | CODE |
| HIGH⚡ | tests/test_rich_print.py | 38 | expected = '[\n false,\n true,\n null,\n "foo"\n]\n' | CODE |
| HIGH | tests/test_style.py | 185 | stack.push(Style(bold=True)) | CODE |
| HIGH | rich/logging.py | 180 | # Handles pythonw, where stdout/stderr are null, and we return NullFile | COMMENT |
| HIGH | rich/tree.py | 171 | style_stack.push(get_style(node.style)) | CODE |
| HIGH | rich/tree.py | 172 | guide_style_stack.push(get_style(node.guide_style)) | CODE |
| HIGH | rich/markdown.py | 504 | self.style_stack.push(style) | CODE |
| HIGH | rich/markdown.py | 618 | context.stack.push(Link.create(self, token)) | CODE |
| HIGH | rich/markdown.py | 670 | context.stack.push(element) | CODE |
| HIGH | rich/highlighter.py | 117 | r"\b(?P<bool_true>true)\b|\b(?P<bool_false>false)\b|\b(?P<null>null)\b", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | rich/measure.py | 82 | Get a measurement for a renderable. Args: console (~rich.console.Console): Console instance. | STRING |
| HIGH | rich/console.py | 823 | Set Live instance. Used by Live context manager (no need to call directly). Args: live (Live): Live | STRING |
| HIGH | rich/console.py | 1473 | Get a Style instance by its theme name or parse a definition. Args: name (str): The name of a style | STRING |
| HIGH | rich/console.py | 1912 | Get caller frame information. Args: offset (int): the caller offset within the current frame stack. | STRING |
| HIGH | rich/style.py | 499 | Parse a style definition. Args: style_definition (str): A string containing a style. Raise | STRING |
| HIGH | rich/markup.py | 112 | Render console markup in to a Text instance. Args: markup (str): A string containing console markup. | STRING |
| HIGH | rich/highlighter.py | 21 | Highlight a str or Text instance. Args: text (Union[str, ~Text]): Text to highlight. Raise | STRING |
| HIGH | rich/progress_bar.py | 129 | Renders the pulse animation. Args: console (Console): Console instance. width (int): Wi | STRING |
| HIGH | rich/prompt.py | 228 | Process response from user, convert to prompt type. Args: value (str): String typed by user. | STRING |
| HIGH | rich/progress.py | 1245 | Track progress file reading from a binary file. Args: file (BinaryIO): A file-like object opened in | STRING |
| HIGH | rich/progress.py | 1324 | Track progress while reading from a binary file. Args: path (Union[str, PathLike[str]]): The path t | STRING |
| HIGH | rich/_win32_console.py | 96 | Retrieves the current input mode of a console's input buffer or the current output mode of a console screen buffer. | STRING |
| HIGH | rich/_unicode_data/__init__.py | 32 | Parse a version string into a tuple of 3 integers. Args: version: A version string. Raises: Va | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_progress.py | 647 | CODE | |
| LOW | tests/test_traceback.py | 13 | CODE | |
| LOW | examples/print_calendar.py | 20 | CODE | |
| LOW | rich/tree.py | 86 | CODE | |
| LOW | rich/console.py | 383 | CODE | |
| LOW | rich/console.py | 619 | CODE | |
| LOW | rich/console.py | 1500 | CODE | |
| LOW | rich/console.py | 1652 | CODE | |
| LOW | rich/console.py | 2059 | CODE | |
| LOW | rich/console.py | 2244 | CODE | |
| LOW | rich/box.py | 115 | CODE | |
| LOW | rich/color.py | 349 | CODE | |
| LOW | rich/color.py | 485 | CODE | |
| LOW | rich/color.py | 513 | CODE | |
| LOW | rich/align.py | 143 | CODE | |
| LOW | rich/align.py | 161 | CODE | |
| LOW | rich/style.py | 344 | CODE | |
| LOW | rich/style.py | 498 | CODE | |
| LOW | rich/_wrap.py | 26 | CODE | |
| LOW | rich/containers.py | 111 | CODE | |
| LOW | rich/traceback.py | 56 | CODE | |
| LOW | rich/traceback.py | 433 | CODE | |
| LOW | rich/traceback.py | 768 | CODE | |
| LOW | rich/markup.py | 106 | CODE | |
| LOW | rich/repr.py | 36 | CODE | |
| LOW | rich/repr.py | 41 | CODE | |
| LOW | rich/repr.py | 42 | CODE | |
| LOW | rich/repr.py | 67 | CODE | |
| LOW | rich/pretty.py | 580 | CODE | |
| LOW | rich/pretty.py | 424 | CODE | |
| LOW | rich/pretty.py | 621 | CODE | |
| LOW | rich/pretty.py | 633 | CODE | |
| LOW | rich/columns.py | 62 | CODE | |
| LOW | rich/_inspect.py | 125 | CODE | |
| LOW | rich/markdown.py | 579 | CODE | |
| LOW | rich/text.py | 817 | CODE | |
| LOW | rich/text.py | 964 | CODE | |
| LOW | rich/text.py | 1106 | CODE | |
| LOW | rich/highlighter.py | 123 | CODE | |
| LOW | rich/live.py | 145 | CODE | |
| LOW | rich/live.py | 244 | CODE | |
| LOW | rich/syntax.py | 470 | CODE | |
| LOW | rich/syntax.py | 652 | CODE | |
| LOW | rich/table.py | 523 | CODE | |
| LOW | rich/table.py | 755 | CODE | |
| LOW | rich/segment.py | 247 | CODE | |
| LOW | rich/segment.py | 276 | CODE | |
| LOW | rich/segment.py | 307 | CODE | |
| LOW | rich/segment.py | 354 | CODE | |
| LOW | rich/segment.py | 630 | CODE | |
| LOW | rich/ansi.py | 138 | CODE | |
| LOW | rich/progress.py | 1311 | CODE | |
| LOW | rich/cells.py | 113 | CODE | |
| LOW | rich/cells.py | 161 | CODE | |
| LOW | rich/_windows_renderer.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_inspect.py | 381 | except Exception as e: | CODE |
| LOW | tests/test_inspect.py | 416 | except Exception as e: | CODE |
| LOW | tests/test_repr.py | 69 | except Exception: | CODE |
| MEDIUM | tests/test_traceback.py | 63 | def test_capture(): | CODE |
| MEDIUM | tests/test_traceback.py | 286 | def test_suppress(): | CODE |
| MEDIUM | tests/test_traceback.py | 386 | def foo() -> None: | CODE |
| MEDIUM | tests/test_traceback.py | 392 | def bar() -> None: | CODE |
| LOW⚡ | tests/test_traceback.py | 97 | except Exception: | CODE |
| LOW⚡ | tests/test_traceback.py | 107 | except Exception: | CODE |
| LOW⚡ | tests/test_traceback.py | 118 | except Exception: | CODE |
| LOW⚡ | tests/test_traceback.py | 196 | except Exception: | CODE |
| LOW⚡ | tests/test_traceback.py | 206 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 27 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 66 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 147 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 174 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 228 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 244 | except Exception: | CODE |
| LOW | tests/test_traceback.py | 370 | except Exception as error: | CODE |
| LOW | tests/test_traceback.py | 389 | except Exception as e: | CODE |
| LOW | tests/test_traceback.py | 395 | except Exception as e: | CODE |
| LOW | tests/test_traceback.py | 278 | except Exception: | STRING |
| LOW | tests/test_traceback.py | 289 | except Exception: | STRING |
| LOW | tests/test_traceback.py | 323 | except Exception: | STRING |
| LOW | examples/exception.py | 25 | except Exception: | CODE |
| LOW | examples/recursive_error.py | 24 | except Exception: | CODE |
| LOW | rich/logging.py | 187 | except Exception: | CODE |
| LOW⚡ | rich/console.py | 81 | except Exception: | CODE |
| LOW⚡ | rich/console.py | 85 | except Exception: | CODE |
| LOW⚡ | rich/console.py | 89 | except Exception: | CODE |
| LOW | rich/_fileno.py | 19 | except Exception: | CODE |
| LOW | rich/traceback.py | 214 | except Exception: | CODE |
| LOW | rich/traceback.py | 480 | except Exception: | CODE |
| LOW | rich/traceback.py | 858 | except Exception as error: | CODE |
| LOW | rich/markup.py | 195 | except Exception as error: | CODE |
| LOW | rich/repr.py | 84 | except Exception as error: | CODE |
| LOW | rich/pretty.py | 86 | except Exception: # pragma: no coverage | CODE |
| LOW | rich/pretty.py | 167 | except Exception: | CODE |
| LOW | rich/pretty.py | 574 | except Exception: | CODE |
| LOW | rich/pretty.py | 613 | except Exception as error: | CODE |
| LOW | rich/pretty.py | 653 | except Exception: | CODE |
| LOW | rich/pretty.py | 661 | except Exception: | CODE |
| LOW | rich/pretty.py | 739 | except Exception as error: | CODE |
| LOW | rich/_inspect.py | 136 | except Exception as error: | CODE |
| LOW | rich/live.py | 134 | except Exception: | CODE |
| LOW | rich/json.py | 135 | except Exception as error: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_windows_renderer.py | 9 | except: | CODE |
| HIGH | examples/layout.py | 54 | except KeyboardInterrupt: | CODE |
| HIGH | rich/console.py | 1025 | except (AttributeError, ValueError, OSError): # Probably not a terminal | CODE |
| HIGH | rich/pretty.py | 105 | except (OSError, TypeError): | CODE |
| HIGH | rich/pretty.py | 661 | except Exception: | CODE |
| HIGH | rich/_inspect.py | 94 | except (OSError, TypeError): | CODE |
| HIGH | rich/syntax.py | 404 | except ClassNotFound: | CODE |
| HIGH | rich/syntax.py | 413 | except ClassNotFound: | CODE |
| HIGH | rich/progress.py | 534 | except KeyError: | CODE |
| HIGH | rich/jupyter.py | 92 | except ModuleNotFoundError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/render.py | 24 | CODE | |
| LOW | tests/test_card.py | 26 | CODE | |
| LOW | tests/test_markdown_no_hyperlinks.py | 89 | CODE | |
| LOW | examples/exception.py | 15 | CODE | |
| LOW | rich/logging.py | 71 | CODE | |
| LOW | rich/console.py | 157 | CODE | |
| LOW | rich/console.py | 619 | CODE | |
| LOW | rich/console.py | 1652 | CODE | |
| LOW | rich/console.py | 1758 | CODE | |
| LOW | rich/console.py | 1947 | CODE | |
| LOW | rich/style.py | 131 | CODE | |
| LOW | rich/traceback.py | 84 | CODE | |
| LOW | rich/traceback.py | 295 | CODE | |
| LOW | rich/traceback.py | 353 | CODE | |
| LOW | rich/__init__.py | 77 | CODE | |
| LOW | rich/__init__.py | 120 | CODE | |
| LOW | rich/pretty.py | 113 | CODE | |
| LOW | rich/pretty.py | 171 | CODE | |
| LOW | rich/pretty.py | 273 | CODE | |
| LOW | rich/columns.py | 31 | CODE | |
| LOW | rich/_inspect.py | 37 | CODE | |
| LOW | rich/text.py | 144 | CODE | |
| LOW | rich/text.py | 329 | CODE | |
| LOW | rich/live.py | 57 | CODE | |
| LOW | rich/syntax.py | 279 | CODE | |
| LOW | rich/syntax.py | 320 | CODE | |
| LOW | rich/table.py | 188 | CODE | |
| LOW | rich/table.py | 364 | CODE | |
| LOW | rich/progress_bar.py | 33 | CODE | |
| LOW | rich/prompt.py | 80 | CODE | |
| LOW | rich/prompt.py | 97 | CODE | |
| LOW | rich/prompt.py | 112 | CODE | |
| LOW | rich/progress.py | 104 | CODE | |
| LOW | rich/progress.py | 306 | CODE | |
| LOW | rich/progress.py | 372 | CODE | |
| LOW | rich/progress.py | 397 | CODE | |
| LOW | rich/progress.py | 421 | CODE | |
| LOW | rich/progress.py | 714 | CODE | |
| LOW | rich/progress.py | 1077 | CODE | |
| LOW | rich/progress.py | 1311 | CODE | |
| LOW | rich/panel.py | 40 | CODE | |
| LOW | rich/panel.py | 74 | CODE | |
| LOW | rich/json.py | 25 | CODE | |
| LOW | rich/json.py | 54 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/profile_divide.py | 3 | text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW | tools/profile_divide.py | 3 | text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore | CODE |
| LOW | tests/test_markdown_no_hyperlinks.py | 47 | > Lorem ipsum | CODE |
| LOW | tests/test_markdown_no_hyperlinks.py | 96 | expected = " \x1b[1;4mHeading\x1b[0m | STRING |
| LOW | tests/_card_render.py | 1 | expected = "\x1b[3m Rich features \ | CODE |
| LOW | tests/test_markdown.py | 47 | > Lorem ipsum | CODE |
| LOW | tests/test_markdown.py | 102 | expected = " \x1b[1;4mHeading\x1b[0m | STRING |
| LOW | examples/highlighter.py | 20 | console.print("Send funds to money@example.org") | CODE |
| LOW | benchmarks/snippets.py | 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliq | STRING |
| LOW | benchmarks/snippets.py | 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliq | STRING |
| LOW | rich/text.py | 1342 | """\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolo | STRING |
| LOW | rich/text.py | 1342 | """\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolo | STRING |
| LOW | rich/__main__.py | 71 | lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at | CODE |
| LOW | rich/__main__.py | 71 | lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rich/live_render.py | 43 | def set_renderable(self, renderable: RenderableType) -> None: | CODE |
| LOW | rich/filesize.py | 13 | __all__ = ["decimal"] | CODE |
| LOW | rich/__init__.py | 8 | __all__ = ["get_console", "reconfigure", "print", "inspect", "print_json"] | CODE |
| LOW | rich/text.py | 680 | def set_length(self, new_length: int) -> None: | CODE |
| LOW | rich/_win32_console.py | 559 | def set_title(self, title: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/source/conf.py | 1 | # Configuration file for the Sphinx documentation builder. | COMMENT |
| LOW | .github/workflows/codeql.yml | 41 | # Prefix the list here with "+" to use these queries and those in the config file. | COMMENT |
| LOW | rich/highlighter.py | 161 | # | COMMENT |
| LOW | rich/highlighter.py | 181 | # Calendar date with hours, minutes, and seconds (e.g., 2008-08-30 17:21:59 or 20080830 172159). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | rich/console.py | 2031 | """This function is called when a `BrokenPipeError` is raised. | STRING |
| MEDIUM | rich/align.py | 40 | # Create a panel 20 characters wide | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 443 | [Toad](https://github.com/batrachianai/toad) is a unified interface for agentic coding. Built with Rich and Textual. | STRING |