rust-lang / rust-lang/rust-clippy

ICE: useless_conversion lint panics in StyledBuffer::replace when suggesting removal of .into_iter()

Open
#17,078 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug I-ICE
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

Summary

Version: Version clippy 0.1.95 (59807616e1 2026-04-14)
Problem: When running cargo clippy --all-targets --all-features -- -D warnings on a project with pyo3 bindings I got the attached error.

Trigger: I had code in the following style (simplified example):

// inside a TryFrom impl in src/intravascular/binding/classes.rs
        for c in &py_in.lumen {
            let rust_contour = c.to_rust_contour().map_err(|e| {
                anyhow!(
                    "failed to convert lumen PyContour(id={}) to Contour: {:?}",
                    c.id,
                    e
                )
            })?;
            lumen_points.extend(rust_contour.points.into_iter());
        }

// and this pattern in a closure:
                  let rust_contour = c.to_rust_contour().map_err(|e| {
                      anyhow!(
                          "failed to convert PyContour(id={}) to Contour: {:?}",
                          c.id,
                          e
                      )
                  })?;
                  acc.extend(rust_contour.points.into_iter());
              }

// and this in another function:
            if std == 0.0 {
                points_inside
            } else {
                points_inside
                    .into_iter()
                    .zip(dists.into_iter())
                    .filter(|(_p, d)| (d - mean).abs() <= 2.0 * std)
                    .map(|(p, _d)| p)
                    .collect()
            }

The simplified example above may not reproduce alone -> the ICE occurred inside impl blocks and closures in a larger file.

Resolving: removing the useless conversion fixed the error.

Hypothesis: The panic occurs in annotate_snippets::renderer::styled_buffer::StyledBuffer::replace (frame 12) called from useless_conversion::UselessConversion::check_expr (frame 25), suggesting the lint is computing an inverted span (starts at 16, ends at 15) when building the suggestion to remove .into_iter().

