#1567·xberg

chore(lint): pay down the size and complexity baseline

Author: GoldziherCreated Sep 5, 2026Updated Sep 6, 2026
Labelshelp wantedgood first issue

poly lint is green in this repo, but not because the code is under the size and complexity limits. 863 findings across 420 files are listed individually in alef.toml under the # --- quality-debt baseline --- block.

Why it is a per-file list and not a rule switched off

Listing each file keeps the metrics active on every file that is not listed, so new code is still checked and new violations still fail. The cost is that each existing offender has to be paid off individually — which is exactly what makes each one a self-contained task.

What one unit of work looks like

  1. Pick a path from the list below.
  2. Reduce its findings — extract helpers from long functions, early-return to flatten nesting, group wide parameter lists into a struct, split an oversized file by responsibility.
  3. Delete that file's entry from the baseline in alef.toml.
  4. Run the crate's/package's tests and poly lint — both must be green.

Ground rules

  • Behaviour must not change. This is restructuring, not redesign. No arithmetic, ordering, dispatch or output changes.
  • A smaller, safe change is worth more than a complete one. If a file cannot be reduced without a behaviour risk you cannot rule out, say so in the PR and leave it.
  • Do not add new paths to the baseline.
  • This repo's poly.toml is generated from alef.toml — edit alef.toml and re-run alef scaffold, never poly.toml directly.

Rules in this baseline

rule files meaning
function-too-long 302 function longer than 80 lines
file-too-long 235 file longer than 1000 lines
cyclomatic-complexity 131 cyclomatic complexity over 20
nesting-too-deep 114 more than 4 levels of nesting
too-many-parameters 65 more than 6 parameters
type-too-long 16 type longer than 300 lines

Best places to start

These carry the most findings. The ones with four or more complexity findings also have a TODO(quality-debt) note at the top of the file.

