🍦 Never use print() to debug again.
This report summarizes scanner evidence for gruns/icecream, a Python project with 10,109 GitHub stars. SynthScan examined 3,951 lines of code across 21 source files, recording 75 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 19.9 (Elevated 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? 62 finding(s).
Are imports declared and package/API names verified? 3 finding(s).
Are wrappers, guards, and repeated structures necessary? 62 finding(s).
Which changes need focused human review? 75 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 75 distinct pattern matches across 8 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_icecream.py | 451 | def test_multiline_value_wrapped(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 459 | def test_include_context_single_line(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 468 | def test_context_abs_path_single_line(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 578 | def test_no_source_available_issues_exactly_one_warning(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 587 | def test_single_tuple_argument(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 594 | def test_flat_medium_list_prints_on_one_line(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 897 | def test_timer_decorator_when_disabled(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 907 | def test_timer_decorator_output_on_exception(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 916 | def test_timer_decorator_prefix_configuration(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 924 | def test_timer_decorator_output_function(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 932 | def test_timer_decorator_preserves_function_metadata(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 941 | def test_timer_context_manager_basic(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 948 | def test_timer_context_manager_measures_elapsed_time(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 964 | def test_timer_context_manager_propagates_exception(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 971 | def test_timer_context_manager_exit_without_enter(self): | CODE |
| LOW⚡ | tests/test_icecream.py | 976 | def test_timer_context_manager_when_disabled(self): | CODE |
| LOW | tests/test_icecream.py | 77 | def configure_icecream_output(prefix=None, outputFunction=None, | CODE |
| LOW | tests/test_icecream.py | 273 | def test_expression_arguments(self): | CODE |
| LOW | tests/test_icecream.py | 288 | def test_multiple_calls_on_same_line(self): | CODE |
| LOW | tests/test_icecream.py | 295 | def test_call_surrounded_by_expressions(self): | CODE |
| LOW | tests/test_icecream.py | 343 | def test_prefix_configuration(self): | CODE |
| LOW | tests/test_icecream.py | 394 | def test_arg_to_string_function(self): | CODE |
| LOW | tests/test_icecream.py | 405 | def test_singledispatch_argument_to_string(self): | CODE |
| LOW | tests/test_icecream.py | 423 | def test_single_argument_long_line_not_wrapped(self): | CODE |
| LOW | tests/test_icecream.py | 432 | def test_multiple_arguments_long_line_wrapped(self): | CODE |
| LOW | tests/test_icecream.py | 486 | def test_include_context_multi_line(self): | CODE |
| LOW | tests/test_icecream.py | 498 | def test_context_abs_path_multi_line(self): | CODE |
| LOW | tests/test_icecream.py | 510 | def test_empty_repr_multiline_output_no_crash(self): | CODE |
| LOW | tests/test_icecream.py | 539 | def test_multiline_invocation_with_comments(self): | CODE |
| LOW | tests/test_icecream.py | 554 | def test_no_source_available_prints_values(self): | CODE |
| LOW | tests/test_icecream.py | 564 | def test_no_source_available_prints_multiline(self): | CODE |
| LOW | tests/test_icecream.py | 608 | def test_multiline_container_args(self): | CODE |
| LOW | tests/test_icecream.py | 650 | def test_multiple_tuple_arguments(self): | CODE |
| LOW | tests/test_icecream.py | 664 | def test_configure_output_with_no_parameters(self): | CODE |
| LOW | tests/test_icecream.py | 668 | def test_multiline_strings_output(self): | CODE |
| LOW | tests/test_icecream.py | 697 | def test_sympy_dict_keys_do_not_crash(self): | CODE |
| LOW | tests/test_icecream.py | 718 | def test_non_ascii_characters_no_syntax_highlighting(self): | CODE |
| LOW | tests/test_icecream.py | 742 | def test_sympy_solve_result_does_not_crash(self): | CODE |
| LOW | tests/test_icecream.py | 761 | def test_no_color_disables_coloring(self): | CODE |
| LOW | tests/test_icecream.py | 774 | def test_no_color_with_use_stdout(self): | CODE |
| LOW | tests/test_icecream.py | 789 | def test_no_color_with_use_stderr(self): | CODE |
| LOW | tests/test_icecream.py | 822 | def test_no_color_with_explicit_output_function(self): | CODE |
| LOW | tests/test_icecream.py | 836 | def test_with_timer_decorator(self): | CODE |
| LOW | tests/test_icecream.py | 850 | def test_timer_decorator_nested(self): | CODE |
| LOW | tests/test_icecream.py | 873 | def test_timer_decorator_return_value(self): | CODE |
| LOW | tests/test_icecream.py | 885 | def test_timer_decorator_with_arguments(self): | CODE |
| LOW | tests/test_icecream.py | 987 | def test_timer_context_manager_resets_enter_time_after_exit(self): | CODE |
| LOW | icecream/icecream.py | 220 | def get_text_with_indentation(self, node: ast.expr) -> str: | CODE |
| LOW | icecream/icecream.py | 238 | def prefix_first_line_indent_remaining(prefix: str, s: str) -> List[str]: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | failures-to-investigate/freshsales3.py | 365 | CODE | |
| MEDIUM | failures-to-investigate/freshsales3.py | 366 | CODE | |
| MEDIUM | failures-to-investigate/freshsales.py | 345 | CODE | |
| MEDIUM | failures-to-investigate/freshsales.py | 346 | CODE | |
| MEDIUM | failures-to-investigate/freshsales2.py | 358 | CODE | |
| MEDIUM | failures-to-investigate/freshsales2.py | 359 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tests/install_test_import.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | icecream/coloring.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | icecream/__init__.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | icecream/icecream.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | icecream/icecream.py | 421 | COMMENT | |
| LOW | failures-to-investigate/freshsales3.py | 21 | COMMENT | |
| LOW | failures-to-investigate/freshsales.py | 21 | COMMENT | |
| LOW | failures-to-investigate/freshsales2.py | 21 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_install.py | 33 | except AttributeError: # Already uninstalled. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | icecream/__init__.py | 13 | CODE | |
| LOW | icecream/__init__.py | 14 | CODE | |
| LOW | icecream/__init__.py | 14 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | icecream/icecream.py | 226 | CODE | |
| LOW | icecream/icecream.py | 349 | CODE | |
| LOW | icecream/icecream.py | 390 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_icecream.py | 702 | except Exception: | CODE |
| LOW | tests/test_icecream.py | 747 | except Exception: | CODE |
| LOW | icecream/icecream.py | 111 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | icecream/icecream.py | 493 | CODE |