Version
rustc 1.95.0 (59807616e 2026-04-14)
binary: rustc
commit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860
commit-date: 2026-04-14
host: x86_64-unknown-linux-gnu
release: 1.95.0
LLVM version: 22.1.2
Error output
thread 'rustc' (1699355) panicked at /rustc-dev/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/slice/index.rs:1031:55:
slice index starts at 16 but ends at 15
stack backtrace:
   0:     0x7fe08a59314b - <<std[e28293b1aa0f68bd]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[c1f1a4ba060b9bfa]::fmt::Display>::fmt
   1:     0x7fe08ac1f408 - core[c1f1a4ba060b9bfa]::fmt::write
   2:     0x7fe08c1683b6 - <std[e28293b1aa0f68bd]::sys::stdio::unix::Stderr as std[e28293b1aa0f68bd]::io::Write>::write_fmt
   3:     0x7fe08a569238 - std[e28293b1aa0f68bd]::panicking::default_hook::{closure#0}
   4:     0x7fe08a5865b3 - std[e28293b1aa0f68bd]::panicking::default_hook
   5:     0x7fe08955cc30 - std[e28293b1aa0f68bd]::panicking::update_hook::<alloc[fdfd2bd8633a6659]::boxed::Box<rustc_driver_impl[e4ca9dd5dd6cf2a8]::install_ice_hook::{closure#1}>>::{closure#0}
   6:     0x7fe08a586892 - std[e28293b1aa0f68bd]::panicking::panic_with_hook
   7:     0x7fe08a5692f8 - std[e28293b1aa0f68bd]::panicking::panic_handler::{closure#0}
   8:     0x7fe08a560029 - std[e28293b1aa0f68bd]::sys::backtrace::__rust_end_short_backtrace::<std[e28293b1aa0f68bd]::panicking::panic_handler::{closure#0}, !>
   9:     0x7fe08a56ad5d - __rustc[b7974e8690430dd9]::rust_begin_unwind
  10:     0x7fe0872de82c - core[c1f1a4ba060b9bfa]::panicking::panic_fmt
  11:     0x7fe08830875d - core[c1f1a4ba060b9bfa]::slice::index::slice_index_fail
  12:     0x7fe088e7fae5 - <annotate_snippets[7d52211d2f32161f]::renderer::styled_buffer::StyledBuffer>::replace
  13:     0x7fe08bf337b7 - annotate_snippets[7d52211d2f32161f]::renderer::render::render
  14:     0x7fe08c181e06 - <rustc_errors[795cd5cf46ddce51]::annotate_snippet_emitter_writer::AnnotateSnippetEmitter>::emit_messages_default
  15:     0x7fe08c179420 - <rustc_errors[795cd5cf46ddce51]::annotate_snippet_emitter_writer::AnnotateSnippetEmitter as rustc_errors[795cd5cf46ddce51]::emitter::Emitter>::emit_diagnostic
  16:     0x7fe08c17c976 - <rustc_errors[795cd5cf46ddce51]::json::Diagnostic>::from_errors_diagnostic
  17:     0x7fe08c17c0ef - <rustc_errors[795cd5cf46ddce51]::json::JsonEmitter as rustc_errors[795cd5cf46ddce51]::emitter::Emitter>::emit_diagnostic
  18:     0x7fe08c171661 - <rustc_errors[795cd5cf46ddce51]::DiagCtxtInner>::emit_diagnostic::{closure#3}
  19:     0x7fe08c16f440 - rustc_interface[c8170c4b7b680ee8]::callbacks::track_diagnostic::<core[c1f1a4ba060b9bfa]::option::Option<rustc_span[e3c9a1967c4921fd]::ErrorGuaranteed>>
  20:     0x7fe08c16e4ee - <rustc_errors[795cd5cf46ddce51]::DiagCtxtInner>::emit_diagnostic
  21:     0x7fe08c16e39d - <rustc_errors[795cd5cf46ddce51]::DiagCtxtHandle>::emit_diagnostic
  22:     0x7fe08c16e25b - <() as rustc_errors[795cd5cf46ddce51]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  23:     0x7fe08bc7f229 - rustc_middle[9956b31dc9b62104]::lint::lint_level::lint_level_impl
  24:     0x56041191f9ec - <rustc_lint[754bcbf59f34f28d]::context::LateContext as rustc_lint[754bcbf59f34f28d]::context::LintContext>::opt_span_lint::<rustc_span[e3c9a1967c4921fd]::span_encoding::Span, clippy_utils[5cfafd3c36323ad7]::diagnostics::span_lint_and_then<rustc_lint[754bcbf59f34f28d]::context::LateContext, rustc_span[e3c9a1967c4921fd]::span_encoding::Span, &str, <clippy_lints[2bd58402bd437290]::useless_conversion::UselessConversion as rustc_lint[754bcbf59f34f28d]::passes::LateLintPass>::check_expr::{closure#4}>::{closure#0}>
  25:     0x560411bd88c7 - <clippy_lints[2bd58402bd437290]::useless_conversion::UselessConversion as rustc_lint[754bcbf59f34f28d]::passes::LateLintPass>::check_expr
  26:     0x7fe089a423f0 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  27:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  28:     0x7fe089a426b4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  29:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  30:     0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  31:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  32:     0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  33:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  34:     0x7fe089a4269c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  35:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  36:     0x7fe089ac3a51 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
  37:     0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  38:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  39:     0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  40:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  41:     0x7fe089ac3a51 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
  42:     0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  43:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  44:     0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  45:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  46:     0x7fe089ac3842 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
  47:     0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  48:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  49:     0x7fe089a428e4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  50:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  51:     0x7fe089ac36c9 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
  52:     0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  53:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  54:     0x7fe089a428e4 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  55:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  56:     0x7fe089a425c7 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  57:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  58:     0x7fe089ac36c9 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_block
  59:     0x7fe089a4283c - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr::{closure#0}::{closure#0}
  60:     0x7fe089ac3504 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_expr
  61:     0x7fe089ac3ce1 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_body
  62:     0x7fe089ac431e - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_fn
  63:     0x7fe089ad9aac - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
  64:     0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
  65:     0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
  66:     0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
  67:     0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
  68:     0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
  69:     0x7fe089ad8f5f - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass> as rustc_hir[b3c1514e930b846b]::intravisit::Visitor>::visit_nested_item
  70:     0x7fe089a5fe09 - <rustc_lint[754bcbf59f34f28d]::late::LateContextAndPass<rustc_lint[754bcbf59f34f28d]::late::RuntimeCombinedLateLintPass>>::process_mod
  71:     0x7fe08ba4cab7 - rustc_lint[754bcbf59f34f28d]::late::check_crate::{closure#0}
  72:     0x7fe08ba4bdbf - rustc_lint[754bcbf59f34f28d]::late::check_crate
  73:     0x7fe08ba490f6 - rustc_interface[c8170c4b7b680ee8]::passes::analysis::{closure#0}::{closure#0}::{closure#2}
  74:     0x7fe08ba48ed7 - rustc_data_structures[2c167692117eb14d]::sync::parallel::par_fns
  75:     0x7fe08ba48e66 - rustc_interface[c8170c4b7b680ee8]::passes::analysis::{closure#0}::{closure#0}
  76:     0x7fe08ba48ed7 - rustc_data_structures[2c167692117eb14d]::sync::parallel::par_fns
  77:     0x7fe08ad36ad7 - rustc_interface[c8170c4b7b680ee8]::passes::analysis
  78:     0x7fe08c1ec447 - rustc_query_impl[b21371cac9e22a84]::execution::try_execute_query::<rustc_middle[9956b31dc9b62104]::query::caches::SingleCache<rustc_middle[9956b31dc9b62104]::query::erase::ErasedData<[u8; 0usize]>>, true>
  79:     0x7fe08c1ebdb4 - rustc_query_impl[b21371cac9e22a84]::query_impl::analysis::execute_query_incr::__rust_end_short_backtrace
  80:     0x7fe08be5632d - rustc_interface[c8170c4b7b680ee8]::interface::run_compiler::<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}
  81:     0x7fe08be2663e - std[e28293b1aa0f68bd]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_with_globals<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_pool_with_globals<rustc_interface[c8170c4b7b680ee8]::interface::run_compiler<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  82:     0x7fe08be26ca0 - <std[e28293b1aa0f68bd]::thread::lifecycle::spawn_unchecked<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_with_globals<rustc_interface[c8170c4b7b680ee8]::util::run_in_thread_pool_with_globals<rustc_interface[c8170c4b7b680ee8]::interface::run_compiler<(), rustc_driver_impl[e4ca9dd5dd6cf2a8]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[c1f1a4ba060b9bfa]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  83:     0x7fe08be27b2c - <std[e28293b1aa0f68bd]::sys::thread::unix::Thread>::new::thread_start
  84:     0x7fe08588aaa4 - <unknown>
  85:     0x7fe085917c6c - <unknown>
  86:                0x0 - <unknown>

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at clippy_lints/useless_conversion.rs, especially UselessConversion::check_expr, and compare its suggestion span with annotate_snippets::renderer::styled_buffer::StyledBuffer::replace. Reproduce with the shown .into_iter() patterns in impl blocks and closures; done means cargo clippy no longer panics and the useless_conversion suggestion remains valid.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.