file rules
crates/xberg-native-pdf/src/extractors/images.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg-native-pdf/src/extractors/text/mod.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg-native-pdf/src/rendering/page_renderer.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg-native-pdf/src/rendering/separation_renderer.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg-native-pdf/src/rendering/text_rasterizer.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg-native-pdf/src/structure/parser.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extraction/email.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extraction/image_kind.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extractors/docx.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extractors/odt.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extractors/pdf/mod.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extractors/pdf/ocr/pipeline.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/extractors/pptx.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/ocr/hocr_parser.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
crates/xberg/src/pdf/structure/assembly.rs cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
Full list — all 420 files
  • .github/workflows/benchmarks.yaml — file-too-long
  • .github/workflows/profiling.yaml — file-too-long
  • .github/workflows/publish.yaml — file-too-long
  • CHANGELOG.md — file-too-long
  • alef.toml — file-too-long
  • crates/xberg-candle-ocr/src/models/deepseek_ocr/engine.rs — function-too-long
  • crates/xberg-candle-ocr/src/models/deepseek_ocr/model.rs — file-too-long, function-too-long, too-many-parameters
  • crates/xberg-candle-ocr/src/models/glm_ocr/mod.rs — function-too-long
  • crates/xberg-candle-ocr/src/models/glm_ocr/mtp.rs — too-many-parameters
  • crates/xberg-candle-ocr/src/models/paddleocr_vl/engine.rs — function-too-long
  • crates/xberg-candle-ocr/src/models/paddleocr_vl/model.rs — file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-candle-ocr/src/models/trocr.rs — function-too-long
  • crates/xberg-cli/src/commands/cache.rs — cyclomatic-complexity, function-too-long, too-many-parameters
  • crates/xberg-cli/src/commands/doctor.rs — function-too-long
  • crates/xberg-cli/src/commands/embed.rs — function-too-long, too-many-parameters
  • crates/xberg-cli/src/commands/extract.rs — file-too-long
  • crates/xberg-cli/src/commands/overrides.rs — cyclomatic-complexity, file-too-long, function-too-long, type-too-long
  • crates/xberg-cli/src/commands/server.rs — too-many-parameters
  • crates/xberg-cli/src/commands/tree_sitter.rs — function-too-long
  • crates/xberg-cli/src/main.rs — file-too-long, function-too-long, type-too-long
  • crates/xberg-cli/tests/commands_test.rs — file-too-long
  • crates/xberg-gliner/src/candle/decode.rs — nesting-too-deep, too-many-parameters
  • crates/xberg-gliner/src/candle/pipeline.rs — function-too-long, too-many-parameters
  • crates/xberg-gliner/src/decode.rs — too-many-parameters
  • crates/xberg-gliner/src/v2/decode.rs — too-many-parameters
  • crates/xberg-libwpd/build.rs — function-too-long
  • crates/xberg-libwpd/src/shim.cpp — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/annotation_types.rs — file-too-long
  • crates/xberg-native-pdf/src/annotations.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/content/operators.rs — cyclomatic-complexity, file-too-long, function-too-long, type-too-long
  • crates/xberg-native-pdf/src/content/parser.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/converters/text_post_processor.rs — file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/crypto/policy.rs — file-too-long
  • crates/xberg-native-pdf/src/decoders/ccitt.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/decoders/flate.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/annotations.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/columns.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/extract_api.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/fonts.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/images.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/mod.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/objects.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/open.rs — cyclomatic-complexity, function-too-long
  • crates/xberg-native-pdf/src/document/pages.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/paths.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/reading_order.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/redaction.rs — cyclomatic-complexity, function-too-long
  • crates/xberg-native-pdf/src/document/span_postprocess.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/spans_text.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/tables.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/document/tests.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/document/text_assembly.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/elements/path.rs — file-too-long, too-many-parameters
  • crates/xberg-native-pdf/src/encryption/algorithms.rs — file-too-long, too-many-parameters
  • crates/xberg-native-pdf/src/encryption/mod.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/extractors/auto.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/extractors/ccitt_bilevel.rs — function-too-long
  • crates/xberg-native-pdf/src/extractors/forms.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/extractors/gap_statistics.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/extractors/images.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/extractors/paths.rs — file-too-long
  • crates/xberg-native-pdf/src/extractors/text/advance.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/text/clustering.rs — function-too-long
  • crates/xberg-native-pdf/src/extractors/text/config_tests.rs — file-too-long
  • crates/xberg-native-pdf/src/extractors/text/mod.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/extractors/text/operators.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/text/run.rs — function-too-long
  • crates/xberg-native-pdf/src/extractors/text/span_merging.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/text/span_ordering.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/text/tests.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/extractors/text/tj_arrays.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/text/xobjects.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/extractors/xmp.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/fonts/adobe_glyph_list.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/cff_encoding.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/fonts/character_mapper.rs — function-too-long
  • crates/xberg-native-pdf/src/fonts/cid_mappings/adobe_cns1.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/cid_mappings/adobe_gb1.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/cid_mappings/adobe_japan1.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/cid_mappings/adobe_korea1.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/cmap.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/fonts/cmap_injector.rs — function-too-long
  • crates/xberg-native-pdf/src/fonts/encoding.rs — function-too-long
  • crates/xberg-native-pdf/src/fonts/font_dict.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/fonts/predefined_cidfont.rs — function-too-long
  • crates/xberg-native-pdf/src/fonts/radical_forms.rs — function-too-long
  • crates/xberg-native-pdf/src/fonts/truetype_cmap.rs — file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/fonts/truetype_parser.rs — file-too-long
  • crates/xberg-native-pdf/src/fonts/unicode_decode.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/functions/mod.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/layout/font_stats.rs — function-too-long
  • crates/xberg-native-pdf/src/layout/region_classifier.rs — function-too-long
  • crates/xberg-native-pdf/src/layout/text_block.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/lexer.rs — nesting-too-deep
  • crates/xberg-native-pdf/src/object.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/outline.rs — nesting-too-deep
  • crates/xberg-native-pdf/src/parser.rs — file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/pipeline/config.rs — file-too-long
  • crates/xberg-native-pdf/src/pipeline/reading_order/detectors.rs — nesting-too-deep
  • crates/xberg-native-pdf/src/pipeline/reading_order/geometric.rs — function-too-long
  • crates/xberg-native-pdf/src/pipeline/reading_order/xycut.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/redaction/serialize.rs — function-too-long
  • crates/xberg-native-pdf/src/redaction/text_engine.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/rendering/ext_gstate.rs — function-too-long
  • crates/xberg-native-pdf/src/rendering/mesh_shading.rs — file-too-long, function-too-long, too-many-parameters
  • crates/xberg-native-pdf/src/rendering/page_renderer.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/rendering/resolution/color.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/rendering/resolution/pipeline.rs — function-too-long
  • crates/xberg-native-pdf/src/rendering/separation_renderer.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/rendering/sidecar.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/rendering/text_rasterizer.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/structure/parser.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep, too-many-parameters
  • crates/xberg-native-pdf/src/structure/spatial_table_detector.rs — cyclomatic-complexity, file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/structure/table_extractor.rs — file-too-long, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/structure/traversal.rs — file-too-long, function-too-long
  • crates/xberg-native-pdf/src/structured.rs — function-too-long
  • crates/xberg-native-pdf/src/text/bidi.rs — cyclomatic-complexity, file-too-long
  • crates/xberg-native-pdf/src/text/document_classifier.rs — function-too-long
  • crates/xberg-native-pdf/src/text/kangxi.rs — function-too-long
  • crates/xberg-native-pdf/src/text/rtl_detector.rs — cyclomatic-complexity
  • crates/xberg-native-pdf/src/text/word_boundary.rs — file-too-long
  • crates/xberg-native-pdf/src/xfa/parser.rs — cyclomatic-complexity, function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/src/xref.rs — cyclomatic-complexity, file-too-long, function-too-long
  • crates/xberg-native-pdf/src/xref_reconstruction.rs — function-too-long, nesting-too-deep
  • crates/xberg-native-pdf/tests/extraction_api_regression.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_46_round2_qa_pass.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_46_round3_qa_pass.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_46_round4_qa_pass.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_ocg_ink_filtering.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_render_ocg_filtering.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_render_output_intent.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_render_resolution_pipeline_qa_wave2.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_render_resolution_pipeline_qa_wave3.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_render_resolution_pipeline_qa_wave4.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_separation_rendering.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_struct_actualtext_probes.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_transparency_flattening_audit.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_transparency_flattening_qa_round2.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_vertical_writing_mode_qa_probes.rs — file-too-long
  • crates/xberg-native-pdf/tests/test_word_boundary_detection.rs — file-too-long
  • crates/xberg-paddle-ocr/src/crnn_net.rs — function-too-long, nesting-too-deep
  • crates/xberg-paddle-ocr/src/db_net.rs — function-too-long, too-many-parameters
  • crates/xberg-paddle-ocr/src/ocr_lite.rs — file-too-long, function-too-long, too-many-parameters
  • crates/xberg-pdfium-render/src/bindgen/pdfium_7678.rs — file-too-long
  • crates/xberg-pdfium-render/src/bindings.rs — file-too-long, too-many-parameters, type-too-long
  • crates/xberg-pdfium-render/src/bindings/dynamic_bindings.rs — file-too-long, function-too-long, too-many-parameters, type-too-long
  • crates/xberg-pdfium-render/src/bindings/static_bindings.rs — file-too-long, too-many-parameters
  • crates/xberg-pdfium-render/src/font_provider.rs — too-many-parameters
  • crates/xberg-pdfium-render/src/pdf/destination.rs — function-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page.rs — file-too-long, too-many-parameters
  • crates/xberg-pdfium-render/src/pdf/document/page/annotation.rs — file-too-long, function-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/annotation/private.rs — type-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/index_cache.rs — function-too-long, nesting-too-deep
  • crates/xberg-pdfium-render/src/pdf/document/page/object.rs — file-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/object/group.rs — function-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/object/image.rs — file-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/object/path.rs — too-many-parameters
  • crates/xberg-pdfium-render/src/pdf/document/page/object/private.rs — type-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/objects/common.rs — too-many-parameters, type-too-long
  • crates/xberg-pdfium-render/src/pdf/document/page/paragraph.rs — function-too-long, nesting-too-deep
  • `crates/xbe