A fast, helpful, and open-source document parser
This report summarizes scanner evidence for run-llama/liteparse, a Rust project with 12,824 GitHub stars. SynthScan examined 79,273 lines of code across 203 source files, recording 436 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 7.0 (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? 315 finding(s).
Are imports declared and package/API names verified? 59 finding(s).
Are wrappers, guards, and repeated structures necessary? 108 finding(s).
Which changes need focused human review? 436 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 436 distinct pattern matches across 17 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 | run_benchmarks.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | run_benchmarks.sh | 21 | # override with LITEPARSE_PADDLE_OCR_URL). OCR modes run with | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 81 | font_size: Option<f64>, | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 101 | stroke_color: Option<String>, | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 301 | COMMENT | |
| LOW | crates/liteparse-python/src/lib.rs | 321 | level: Option<u8>, | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 341 | #[pyo3(get)] | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 541 | page_num: u32, | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 741 | #[pyclass(frozen, from_py_object)] | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 1141 | } | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 1161 | /// `full_page_image` for that. | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 1381 | extract_vector_graphics: cfg.extract_vector_graphics, | COMMENT |
| LOW | crates/liteparse-python/src/lib.rs | 1401 | #[pyo3(get)] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 41 | ocr_language: String, | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 61 | #[arg(long)] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 81 | no_links: bool, | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 101 | #[arg(long)] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 161 | ocr_language: String, | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 181 | quiet: bool, | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 201 | extract_form_fields: bool, | COMMENT |
| LOW | crates/pdfium/src/page.rs | 201 | /// (`FPDFAnnot_HasAttachmentPoints`: a subtype test — links and the | COMMENT |
| LOW | crates/pdfium/src/page.rs | 281 | /// viewport mapping, and every later `FPDF_LoadPage` of this page in the | COMMENT |
| LOW | crates/pdfium/src/page.rs | 1161 | COMMENT | |
| LOW | crates/pdfium/src/text_page.rs | 41 | /// The caller must ensure `index` is in `0..char_count`. | COMMENT |
| LOW | crates/pdfium/src/struct_tree.rs | 1 | //! Walk the PDF structure tree (tagged-PDF tree) for a page. | COMMENT |
| LOW | crates/pdfium/src/struct_tree.rs | 41 | } | COMMENT |
| LOW | crates/pdfium/src/library.rs | 21 | /// fn; its lock discipline is the caller's responsibility, not statically | COMMENT |
| LOW | crates/pdfium/src/library.rs | 41 | /// | COMMENT |
| LOW | crates/pdfium/src/library.rs | 61 | impl Library { | COMMENT |
| LOW | crates/pdfium/src/page_object.rs | 1 | //! Typed, borrowed access to a page's content objects: pdfium's page-object API | COMMENT |
| LOW | crates/pdfium/src/bitmap.rs | 61 | /// Create a new BGRA bitmap with the given dimensions. | COMMENT |
| LOW | crates/pdfium/src/user_unit.rs | 1 | //! Detection of the PDF `/UserUnit` page key, which PDFium ignores entirely. | COMMENT |
| LOW | crates/pdfium/src/user_unit.rs | 21 | //! tree walk. | COMMENT |
| LOW | crates/pdfium/src/document.rs | 241 | } else { | COMMENT |
| LOW | crates/liteparse-wasm/build.rs | 21 | COMMENT | |
| LOW | crates/liteparse-wasm/src/wasi_stubs.rs | 1 | //! Stub implementations of libc functions that pdfium's statically-linked | COMMENT |
| LOW | crates/liteparse-wasm/src/wasi_stubs.rs | 41 | // - __c_longjmp is a WebAssembly.Tag with 1 param (env: i32) | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 81 | /// Emit each page's `contentBounds` (union bbox of top-level content | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 101 | /// page size and OCR rasters come out upright. Applied on top of the PDF's | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 381 | /// Rotation in degrees (viewport space). | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 401 | pub stroke_color: Option<String>, | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 541 | } | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 561 | /// Blocks appear in reading order, matching the page's markdown. | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 581 | #[serde(skip_serializing_if = "std::ops::Not::not")] | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 841 | /// One page rendered to PNG, plus raster-derived signals. | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 881 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | crates/liteparse-wasm/src/lib.rs | 1381 | .map_err(|e| JsError::new(&format!("is_complex failed: {}", e)))?; | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 21 | #[napi(object)] | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 41 | pub extract_screenshots: Option<bool>, | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 61 | /// Extract embedded image bytes and metadata (default false). | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 81 | pub extract_structure_tree: Option<bool>, | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 101 | pub ocr_failure_fatal: Option<bool>, | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 121 | /// (0/90/180/270) by which its content appears rotated; LiteParse | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 521 | } | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 941 | /// One of `heading`, `paragraph`, `list_item`, `code`, `table`, | COMMENT |
| LOW | crates/liteparse-napi/src/lib.rs | 181 | /// file for a non-PDF source lives as long as the session, so conversion is | COMMENT |
| LOW | crates/liteparse/tests/stages_compose.rs | 1 | //! Gate for the `stages` module: `parse()` must equal the stages composed by | COMMENT |
| LOW | crates/liteparse/src/font_db_resolver.rs | 1 | //! Built-in [`GlyphResolver`] backed by a fragmented glyph-outline → unicode | COMMENT |
| LOW | crates/liteparse/src/types.rs | 21 | pub mod_date: Option<String>, | COMMENT |
| LOW | crates/liteparse/src/types.rs | 41 | pub trailer_id_pair_differs: Option<bool>, | COMMENT |
| 178 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/liteparse/src/conversion.rs | 1417 | // ── find_pdf_in_dir ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/lib.rs | 11 | // ── Public API re-exports ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/lib.rs | 22 | // ── Modules with user-facing types (visible in docs) ─────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/projection.rs | 3005 | // ── ProjectedLine derivation ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/projection.rs | 3090 | // ── XY-cut layout decomposition ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 62 | // ── Open ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 104 | // ── Document facts ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 140 | // ── Extract ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 195 | // ── Complexity ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 215 | // ── OCR ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 346 | // ── Content filters ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 364 | // ── Projection ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 373 | // ── Markdown ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/stages.rs | 563 | // ── Screenshots ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/lists.rs | 76 | // ── Lettered / roman ordered-list detection ─────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 1877 | // ── Description-list 2-column table detector ────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 2255 | // ── Cross-run merging (post-pass over `detect_tables` output) ────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 2310 | // ── Fragmented-cluster re-extraction ─────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 3105 | // ── Ruled-grid table detection ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 6068 | // ── merge_consecutive_table_runs ───────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/suryaocr/test_server.py | 12 | def test_html_to_text_strips_tags_and_unescapes() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 19 | def test_html_to_text_empty_for_markup_only() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 47 | def test_server_health_endpoint() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 55 | def test_server_ocr_endpoint_maps_blocks() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 83 | def test_server_defaults_missing_confidence() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 101 | def test_server_skips_empty_and_skipped_blocks() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 123 | def test_server_derives_bbox_from_polygon_when_bbox_missing() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 137 | def test_server_keeps_zero_bbox_without_deriving_from_polygon() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 151 | def test_server_skips_whitespace_only_html() -> None: | CODE |
| LOW | ocr/paddleocr/test_server.py | 48 | def test_server_health_endpoint(server: PaddleOCRServer) -> None: | CODE |
| LOW | ocr/paddleocr/test_server.py | 77 | def test_server_normalizes_documented_language_aliases( | CODE |
| LOW | ocr/easyocr/test_server.py | 38 | def test_server_health_endpoint(server: EasyOCRServer) -> None: | CODE |
| LOW⚡ | packages/python/tests/test_pool_e2e.py | 68 | def test_pool_matches_in_process(sample_pdf): | CODE |
| LOW⚡ | packages/python/tests/test_pool_e2e.py | 78 | def test_parse_timeout_requires_pool(): | CODE |
| LOW⚡ | packages/python/tests/test_pool_e2e.py | 83 | def test_timeout_kills_worker_and_pool_recovers(sample_pdf): | CODE |
| LOW | packages/python/tests/test_pool_e2e.py | 96 | def test_timeout_names_the_file(tmp_path): | CODE |
| LOW | packages/python/tests/test_pool_e2e.py | 109 | def test_parse_error_propagates_from_worker(): | CODE |
| LOW | packages/python/tests/test_pool_e2e.py | 115 | def test_close_shuts_down_workers(sample_pdf): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 20 | def test_parse_returns_parse_result(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 24 | def test_parse_result_has_pages(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 29 | def test_parse_result_has_text(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 34 | def test_parse_result_has_json(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 52 | async def test_parse_async_bytes_input(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 109 | def test_invalid_output_format(self): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 139 | def test_multi_page_text_joined(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 166 | async def test_file_not_found_async(self, parser: LiteParse): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 19 | def test_screenshot_returns_batch_result( | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 25 | def test_screenshot_has_screenshots(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 30 | def test_screenshot_result_fields(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 39 | def test_screenshot_output_dir(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 47 | def test_screenshot_png_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 52 | def test_screenshot_jpg_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 58 | async def test_screensho_async_basic(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 18 | def test_batch_parse_returns_batch_result( | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 32 | def test_batch_parse_creates_output_files( | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 48 | def test_batch_parse_json_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 85 | async def test_input_dir_not_found_async(self, parser: LiteParse): | CODE |
| LOW | packages/python/liteparse/parser.py | 115 | def _convert_structure_element(element: Any) -> StructureTreeElement: | CODE |
| LOW | packages/node/src/cli-json.ts | 45 | function structureTreeElementToCliJson(element: StructureTreeElement): object { | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/processing.py | 80 | def analyze_image_with_claude( | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 378 | def _generate_navigation_html(self) -> str: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 411 | def _generate_all_documents_html(self) -> str: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 461 | def _generate_pdf_preview_html(self, pdf_path: Path) -> str: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/bump-version.py | 35 | CODE | |
| LOW | packages/python/liteparse/types.py | 6 | CODE | |
| LOW | packages/python/liteparse/parser.py | 16 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 1 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 2 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 3 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 4 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 5 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 6 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 7 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 8 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 9 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 10 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 1 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 1 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 2 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/suryaocr/server.py | 148 | except Exception as e: | CODE |
| LOW | ocr/suryaocr/server.py | 153 | except Exception as e: | CODE |
| LOW | ocr/paddleocr/server.py | 106 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/_pool.py | 81 | except Exception as e: # noqa: BLE001 - forwarded to the parent verbatim | CODE |
| LOW | packages/python/liteparse/_pool.py | 99 | except Exception as e: # noqa: BLE001 - forwarded to the parent verbatim | CODE |
| LOW | packages/python/liteparse/parser.py | 723 | except Exception: | CODE |
| LOW | packages/python/liteparse/parser.py | 764 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 844 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 855 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 898 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 956 | except Exception as e: | CODE |
| MEDIUM | packages/python/liteparse/parser.py | 720 | def __del__(self) -> None: | CODE |
| LOW | packages/python/liteparse/cli.py | 13 | except Exception as e: | CODE |
| MEDIUM | packages/python/liteparse/cli.py | 14 | print(f"Error: {e}", file=sys.stderr) | CODE |
| MEDIUM | packages/python/liteparse/cli.py | 8 | def main() -> None: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 68 | except Exception: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 229 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 246 | except Exception: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 254 | except Exception as e: | CODE |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/benchmark.py | 350 | print(f"Error: Not a directory: {args.input_dir}") | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 170 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 254 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 275 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 345 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/processing.py | 192 | except Exception as e: | CODE |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/processing.py | 250 | print(f"Error: Input directory does not exist: {args.input_dir}") | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 466 | except Exception as e: | CODE |
| LOW | …src/liteparse_eval/providers/parsers/opendataloader.py | 18 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/python/liteparse/parser.py | 730 | Parse a document file. Args: file_data: Path to the document file, or raw PDF bytes. | STRING |
| HIGH | packages/python/liteparse/parser.py | 773 | Parse a document without blocking the running event loop. Args: file_data: Path to the doc | STRING |
| HIGH | packages/python/liteparse/parser.py | 799 | Parse a document in bounded-memory page batches. Each yielded batch is an ordinary :class:`ParseResult | STRING |
| HIGH | packages/python/liteparse/parser.py | 870 | Determine per-page complexity without running a full parse. Returns one entry per page with signals (t | STRING |
| HIGH | packages/python/liteparse/parser.py | 907 | Generate screenshots of document pages. Supports PDFs natively. Non-PDF formats (DOCX, XLSX, images, e | STRING |
| HIGH | dataset_eval_utils/src/liteparse_eval/report.py | 535 | Convert first page of PDF to base64-encoded image. Uses JPEG compression if PIL is available, otherwis | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/liteparse-python/src/lib.rs | 1350 | ImageMode::Placeholder => "placeholder".to_string(), | CODE |
| LOW | crates/liteparse-python/src/cli.rs | 69 | #[arg(long, default_value = "placeholder")] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 246 | "placeholder" => Ok(ImageMode::Placeholder), | CODE |
| LOW | crates/liteparse-python/src/cli.rs | 249 | "unknown image-mode '{}', expected 'off', 'placeholder', or 'embed'", | CODE |
| LOW | crates/liteparse-wasm/src/lib.rs | 308 | ImageMode::Placeholder => "placeholder".into(), | CODE |
| LOW | crates/liteparse-napi/src/types.rs | 57 | /// How to surface raster images in markdown output: "off", "placeholder" | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 316 | ImageMode::Placeholder => "placeholder".to_string(), | CODE |
| LOW | crates/liteparse/src/figure_cluster.rs | 354 | text: "lorem ipsum dolor".into(), | CODE |
| LOW | crates/liteparse/src/main.rs | 110 | #[arg(long, default_value = "placeholder")] | COMMENT |
| LOW | crates/liteparse/src/main.rs | 385 | "placeholder" => Ok(ImageMode::Placeholder), | CODE |
| LOW | crates/liteparse/src/main.rs | 388 | "unknown image-mode '{}', expected 'off', 'placeholder', or 'embed'", | CODE |
| LOW | crates/liteparse/src/markdown_layout/repetition.rs | 539 | let head = ["Acme Corp", "Quarterly Report", "Confidential"]; | CODE |
| LOW | docs/src/content/docs/liteparse/guides/browser-usage.md | 103 | | `imageMode` | `"off" \| "placeholder" \| "embed"` | `"placeholder"` | How image references appear in markdown. Also ac | CODE |
| LOW | packages/python/README.md | 37 | image_mode="placeholder", # "placeholder" | "off" | "embed" | CODE |
| LOW | packages/python/README.md | 62 | image_mode="placeholder", # Markdown image handling: "placeholder" | "off" | "embed" | CODE |
| LOW | packages/wasm/README.md | 70 | | `imageMode` | `"off" \| "placeholder" \| "embed"` | `"placeholder"` | How raster images are surfaced in markdown outpu | CODE |
| LOW | packages/node/native.d.ts | 47 | * How to surface raster images in markdown output: "off", "placeholder" | COMMENT |
| LOW | packages/node/README.md | 71 | imageMode: 'placeholder', // "placeholder" | "off" | "embed" | CODE |
| LOW | packages/node/README.md | 96 | imageMode: 'placeholder', // Markdown image handling: "placeholder" | "off" | "embed" | CODE |
| LOW | packages/node/src/cli.ts | 138 | config.imageMode = opts.imageMode as "off" | "placeholder" | "embed"; | CODE |
| LOW | packages/node/src/lib.ts | 24 | export type ImageMode = "off" | "placeholder" | "embed"; | CODE |
| LOW | packages/node/src/lib.ts | 58 | /** How to surface raster images in markdown output (default: "placeholder"). */ | COMMENT |
| LOW | packages/node/src/lib.ts | 733 | imageMode: (resolved.imageMode as ImageMode) ?? "placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/python/liteparse/_pool.py | 168 | except subprocess.TimeoutExpired: | CODE |
| HIGH | packages/python/liteparse/_pool.py | 177 | except (BrokenPipeError, OSError): | CODE |
| HIGH | packages/python/liteparse/_pool.py | 190 | except OSError: | CODE |
| HIGH | packages/python/liteparse/parser.py | 723 | except Exception: | CODE |
| HIGH | dataset_eval_utils/src/liteparse_eval/benchmark.py | 246 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | run_benchmarks.sh | 22 | # num_workers=4 and low harness concurrency — OCR is resource-hungry. | COMMENT |
| MEDIUM | run_benchmarks.sh | 60 | # --- OCR mode → per-harness LiteParse engine/pipeline names --------------- | COMMENT |
| MEDIUM | run_benchmarks.sh | 212 | # The harness averages only over scored docs; a doc it *skipped* (no | COMMENT |
| MEDIUM | crates/liteparse/src/conversion.rs | 420 | /// `.pdf` entry is more robust than constructing a fixed `<stem>.pdf` path. | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/headings.rs | 631 | /// robust where a total-char floor was not: a single short-but-real heading | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/bump-version.py | 95 | def update_cargo_version(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 105 | def update_liteparse_dep(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 115 | def update_json_version(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 125 | def update_pyproject_version(path: Path, new_version: str) -> None: | CODE |
| LOW | packages/python/liteparse/__init__.py | 63 | __all__ = [ | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 14 | __all__ = [ | CODE |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 15 | __all__ = [ | CODE |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 12 | __all__ = [ | CODE |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 4 | __all__ = ["LLMProvider", "AnthropicProvider", "QA_PROMPT"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/paddleocr/server.py | 69 | CODE | |
| LOW | ocr/paddleocr/server.py | 75 | CODE | |
| LOW | scripts/bump-version.py | 166 | CODE | |
| LOW | packages/python/liteparse/parser.py | 115 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 94 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 185 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 534 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_benchmarks.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/create-dataset.sh | 12 | # Usage: | COMMENT |
| LOW | scripts/compare-dataset.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/upload-dataset.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | dataset_eval_utils/src/liteparse_eval/evaluation.py | 368 | # Create a mapping of file paths to results | COMMENT |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/processing.py | 16 | # Define the output schema using Pydantic-like structure | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/compare-dataset.sh | 60 | # Check if file exists | COMMENT |
| LOW | scripts/compare-dataset.sh | 146 | # Check if error was expected | COMMENT |
| LOW | …al_utils/src/liteparse_eval/providers/llm/anthropic.py | 70 | # Check if the response is "<pass>" or "<fail>" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/upload-dataset.sh | 38 | # Step 1: Regenerate dataset from documents in the dataset directory | COMMENT |
| LOW⚡ | scripts/upload-dataset.sh | 42 | # Step 2: Upload to HuggingFace | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/upload-dataset.sh | 38 | # Step 1: Regenerate dataset from documents in the dataset directory | COMMENT |
| LOW⚡ | scripts/upload-dataset.sh | 42 | # Step 2: Upload to HuggingFace | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/python/liteparse/parser.py | 465 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 195 | CODE | |
| LOW | …tils/src/liteparse_eval/providers/parsers/liteparse.py | 16 | CODE |