Scrapy, a fast high-level web crawling & scraping framework for Python.
This report presents the forensic synthetic code analysis of scrapy/scrapy, a Python project with 64,081 GitHub stars. SynthScan v2.0 examined 92,959 lines of code across 526 source files, recording 2136 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 26.9 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2136 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 181 | def pytest_collection_modifyitems(items): | CODE |
| LOW | tests/test_request_dict.py | 91 | def test_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW | tests/test_request_dict.py | 100 | def test_reference_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW | tests/test_request_dict.py | 112 | def test_private_reference_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW⚡ | tests/test_request_dict.py | 124 | def test_private_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW⚡ | tests/test_request_dict.py | 133 | def test_mixin_private_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW⚡ | tests/test_request_dict.py | 142 | def test_delegated_callback_serialization(spider: MethodsSpider) -> None: | CODE |
| LOW | tests/test_request_dict.py | 181 | def test_callback_not_available() -> None: | CODE |
| LOW | tests/test_utils_signal.py | 57 | async def test_send_catch_log_dont_log( | CODE |
| LOW | tests/test_utils_signal.py | 162 | def test_error_logged_if_deferred_not_supported( | CODE |
| LOW | tests/test_http_response_text.py | 161 | def test_declared_encoding_invalid(self): | CODE |
| LOW | tests/test_http_response_text.py | 193 | def test_bom_is_removed_from_body(self): | CODE |
| LOW | tests/test_http_response_text.py | 220 | def test_replace_wrong_encoding(self): | CODE |
| LOW | tests/test_http_response_text.py | 271 | def test_selector_shortcuts_kwargs(self): | CODE |
| LOW | tests/test_http_response_text.py | 292 | def test_urljoin_with_base_url(self): | CODE |
| LOW⚡ | tests/test_http_response_text.py | 351 | def test_follow_selector_list(self): | CODE |
| LOW⚡ | tests/test_http_response_text.py | 356 | def test_follow_selector_invalid(self): | CODE |
| LOW⚡ | tests/test_http_response_text.py | 361 | def test_follow_selector_attribute(self): | CODE |
| LOW⚡ | tests/test_http_response_text.py | 366 | def test_follow_selector_no_href(self): | CODE |
| LOW⚡ | tests/test_http_response_text.py | 374 | def test_follow_whitespace_selector(self): | CODE |
| LOW | tests/test_http_response_text.py | 424 | def test_follow_all_css_skip_invalid(self): | CODE |
| LOW | tests/test_http_response_text.py | 445 | def test_follow_all_xpath_skip_invalid(self): | CODE |
| LOW | tests/test_http_response_text.py | 462 | def test_follow_all_too_many_arguments(self): | CODE |
| LOW | tests/test_http_response_text.py | 492 | def test_json_response_wrong_charset(self): | CODE |
| LOW | tests/test_http_response_text.py | 604 | def test_selector_shortcuts_kwargs(self): | CODE |
| LOW | tests/test_contracts.py | 112 | def returns_request_cb_kwargs(self, response, url): | CODE |
| LOW | tests/test_contracts.py | 128 | def returns_item_cb_kwargs_error_unexpected_keyword(self, response): | CODE |
| LOW | tests/test_contracts.py | 136 | def returns_item_cb_kwargs_error_missing_argument(self, response, arg): | CODE |
| LOW | tests/test_contracts.py | 157 | def returns_request_range_fail(self, response): | CODE |
| LOW | tests/test_contracts.py | 219 | def scrapes_multiple_missing_fields(self, response): | CODE |
| LOW | tests/test_contracts.py | 243 | def invalid_regex_with_valid_contract(self, response): | CODE |
| LOW | tests/test_contracts.py | 267 | def returns_error_missing_meta(self, response): | CODE |
| LOW | tests/test_contracts.py | 484 | def test_returns_invalid_argument_count(self): | CODE |
| LOW | tests/test_contracts.py | 491 | def test_returns_default_bounds(self): | CODE |
| LOW | tests/test_contracts.py | 506 | def test_returns_and_scrapes_ignore_other_types(self): | CODE |
| LOW | tests/test_contracts.py | 626 | def test_custom_tagged_request_contract(self): | CODE |
| LOW | tests/test_contracts.py | 698 | def test_pre_hook_keyboard_interrupt(self): | CODE |
| LOW | tests/test_contracts.py | 712 | def test_post_hook_keyboard_interrupt(self): | CODE |
| LOW | tests/test_contracts.py | 739 | def test_pre_hook_assertion_failure(self): | CODE |
| LOW⚡ | tests/test_contracts.py | 764 | def test_pre_hook_async_callback(self): | CODE |
| LOW⚡ | tests/test_contracts.py | 774 | def test_pre_hook_async_generator(self): | CODE |
| LOW⚡ | tests/test_contracts.py | 784 | def test_post_hook_async_generator(self): | CODE |
| LOW | tests/test_command_parse.py | 116 | def parse_request_with_cb_kwargs(self, response, foo=None, key=None): | CODE |
| LOW | tests/test_command_parse.py | 122 | def parse_request_without_meta(self, response): | CODE |
| LOW | tests/test_command_parse.py | 483 | def test_crawlspider_matching_rule_default_callback( | CODE |
| LOW | tests/test_command_parse.py | 497 | def test_spider_with_no_rules_attribute( | CODE |
| LOW | tests/test_command_parse.py | 512 | def test_crawlspider_missing_callback( | CODE |
| LOW | tests/test_command_parse.py | 525 | def test_crawlspider_no_matching_rule( | CODE |
| LOW | tests/test_command_parse.py | 540 | def test_crawlspider_not_exists_with_not_matched_url( | CODE |
| LOW | tests/test_command_parse.py | 272 | def test_request_with_cb_kwargs( | STRING |
| LOW | tests/test_command_parse.py | 294 | def test_request_without_meta( | STRING |
| LOW | tests/test_command_parse.py | 323 | def test_async_def_asyncio_parse_items_list( | STRING |
| LOW | tests/test_command_parse.py | 339 | def test_async_def_asyncio_parse_items_single_element( | STRING |
| LOW | tests/test_command_parse.py | 354 | def test_async_def_asyncgen_parse_loop( | STRING |
| LOW | tests/test_command_parse.py | 370 | def test_async_def_asyncgen_parse_exc( | STRING |
| LOW | tests/test_command_parse.py | 386 | def test_async_def_asyncio_parse( | STRING |
| LOW | tests/test_command_parse.py | 412 | def test_parse_items_no_callback_passed( | STRING |
| LOW | tests/test_command_parse.py | 424 | def test_retry_response_request( | STRING |
| LOW | tests/test_command_parse.py | 439 | def test_retry_response_request_with_custom_callback( | STRING |
| LOW | tests/test_command_parse.py | 454 | def test_wrong_callback_passed( | STRING |
| 1334 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 1 | CODE | |
| LOW | tests/test_request_dict.py | 1 | CODE | |
| LOW | tests/test_utils_signal.py | 1 | CODE | |
| LOW | tests/test_http_response_text.py | 1 | CODE | |
| LOW | tests/test_contracts.py | 1 | CODE | |
| LOW | tests/test_command_parse.py | 1 | CODE | |
| LOW | tests/test_logstats.py | 1 | CODE | |
| LOW | tests/test_utils_template.py | 1 | CODE | |
| LOW | tests/test_command_genspider.py | 1 | CODE | |
| LOW | tests/test_extension_remote_control.py | 1 | CODE | |
| LOW | tests/test_utils_datatypes.py | 1 | CODE | |
| LOW | tests/test_engine.py | 1 | CODE | |
| LOW | tests/test_zz_resources.py | 3 | CODE | |
| LOW | tests/test_spidermiddleware.py | 1 | CODE | |
| LOW | tests/test_utils_benchserver.py | 1 | CODE | |
| LOW | tests/test_utils_benchserver.py | 9 | CODE | |
| LOW | tests/test_scrapy__getattr__.py | 1 | CODE | |
| LOW | tests/test_extension_debug.py | 1 | CODE | |
| LOW | tests/test_downloader_handler_twisted_http11.py | 3 | CODE | |
| LOW | tests/test_stats.py | 1 | CODE | |
| LOW | tests/test_linkextractors.py | 1 | CODE | |
| LOW | tests/test_command_runspider.py | 1 | CODE | |
| LOW | tests/test_engine_close_spider.py | 1 | CODE | |
| LOW | tests/test_engine_close_spider.py | 16 | CODE | |
| LOW | tests/test_loader.py | 1 | CODE | |
| LOW | tests/test_middleware.py | 1 | CODE | |
| LOW | tests/test_http_request_json.py | 1 | CODE | |
| LOW | tests/test_http2_client_protocol.py | 1 | CODE | |
| LOW | tests/test_utils_iterators.py | 1 | CODE | |
| LOW | tests/test_dependencies.py | 1 | CODE | |
| LOW | tests/test_signals.py | 1 | CODE | |
| LOW | tests/test_utils_log.py | 1 | CODE | |
| LOW | tests/test_link.py | 1 | CODE | |
| LOW | tests/test_spider_sitemap.py | 1 | CODE | |
| LOW | tests/test_spidermiddleware_urllength.py | 1 | CODE | |
| LOW | tests/test_downloader_handler_twisted_http2.py | 3 | CODE | |
| LOW | tests/test_feedexport_postprocess.py | 1 | CODE | |
| LOW | tests/test_feedexport_uri_params.py | 1 | CODE | |
| LOW | tests/test_utils_job.py | 1 | CODE | |
| LOW | tests/test_spidermiddleware_referer.py | 1 | CODE | |
| LOW | tests/test_utils_asyncgen.py | 1 | CODE | |
| LOW | tests/spiders.py | 5 | CODE | |
| LOW | tests/test_downloadermiddleware_stats.py | 1 | CODE | |
| LOW | tests/test_utils_project.py | 1 | CODE | |
| LOW | tests/test_downloadermiddleware_robotstxt.py | 1 | CODE | |
| LOW | tests/test_crawler_subprocess.py | 1 | CODE | |
| LOW | tests/test_robotstxt_interface.py | 1 | CODE | |
| LOW | tests/test_dupefilters.py | 1 | CODE | |
| LOW | tests/test_engine_stop_download_bytes.py | 1 | CODE | |
| LOW | tests/test_http_request_form.py | 1 | CODE | |
| LOW | tests/test_utils_trackref.py | 1 | CODE | |
| LOW | tests/test_core_downloader.py | 1 | CODE | |
| LOW | tests/test_core_downloader.py | 54 | CODE | |
| LOW | tests/test_spidermiddleware_start.py | 1 | CODE | |
| LOW | tests/test_http_cookies.py | 1 | CODE | |
| LOW | tests/test_scheduler_base.py | 1 | CODE | |
| LOW | tests/test_crawler_runners.py | 1 | CODE | |
| LOW | tests/test_downloadermiddleware.py | 1 | CODE | |
| LOW | tests/test_downloadermiddleware_useragent.py | 1 | CODE | |
| LOW | tests/test_spider.py | 1 | CODE | |
| 297 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_squeues_request.py | 47 | q.push(req) | CODE |
| HIGH⚡ | tests/test_squeues_request.py | 66 | q.push(req1) | CODE |
| HIGH⚡ | tests/test_squeues_request.py | 67 | q.push(req2) | CODE |
| HIGH⚡ | tests/test_squeues_request.py | 68 | q.push(req3) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 78 | queue.push(req1) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 79 | queue.push(req2) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 80 | queue.push(req3) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 127 | queue.push(req1) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 128 | queue.push(req2) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 129 | queue.push(req3) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 159 | self.queue.push(req1) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 160 | self.queue.push(req2) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 161 | self.queue.push(req3) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 188 | self.queue.push(req1) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 189 | self.queue.push(req2) | CODE |
| HIGH⚡ | tests/test_pqueues.py | 190 | self.queue.push(req3) | CODE |
| HIGH | tests/test_pqueues.py | 43 | queue.push(req1) | CODE |
| HIGH | tests/test_pqueues.py | 58 | queue.push(Request("https://example.org")) | CODE |
| HIGH | tests/test_pqueues.py | 102 | queue.push(req) | CODE |
| HIGH | tests/test_pqueues.py | 174 | self.queue.push(Request("https://example.org")) | CODE |
| HIGH | tests/test_pqueues.py | 215 | self.queue.push(request) | CODE |
| HIGH | tests/test_pqueues.py | 239 | self.queue.push(request) | CODE |
| HIGH | tests/test_pqueues.py | 259 | self.queue.push(req) | CODE |
| HIGH | tests/test_pqueues.py | 271 | self.queue.push(req) | CODE |
| HIGH | tests/test_pqueues.py | 289 | queue.push(request) | CODE |
| HIGH | tests/test_pqueues.py | 295 | queue.push(request) | CODE |
| HIGH | tests/test_pqueues.py | 344 | queue.push(request) | CODE |
| HIGH⚡ | tests/test_squeues.py | 69 | q.push(lambda x: x) | CODE |
| HIGH⚡ | tests/test_squeues.py | 75 | q.push(sel) | CODE |
| HIGH⚡ | tests/test_squeues.py | 85 | q.push("a") | CODE |
| HIGH⚡ | tests/test_squeues.py | 86 | q.push(123) | CODE |
| HIGH⚡ | tests/test_squeues.py | 87 | q.push({"a": "dict"}) | CODE |
| HIGH⚡ | tests/test_squeues.py | 128 | q.push(i) | CODE |
| HIGH⚡ | tests/test_squeues.py | 137 | q.push(loader) | CODE |
| HIGH⚡ | tests/test_squeues.py | 148 | q.push(r) | CODE |
| HIGH | tests/test_squeues.py | 161 | q.push(lambda x: x) | CODE |
| HIGH | tests/test_squeues.py | 170 | q.push(sel) | CODE |
| HIGH⚡ | tests/test_squeues.py | 197 | q.push("a") | CODE |
| HIGH⚡ | tests/test_squeues.py | 198 | q.push(123) | CODE |
| HIGH⚡ | tests/test_squeues.py | 199 | q.push({"a": "dict"}) | CODE |
| HIGH⚡ | tests/test_squeues.py | 220 | q.push(i) | CODE |
| HIGH⚡ | tests/test_squeues.py | 229 | q.push(loader) | CODE |
| HIGH⚡ | tests/test_squeues.py | 240 | q.push(r) | CODE |
| HIGH | tests/test_settings/__init__.py | 962 | {"FOO": '{"tests.test_settings.Component1": null}'}, | CODE |
| HIGH | scrapy/pqueues.py | 187 | q.push(request) # this may fail (eg. serialization error) | CODE |
| HIGH | scrapy/pqueues.py | 425 | queue.push(request) | CODE |
| HIGH | scrapy/core/scheduler.py | 418 | self.dqs.push(request) | STRING |
| HIGH | scrapy/core/scheduler.py | 439 | self.mqs.push(request) | STRING |
| HIGH | scrapy/extensions/remote_control.py | 71 | - ``start_time`` (number or null): the start time of the Scrapy process | STRING |
| HIGH | scrapy/extensions/remote_control.py | 90 | - ``traceback`` (string or null): the traceback if an exception was | STRING |
| HIGH | scrapy/spidermiddlewares/referer.py | 74 | If url is null, return no referrer. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_engine.py | 223 | CODE | |
| MEDIUM | tests/test_spidermiddleware.py | 78 | CODE | |
| MEDIUM | tests/spiders.py | 679 | CODE | |
| MEDIUM | tests/test_utils_python.py | 42 | CODE | |
| MEDIUM | tests/test_crawler.py | 246 | CODE | |
| MEDIUM | tests/test_crawler.py | 324 | CODE | |
| MEDIUM | tests/test_crawler.py | 402 | CODE | |
| MEDIUM | tests/test_crawler.py | 480 | CODE | |
| MEDIUM | tests/test_crawler.py | 580 | CODE | |
| MEDIUM | tests/test_engine_loop.py | 379 | CODE | |
| MEDIUM | tests/test_engine_loop.py | 420 | CODE | |
| MEDIUM | tests/test_engine_loop.py | 479 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/reactorless_simple.py | 15 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/custom_loop_same.py | 20 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/reactorless_custom_settings.py | 18 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/custom_loop_different.py | 20 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/multi_parallel.py | 15 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/reactorless_reactor.py | 14 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/no_reactor.py | 13 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/simple_default_reactor.py | 14 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/simple.py | 17 | CODE | |
| MEDIUM | tests/AsyncCrawlerRunner/multi_seq.py | 15 | CODE | |
| MEDIUM | tests/CrawlerProcess/asyncio_enabled_no_reactor.py | 17 | CODE | |
| MEDIUM | tests/CrawlerProcess/args_settings.py | 19 | CODE | |
| MEDIUM | tests/CrawlerProcess/reactor_select.py | 15 | CODE | |
| MEDIUM | tests/CrawlerProcess/multi.py | 10 | CODE | |
| MEDIUM | tests/CrawlerProcess/asyncio_enabled_reactor.py | 53 | CODE | |
| MEDIUM | …ts/CrawlerProcess/asyncio_enabled_reactor_same_loop.py | 22 | CODE | |
| MEDIUM | …awlerProcess/reactor_default_twisted_reactor_select.py | 13 | CODE | |
| MEDIUM | …awlerProcess/asyncio_enabled_reactor_different_loop.py | 20 | CODE | |
| MEDIUM | …cess/reactor_select_subclass_twisted_reactor_select.py | 22 | CODE | |
| MEDIUM | tests/CrawlerProcess/dns_resolver_deprecated.py | 13 | CODE | |
| MEDIUM | tests/CrawlerProcess/reactor_default.py | 13 | CODE | |
| MEDIUM | tests/CrawlerProcess/simple.py | 12 | CODE | |
| MEDIUM | …rawlerProcess/reactor_select_twisted_reactor_select.py | 14 | CODE | |
| MEDIUM | tests/CrawlerProcess/asyncio_custom_loop.py | 10 | CODE | |
| MEDIUM | tests/CrawlerRunner/explicit_default_reactor.py | 17 | CODE | |
| MEDIUM | tests/CrawlerRunner/custom_loop_same.py | 19 | CODE | |
| MEDIUM | tests/CrawlerRunner/change_reactor.py | 15 | CODE | |
| MEDIUM | tests/CrawlerRunner/custom_loop_different.py | 19 | CODE | |
| MEDIUM | tests/CrawlerRunner/multi_parallel.py | 14 | CODE | |
| MEDIUM | tests/CrawlerRunner/no_reactor.py | 13 | CODE | |
| MEDIUM | tests/CrawlerRunner/simple.py | 16 | CODE | |
| MEDIUM | tests/CrawlerRunner/multi_seq.py | 15 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/asyncio_enabled_no_reactor.py | 17 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/reactorless_simple.py | 12 | CODE | |
| MEDIUM | …erProcess/asyncio_enabled_reactor_same_loop_default.py | 21 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/args_settings.py | 19 | CODE | |
| MEDIUM | …syncCrawlerProcess/reactorless_import_hook_multiple.py | 21 | CODE | |
| MEDIUM | …sts/AsyncCrawlerProcess/reactorless_custom_settings.py | 23 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/multi.py | 10 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/asyncio_enabled_reactor.py | 43 | CODE | |
| MEDIUM | …yncCrawlerProcess/asyncio_enabled_reactor_same_loop.py | 21 | CODE | |
| MEDIUM | …ncCrawlerProcess/reactorless_telnetconsole_disabled.py | 10 | CODE | |
| MEDIUM | …ocess/asyncio_custom_loop_custom_settings_different.py | 13 | CODE | |
| MEDIUM | …lerProcess/asyncio_custom_loop_custom_settings_same.py | 13 | CODE | |
| MEDIUM | …awlerProcess/asyncio_enabled_reactor_different_loop.py | 19 | CODE | |
| MEDIUM | …yncCrawlerProcess/reactorless_telnetconsole_enabled.py | 10 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/reactorless_then_reactor.py | 10 | CODE | |
| MEDIUM | tests/AsyncCrawlerProcess/reactorless_import_hook.py | 12 | CODE | |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_robotstxt_interface.py | 31 | def _setUp(self, parser_cls: type[RobotParser]) -> None: | CODE |
| LOW | tests/test_scheduler.py | 107 | def _setup(scheduler: Scheduler) -> None: | CODE |
| LOW | tests/test_scheduler.py | 120 | def _setup(scheduler: Scheduler) -> None: | CODE |
| LOW | tests/test_scheduler.py | 135 | def _setup(scheduler: Scheduler) -> None: | CODE |
| LOW | tests/test_scheduler.py | 229 | def _setup(scheduler: Scheduler) -> None: | CODE |
| LOW | tests/test_extension_periodic_log.py | 67 | def set_a(self) -> None: | CODE |
| LOW | tests/test_extension_periodic_log.py | 70 | def set_b(self) -> None: | CODE |
| LOW | …syncCrawlerProcess/reactorless_import_hook_multiple.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | …yncCrawlerProcess/reactorless_import_hook_uninstall.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/mail.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/robotstxt.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/addons.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/pqueues.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/pqueues.py | 221 | def _update_curprio(self) -> None: | CODE |
| LOW | scrapy/__init__.py | 15 | __all__ = [ | CODE |
| LOW | scrapy/statscollectors.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/statscollectors.py | 69 | def set_value(self, key: str, value: Any, spider: Spider | None = None) -> None: | CODE |
| LOW | scrapy/statscollectors.py | 73 | def set_stats(self, stats: StatsT, spider: Spider | None = None) -> None: | CODE |
| LOW | scrapy/statscollectors.py | 155 | def set_value(self, key: str, value: Any, spider: Spider | None = None) -> None: | CODE |
| LOW | scrapy/statscollectors.py | 158 | def set_stats(self, stats: StatsT, spider: Spider | None = None) -> None: | CODE |
| LOW | scrapy/exporters.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/exporters.py | 30 | __all__ = [ | CODE |
| LOW | scrapy/middleware.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/middleware.py | 70 | def _set_compat_spider(self, spider: Spider | None) -> None: | CODE |
| LOW | scrapy/crawler.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/crawler.py | 149 | def _update_root_log_handler(self) -> None: | CODE |
| LOW | scrapy/crawler.py | 767 | def _setup_reactor(self, install_signal_handlers: bool) -> None: | CODE |
| LOW | scrapy/linkextractors/lxmlhtml.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/linkextractors/__init__.py | 130 | __all__ = [ | CODE |
| LOW | scrapy/downloadermiddlewares/cookies.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/downloadermiddlewares/robotstxt.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/downloadermiddlewares/redirect.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/downloadermiddlewares/offsite.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/downloadermiddlewares/offsite.py | 73 | def _update_host_regex(self, spider: Spider) -> None: | CODE |
| LOW | scrapy/downloadermiddlewares/httpcache.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/settings/default_settings.py | 21 | __all__ = [ | CODE |
| LOW | scrapy/selector/unified.py | 12 | __all__ = ["Selector", "SelectorList"] | CODE |
| LOW | scrapy/selector/__init__.py | 8 | __all__ = [ | CODE |
| LOW | scrapy/core/scraper.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/spidermw.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/engine.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/scheduler.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/downloader/tls.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/downloader/handlers/_base_streaming.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/downloader/handlers/__init__.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/downloader/handlers/http11.py | 80 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/downloader/handlers/http.py | 17 | __all__ = [ | CODE |
| LOW | scrapy/core/_http2/protocol.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/core/_http2/stream.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/spiders/sitemap.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/spiders/__init__.py | 84 | def _set_crawler(self, crawler: Crawler) -> None: | CODE |
| LOW | scrapy/spiders/__init__.py | 167 | def update_settings(cls, settings: BaseSettings) -> None: | CODE |
| LOW | scrapy/spiders/__init__.py | 190 | __all__ = [ | CODE |
| LOW | scrapy/pipelines/files.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/pipelines/files.py | 522 | def _update_stores(cls, settings: BaseSettings) -> None: | CODE |
| LOW | scrapy/pipelines/media.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/pipelines/images.py | 132 | def _update_stores(cls, settings: BaseSettings) -> None: | CODE |
| LOW | scrapy/utils/reactor.py | 98 | def set_asyncio_event_loop_policy() -> None: | CODE |
| LOW | scrapy/utils/signal.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | scrapy/utils/log.py | 28 | logger = logging.getLogger(__name__) | CODE |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_downloader_handler_httpx.py | 59 | except Exception: | CODE |
| LOW | tests/test_downloadermiddleware_httpcache.py | 330 | except Exception: | CODE |
| LOW | tests/test_pipeline_media.py | 143 | except Exception as exc: | CODE |
| LOW | …awlerProcess/twisted_reactor_custom_settings_select.py | 23 | except Exception: | CODE |
| LOW | …sts/AsyncCrawlerProcess/reactorless_custom_settings.py | 29 | except Exception: | CODE |
| LOW | scrapy/crawler.py | 286 | except Exception: | CODE |
| LOW | scrapy/crawler.py | 320 | except Exception: | CODE |
| LOW | scrapy/crawler.py | 565 | except Exception: | CODE |
| LOW | scrapy/crawler.py | 676 | except Exception: | CODE |
| LOW | scrapy/downloadermiddlewares/robotstxt.py | 102 | except Exception as e: | CODE |
| LOW | scrapy/downloadermiddlewares/httpcache.py | 88 | except Exception: | CODE |
| LOW | scrapy/core/scraper.py | 229 | except Exception: | CODE |
| LOW | scrapy/core/scraper.py | 261 | except Exception: | CODE |
| LOW | scrapy/core/scraper.py | 270 | except Exception as spider_exc: | CODE |
| LOW | scrapy/core/scraper.py | 293 | except Exception: | CODE |
| LOW | scrapy/core/scraper.py | 529 | except Exception as ex: | CODE |
| LOW | scrapy/core/spidermw.py | 96 | except Exception: | CODE |
| LOW | scrapy/core/spidermw.py | 110 | except Exception as ex: | CODE |
| LOW | scrapy/core/spidermw.py | 226 | except Exception as ex: | CODE |
| LOW | scrapy/core/engine.py | 152 | except Exception: | CODE |
| LOW | scrapy/core/engine.py | 293 | except Exception as exception: | CODE |
| LOW | scrapy/core/engine.py | 342 | except Exception: | CODE |
| LOW | scrapy/core/engine.py | 436 | except Exception: | CODE |
| LOW⚡ | scrapy/core/engine.py | 657 | except Exception: | CODE |
| LOW⚡ | scrapy/core/engine.py | 662 | except Exception: | CODE |
| LOW⚡ | scrapy/core/engine.py | 669 | except Exception: | CODE |
| LOW⚡ | scrapy/core/engine.py | 678 | except Exception: | CODE |
| LOW | scrapy/core/engine.py | 689 | except Exception: | CODE |
| LOW | scrapy/core/engine.py | 708 | except Exception: | CODE |
| LOW | scrapy/core/engine.py | 722 | except Exception: | CODE |
| LOW | scrapy/core/downloader/__init__.py | 221 | except Exception: | CODE |
| LOW | scrapy/core/downloader/__init__.py | 242 | except Exception: | CODE |
| LOW | scrapy/core/downloader/middleware.py | 83 | except Exception as ex: | CODE |
| LOW | scrapy/core/downloader/handlers/_base_streaming.py | 222 | except Exception as e: | CODE |
| LOW | scrapy/core/downloader/handlers/__init__.py | 122 | except Exception as ex: | CODE |
| LOW | scrapy/contracts/__init__.py | 57 | except Exception: | CODE |
| LOW | scrapy/contracts/__init__.py | 91 | except Exception: | CODE |
| LOW | scrapy/contracts/__init__.py | 151 | except Exception: | CODE |
| LOW | scrapy/contracts/__init__.py | 207 | except Exception: | CODE |
| LOW | scrapy/pipelines/files.py | 428 | except Exception: | CODE |
| LOW | scrapy/pipelines/files.py | 680 | except Exception as exc: | CODE |
| LOW | scrapy/pipelines/media.py | 211 | except Exception: | CODE |
| LOW | scrapy/pipelines/media.py | 234 | except Exception: | CODE |
| LOW | scrapy/utils/deprecate.py | 131 | except Exception as e: | CODE |
| LOW | scrapy/utils/signal.py | 64 | except Exception: | CODE |
| LOW | scrapy/utils/signal.py | 199 | except Exception as ex: | CODE |
| LOW | scrapy/utils/asyncio.py | 206 | except Exception: | CODE |
| LOW | scrapy/utils/engine.py | 36 | except Exception as e: | CODE |
| LOW | scrapy/utils/defer.py | 151 | except Exception: | CODE |
| LOW | scrapy/utils/defer.py | 357 | except Exception: | CODE |
| LOW | scrapy/utils/defer.py | 376 | except Exception: | CODE |
| LOW | scrapy/utils/ssl.py | 43 | except Exception as ex: | CODE |
| LOW | scrapy/extensions/feedexport.py | 618 | except Exception: | CODE |
| LOW | scrapy/extensions/remote_control.py | 180 | except Exception: | CODE |
| LOW | scrapy/extensions/remote_control.py | 198 | except Exception: | CODE |
| LOW | scrapy/extensions/remote_control.py | 221 | except Exception: | CODE |
| LOW | scrapy/extensions/remote_control.py | 276 | except Exception: | CODE |
| LOW | scrapy/extensions/httpcache.py | 416 | except Exception: | CODE |
| MEDIUM | scrapy/commands/startproject.py | 56 | print(f"Error: Module {project_name!r} already exists") | CODE |
| MEDIUM | scrapy/commands/startproject.py | 102 | print(f"Error: scrapy.cfg already exists in {project_dir.resolve()}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/test_engine_loop.py | 372 | spider.crawler.engine._slot.scheduler.enqueue_request(request) | CODE |
| CRITICAL | tests/test_engine_loop.py | 413 | spider.crawler.engine._slot.scheduler.enqueue_request(request) | CODE |
| CRITICAL | tests/test_engine_loop.py | 462 | spider.crawler.engine._slot.scheduler.enqueue_request(request) | CODE |
| CRITICAL | tests/test_engine_loop.py | 475 | spider.crawler.engine._slot.scheduler.enqueue_request(request) | CODE |
| CRITICAL | scrapy/extensions/throttle.py | 100 | return key, self.crawler.engine.downloader.slots.get(key) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 121 | COMMENT | |
| LOW | pyproject.toml | 301 | # message wording varies across Python implementations and versions | COMMENT |
| LOW | tests/utils/bases/http_request.py | 141 | url="http://www.scrapy.org/price/µ?currency=£", encoding="latin1" | COMMENT |
| LOW | tests/benchmarks/urls.txt | 1 | # Link targets for the URL benchmarks, as they would appear in the href | COMMENT |
| LOW | docs/requirements.txt | 1 | # This file was autogenerated by uv via the following command: | COMMENT |
| LOW | docs/requirements.txt | 21 | constantly==23.10.4 | COMMENT |
| LOW | docs/requirements.txt | 41 | # via tldextract | COMMENT |
| LOW | docs/requirements.txt | 61 | # itemloaders | COMMENT |
| LOW | docs/requirements.txt | 81 | # scrapy | COMMENT |
| LOW | docs/requirements.txt | 101 | # -r requirements.in | COMMENT |
| LOW | docs/requirements.txt | 121 | # via sphinx | COMMENT |
| LOW | docs/requirements.txt | 141 | # sphinxcontrib-jquery | COMMENT |
| LOW | docs/requirements.txt | 181 | # via scrapy | COMMENT |
| LOW | docs/requirements.txt | 201 | # scrapy | COMMENT |
| LOW | docs/conf.py | 121 | r"\w+Contract\.(adjust_request_args|(pre|post)_process)$", | COMMENT |
| LOW | scrapy/shell.py | 41 | # official ways to use it: | COMMENT |
| LOW | scrapy/shell.py | 61 | # which initializes the engine but doesn't start processing of requests. | COMMENT |
| LOW | scrapy/shell.py | 81 | # Other architecture problems: | COMMENT |
| LOW | scrapy/crawler.py | 1001 | # because crawl() returns a Task. | COMMENT |
| LOW | scrapy/crawler.py | 1021 | # Workflow with Ctrl-C pressed once: | COMMENT |
| LOW | scrapy/core/_http2/protocol.py | 121 | COMMENT | |
| LOW | scrapy/pipelines/media.py | 261 | # Response and by extension, the original Request) gets encapsulated | COMMENT |
| LOW | scrapy/http/request/__init__.py | 161 | COMMENT | |
| LOW | scrapy/http/request/__init__.py | 181 | #: :meth:`~scrapy.Spider.parse` method of the spider must be used. | COMMENT |
| LOW | scrapy/http/request/__init__.py | 201 | #: | COMMENT |
| LOW | scrapy/http/request/__init__.py | 221 | #: duplicate request filtering (see | COMMENT |
| LOW | scrapy/http/request/__init__.py | 441 | # We need to use __func__ to access the original function object because instance | COMMENT |
| LOW | scrapy/templates/project/module/spiders/__init__.py | 1 | # This package will contain the spiders of your Scrapy project | COMMENT |
| LOW | .github/workflows/flag-prs-for-triage.yml | 1 | name: Flag PRs for triage | COMMENT |
| LOW | .github/workflows/flag-prs-for-triage.yml | 21 | # - Agent branch: the branch name carries an agent prefix. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 36 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 77 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 118 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 145 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 156 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 174 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 185 | # ================================================================================ | COMMENT |
| MEDIUM | tests/test_spidermiddleware_output_chain.py | 257 | # ================================================================================ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_downloadermiddleware_httpcache.py | 504 | CODE | |
| LOW | tests/utils/bases/engine.py | 104 | CODE | |
| LOW | docs/utils/linkfix.py | 20 | CODE | |
| LOW | scrapy/pqueues.py | 191 | CODE | |
| LOW | scrapy/pqueues.py | 364 | CODE | |
| LOW | scrapy/downloadermiddlewares/httpproxy.py | 81 | CODE | |
| LOW | scrapy/selector/unified.py | 76 | CODE | |
| LOW | scrapy/core/_http2/protocol.py | 379 | CODE | |
| LOW | scrapy/core/_http2/stream.py | 217 | CODE | |
| LOW | scrapy/core/_http2/stream.py | 421 | CODE | |
| LOW | scrapy/spiders/feed.py | 78 | CODE | |
| LOW | scrapy/pipelines/media.py | 146 | CODE | |
| LOW | scrapy/pipelines/media.py | 317 | CODE | |
| LOW | scrapy/utils/sitemap.py | 107 | CODE | |
| LOW | scrapy/utils/sitemap.py | 62 | CODE | |
| LOW | scrapy/utils/request.py | 39 | CODE | |
| LOW | scrapy/utils/iterators.py | 21 | CODE | |
| LOW | scrapy/http/request/form.py | 173 | CODE | |
| LOW | scrapy/commands/check.py | 86 | CODE | |
| LOW | scrapy/commands/settings.py | 49 | CODE | |
| LOW | scrapy/commands/parse.py | 306 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scrapy/core/scraper.py | 1 | """This module implements the Scraper component which parses responses and | STRING |
| MEDIUM | scrapy/core/spidermw.py | 261 | # This method is only needed until _async compatibility methods are removed. | COMMENT |
| MEDIUM | scrapy/core/downloader/tls.py | 147 | """This method is needed to override the verify callback.""" | STRING |
| MEDIUM | scrapy/core/_http2/agent.py | 49 | # Create a deferred which will fire with the H2ClientProtocol | COMMENT |
| MEDIUM | scrapy/spiders/feed.py | 57 | """This method is called for the nodes matching the provided tag name | STRING |
| MEDIUM | scrapy/spiders/feed.py | 70 | """This method is called for the nodes matching the provided tag name | STRING |
| MEDIUM | scrapy/utils/trackref.py | 1 | """This module provides some functions and classes to record and report | STRING |
| MEDIUM | scrapy/commands/shell.py | 98 | # Create the engine and run start_async() in the main thread | COMMENT |
| MEDIUM | scrapy/commands/shell.py | 104 | # Create the engine and run start_async() in the event loop thread | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_downloadermiddleware_httpproxy.py | 287 | request.meta["proxy"] = "https://user1:password1@example.org" | CODE |
| LOW⚡ | tests/test_downloadermiddleware_httpproxy.py | 304 | request.meta["proxy"] = "https://user1:password1@example.org" | CODE |
| LOW⚡ | tests/test_downloadermiddleware_httpproxy.py | 327 | request.meta["proxy"] = "https://user2:password2@example.org" | CODE |
| LOW⚡ | tests/test_item.py | 67 | i["name"] = "John Doe" | CODE |
| LOW⚡ | tests/test_item.py | 71 | assert itemrepr == "{'name': 'John Doe', 'number': 123}" | CODE |
| LOW⚡ | tests/test_item.py | 74 | assert i2["name"] == "John Doe" | CODE |
| LOW⚡ | tests/test_settings/__init__.py | 687 | dummy_config_value = settings.pop("DUMMY_CONFIG", "dummy_value") | CODE |
| LOW⚡ | tests/test_settings/__init__.py | 688 | assert dummy_config_value == "dummy_value" | CODE |
| LOW⚡ | tests/test_settings/__init__.py | 692 | {"DUMMY_CONFIG": "dummy_value", "OTHER_DUMMY_CONFIG": "other_dummy_value"} | CODE |
| LOW⚡ | tests/test_settings/__init__.py | 695 | assert settings.pop("DUMMY_CONFIG") == "dummy_value" | CODE |
| LOW | scrapy/http/request/form.py | 70 | formdata={"name": "John Doe", "age": "27"}, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_command_runspider.py | 0 | import scrapy class myspider(scrapy.spider): name = 'myspider' async def start(self): self.logger.debug('it works!') ret | STRING |
| HIGH | tests/test_command_crawl.py | 0 | import scrapy class myspider(scrapy.spider): name = 'myspider' async def start(self): self.logger.debug('it works!') ret | STRING |
| HIGH | tests/test_commands.py | 0 | import scrapy class myspider(scrapy.spider): name = 'myspider' async def start(self): self.logger.debug('it works!') ret | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scrapy/mail.py | 64 | CODE | |
| LOW | scrapy/linkextractors/lxmlhtml.py | 305 | CODE | |
| LOW | scrapy/extensions/feedexport.py | 206 | CODE | |
| LOW | scrapy/http/response/__init__.py | 71 | CODE | |
| LOW | scrapy/http/response/__init__.py | 227 | CODE | |
| LOW | scrapy/http/response/__init__.py | 280 | CODE | |
| LOW | scrapy/http/response/text.py | 180 | CODE | |
| LOW | scrapy/http/response/text.py | 236 | CODE | |
| LOW | scrapy/http/request/__init__.py | 124 | CODE | |
| LOW | scrapy/http/request/form.py | 116 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http2_client_protocol.py | 401 | # Check if headers were sent successfully | COMMENT |
| LOW | scrapy/core/_http2/stream.py | 393 | # Check if we exceed the allowed max data size which can be received | COMMENT |
| LOW | scrapy/core/_http2/agent.py | 55 | # Check if we already have a connection to the remote | COMMENT |
| LOW | scrapy/pipelines/media.py | 193 | # Check if request is downloading right now to avoid doing it twice | COMMENT |
| LOW | scrapy/utils/asyncio.py | 73 | # Check if there is a running asyncio loop. | COMMENT |
| LOW | scrapy/utils/asyncio.py | 84 | # Check if there is an installed asyncio reactor (it doesn't need to be | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/mockserver/http_resources.py | 440 | # just set this to trigger a test failure if no valid accept-encoding header was set | COMMENT |
| MEDIUM | scrapy/spiders/feed.py | 50 | """You can override this function in order to make any changes you want | STRING |
| MEDIUM | scrapy/utils/signal.py | 42 | """Like ``pydispatch.robust.sendRobust()`` but it also logs errors and returns | STRING |
| LOW | scrapy/http/request/form.py | 296 | # If we don't have clickdata, we just use the first clickable element | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ils_misc/test_return_with_argument_inside_generator.py | 82 | def helper() -> int: | STRING |
| LOW | …ils_misc/test_return_with_argument_inside_generator.py | 136 | def helper() -> int: | STRING |
| LOW | …ils_misc/test_return_with_argument_inside_generator.py | 202 | def helper() -> int: | STRING |