Repository Analysis

Kozea/WeasyPrint

The awesome document factory

10.6 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of Kozea/WeasyPrint, a Python project with 9,540 GitHub stars. SynthScan v2.0 examined 80,204 lines of code across 176 source files, recording 1011 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 10.6 places this repository in the Low 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).

10.6
Adjusted Score
10.6
Raw Score
100%
Time Factor
2026-08-28
Last Push
9.5K
Stars
Python
Language
80.2K
Lines of Code
176
Files
1.0K
Pattern Hits
2026-08-29
Scan Date
0.07
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 13MEDIUM 11LOW 987

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1011 distinct pattern matches across 14 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.

Hyper-Verbose Identifiers662 hits · 408 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py107def assert_different_renderings(request, *args, **kwargs):CODE
LOWtests/test_pdf.py383def test_relative_links_no_height():STRING
LOWtests/test_pdf.py393def test_relative_links_missing_base():STRING
LOWtests/test_pdf.py403def test_relative_links_internal():STRING
LOWtests/test_pdf.py420def test_relative_links_anchors():STRING
LOWtests/test_pdf.py436def test_relative_links_different_base():STRING
LOWtests/test_pdf.py444def test_relative_links_same_base():STRING
LOWtests/test_pdf.py475def test_anchor_multiple_pages():STRING
LOWtests/test_pdf.py517def test_embed_images_from_pages():STRING
LOWtests/test_pdf.py556def test_embedded_files_attachments(tmp_path):STRING
LOWtests/test_pdf.py625def test_attachments_data_with_anchor():STRING
LOWtests/test_pdf.py664def test_attachments_none_empty():STRING
LOWtests/test_pdf.py732def test_default_rdf_metadata():STRING
LOWtests/test_pdf.py758def test_color_spaces_with_icc_output_intent():STRING
LOWtests/test_pdf.py781def test_pdf_tags_inline_table():STRING
LOWtests/test_pdf.py789def test_pdf_tags_anonymous_table_cells():STRING
LOWtests/test_pdf.py799def test_pdf_tags_split_table_with_caption():STRING
LOWtests/test_pdf.py810def test_pdf_tags_nested_lists_order():STRING
LOWtests/test_pdf.py832def test_pdf_tags_table_headers():STRING
LOWtests/test_pdf.py908def test_svg_gradient_color_ops_before_path():STRING
LOWtests/test_fonts.py26def test_font_face_harfbuzz_face_lifetime():CODE
LOWtests/test_fonts.py67def test_ligatures_word_space():CODE
LOWtests/test_fonts.py107def test_kerning_ligature_deactivate():CODE
LOWtests/test_fonts.py134def test_font_face_descriptors():CODE
LOWtests/test_html.py338def test_parse_integer_invalid(string):STRING
LOWtests/test_html.py359def test_parse_non_negative_integer(string, expected):STRING
LOWtests/test_html.py374def test_parse_non_negative_integer_invalid(string):STRING
LOWtests/test_html.py392def test_parse_dimension_value(string, expected):STRING
LOWtests/test_html.py411def test_parse_dimension_value_invalid(string):STRING
LOWtests/test_html.py448def test_map_to_pixel_length_invalid(string):STRING
LOWtests/test_html.py466def test_map_to_dimension_property(string, expected):STRING
LOWtests/test_html.py485def test_map_to_dimension_property_invalid(string):STRING
LOWtests/test_html.py502def test_map_to_dimension_property_ignoring_zero(string, expected):STRING
LOWtests/test_html.py524def test_map_to_dimension_property_ignoring_zero_invalid(string):STRING
LOWtests/test_text.py326def test_text_align_justify_all():CODE
LOWtests/test_text.py406def test_text_align_not_enough_space():CODE
LOWtests/test_text.py421def test_text_align_justify_no_space():CODE
LOWtests/test_text.py478def test_text_align_justify_no_break_between_children():CODE
LOWtests/test_text.py1056def test_overflow_wrap_trailing_space(wrap, text, body_width, expected_width):CODE
LOWtests/test_text.py1073def test_overflow_wrap_no_break_on_space():CODE
LOWtests/test_text.py1089def test_line_break_before_trailing_space():CODE
LOWtests/test_text.py89def test_line_breaking_trailing_inline_width():STRING
LOWtests/test_text.py164def test_text_font_size_very_small():STRING
LOWtests/test_text.py438def test_text_align_justify_text_indent():STRING
LOWtests/test_text.py638def test_text_indent_multipage(indent):STRING
LOWtests/test_text.py821def test_hyphenate_manual_keep_hyphen():STRING
LOWtests/test_text.py928def test_hyphenate_limit_chars(css, result):STRING
LOWtests/test_text.py947def test_hyphenate_limit_chars_punctuation(css):STRING
LOWtests/test_text.py1004def test_wrap_overflow_word_break(span_css, expected_lines):STRING
LOWtests/test_text.py1102def test_line_break_before_nested_trailing_space():STRING
LOWtests/test_text.py1347def test_text_transform_lang_uppercase(lang, lowercase, uppercase):STRING
LOWtests/test_text.py1367def test_text_transform_lang_lowercase(lang, uppercase, lowercase):STRING
LOWtests/test_text.py1399def test_text_transform_capitalize(original, transformed, lang_code):STRING
LOWtests/test_text.py1406def test_text_floating_pre_line():STRING
LOWtests/test_text.py1492def test_first_letter_line_height():STRING
LOWtests/test_text.py1511def test_first_letter_text_transform():STRING
LOWtests/test_text.py1559def test_first_line_line_height():STRING
LOWtests/test_text.py1578def test_first_line_text_transform():STRING
LOWtests/test_text.py1628def test_first_line_first_letter():STRING
LOWtests/test_api.py252def test_css_base_url_as_path():CODE
602 more matches not shown…
Deep Nesting206 hits · 202 pts
SeverityFileLineSnippetContext
LOWtests/testing_utils.py108CODE
LOWtests/testing_utils.py142CODE
LOWtests/testing_utils.py111CODE
LOWtests/test_api.py1256CODE
LOWtests/layout/test_table.py2348CODE
LOWtests/layout/test_table.py2402CODE
LOWtests/layout/test_page.py1137CODE
LOWtests/layout/test_inline.py147CODE
LOWweasyprint/html.py312CODE
LOWweasyprint/anchors.py30CODE
LOWweasyprint/images.py287CODE
LOWweasyprint/images.py362CODE
LOWweasyprint/images.py259CODE
LOWweasyprint/images.py689CODE
LOWweasyprint/stacking.py69CODE
LOWweasyprint/urls.py123CODE
LOWweasyprint/urls.py163CODE
LOWweasyprint/urls.py276CODE
LOWweasyprint/__main__.py57CODE
LOWweasyprint/svg/defs.py282CODE
LOWweasyprint/svg/defs.py442CODE
LOWweasyprint/svg/__init__.py456CODE
LOWweasyprint/svg/__init__.py617CODE
LOWweasyprint/svg/__init__.py728CODE
LOWweasyprint/svg/__init__.py805CODE
LOWweasyprint/svg/css.py13CODE
LOWweasyprint/svg/css.py68CODE
LOWweasyprint/svg/bounding_box.py68CODE
LOWweasyprint/svg/utils.py27CODE
LOWweasyprint/svg/utils.py149CODE
LOWweasyprint/svg/utils.py166CODE
LOWweasyprint/svg/text.py25CODE
LOWweasyprint/svg/path.py16CODE
LOWweasyprint/css/counters.py23CODE
LOWweasyprint/css/counters.py44CODE
LOWweasyprint/css/counters.py103CODE
LOWweasyprint/css/functions.py126CODE
LOWweasyprint/css/functions.py176CODE
LOWweasyprint/css/functions.py23CODE
LOWweasyprint/css/targets.py184CODE
LOWweasyprint/css/units.py58CODE
LOWweasyprint/css/__init__.py282CODE
LOWweasyprint/css/__init__.py301CODE
LOWweasyprint/css/__init__.py349CODE
LOWweasyprint/css/__init__.py603CODE
LOWweasyprint/css/__init__.py668CODE
LOWweasyprint/css/__init__.py737CODE
LOWweasyprint/css/__init__.py792CODE
LOWweasyprint/css/__init__.py810CODE
LOWweasyprint/css/__init__.py1378CODE
LOWweasyprint/css/__init__.py1495CODE
LOWweasyprint/css/__init__.py62CODE
LOWweasyprint/css/__init__.py163CODE
LOWweasyprint/css/__init__.py204CODE
LOWweasyprint/css/__init__.py1116CODE
LOWweasyprint/css/__init__.py1159CODE
LOWweasyprint/css/tokens.py159CODE
LOWweasyprint/css/tokens.py187CODE
LOWweasyprint/css/tokens.py236CODE
LOWweasyprint/css/tokens.py337CODE
146 more matches not shown…
Cross-File Repetition13 hits · 65 pts
SeverityFileLineSnippetContext
HIGHtests/test_api.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_image.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_transform.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_overflow.py0________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ________ __rbbb__ __bbbb__ __bbbb__ __bbbb__ ________ ___STRING
HIGHtests/draw/test_list.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/test_background.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/svg/test_gradients.py0__________ __________ __________ __________ __________ __________ __________ __________ __________ __________STRING
HIGHtests/draw/svg/test_transform.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_units.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_shapes.py0_rrrrrrr_ _rr___rr_ _rr___rr_ _rr___rr_ _rrrrrrr_ _rrrrrrr_ _________ _________ _________STRING
HIGHtests/draw/svg/test_transform.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
HIGHtests/draw/svg/test_shapes.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
HIGHtests/draw/svg/test_clip.py0<style> @page { size: 9px } svg { display: block } </style> <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/STRING
Fake / Example Data62 hits · 62 pts
SeverityFileLineSnippetContext
LOWtests/test_text.py522 <body><strong>Lorem ipsum dolor<em>sit amet</em></strong>''')CODE
LOWtests/test_text.py510 'Lorem ipsum dolor<em>sit amet</em>',STRING
LOWtests/test_text.py511 'Lorem ipsum <em>dolorsit</em> amet',STRING
LOWtests/test_text.py512 'Lorem ipsum <em></em>dolorsit amet',STRING
LOWtests/test_text.py513 'Lorem ipsum<em> </em>dolorsit amet',STRING
LOWtests/test_text.py514 'Lorem ipsum<em> dolorsit</em> amet',STRING
LOWtests/test_text.py515 'Lorem ipsum <em>dolorsit </em>amet',STRING
LOWtests/test_boxes.py225 ('p', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py724 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py731 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py777 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py784 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py804 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py811 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py830 <p lang="fr"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py837 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py856 <p lang="fr_CH"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py863 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py882 <p lang="fr_CH_alt"><q>Lorem ipsum <q>dolor</q> sit amet</q></p>CODE
LOWtests/test_boxes.py889 ('q', 'Text', 'Lorem ipsum '),STRING
LOWtests/test_boxes.py917 <p>lorem ipsumCODE
LOWtests/test_boxes.py1239 <p>lorem ipsum dolorCODE
LOWtests/layout/test_block.py369 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py370 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py390 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py392 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py412 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py414 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py435 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py438 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py461 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py464 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py490 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py493 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py517 <p id=p1>Lorem ipsumCODE
LOWtests/layout/test_block.py519 <p id=p2>dolor sit ametCODE
LOWtests/layout/test_block.py537 <p>Lorem ipsumCODE
LOWtests/layout/test_block.py556 <p>Lorem ipsumCODE
LOWtests/layout/test_inline_block.py20 Ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py493 <p><em>Lorem Ipsum</em>is very <strong>coool</strong></p>CODE
LOWtests/layout/test_inline.py505 assert text == 'Lorem Ipsumis very coool'STRING
LOWtests/layout/test_inline.py544 <pre>Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py544 <pre>Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_inline.py566 <p>Lorem ipsum dolor sit amet,<br>CODE
LOWtests/layout/test_inline.py566 <p>Lorem ipsum dolor sit amet,<br>CODE
LOWtests/layout/test_column.py25 Ipsum dolor sit amet,CODE
LOWtests/layout/test_column.py56 Ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py347 Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py347 Lorem ipsum dolor sit amet,CODE
LOWtests/layout/test_float.py359 assert get_float_width(1000000) == len('Lorem ipsum dolor sit amet,') * 16STRING
LOWtests/layout/test_float.py359 assert get_float_width(1000000) == len('Lorem ipsum dolor sit amet,') * 16STRING
LOWtests/layout/test_flex.py808 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py808 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py813 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py813 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py832 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py832 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py835 Lorem ipsum dolor sit ametCODE
LOWtests/layout/test_flex.py835 Lorem ipsum dolor sit ametCODE
LOWtests/draw/test_before_after.py36 <p><q>Lorem ipsum <q>dolor</q> sit amet</q></p>STRING
2 more matches not shown…
Self-Referential Comments9 hits · 27 pts
SeverityFileLineSnippetContext
MEDIUMweasyprint/images.py665 # Define the coordinates of the starting and ending pointsCOMMENT
MEDIUMweasyprint/images.py694 # Define the center of the gradientCOMMENT
MEDIUMweasyprint/images.py760 # Define the coordinates of the gradient circlesCOMMENT
MEDIUMweasyprint/layout/preferred.py456 # Create the gridCOMMENT
MEDIUMweasyprint/layout/preferred.py475 # Define the total horizontal border spacingCOMMENT
MEDIUMweasyprint/layout/preferred.py515 # Define the intermediate content widthsCOMMENT
MEDIUMweasyprint/layout/column.py50 # Define the number of columns and their widthsCOMMENT
MEDIUMweasyprint/text/fonts.py136 # Create a pattern that matches font name.COMMENT
MEDIUMweasyprint/formatting_structure/boxes.py128 # Create a new instance without calling __init__: parameters areCOMMENT
Verbosity Indicators10 hits · 21 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/page.py759 # Step 1: page based back-referencesCOMMENT
LOWweasyprint/layout/page.py769 # Step 2: local countersCOMMENT
LOWweasyprint/layout/page.py788 # Step 3: targeted countersCOMMENT
LOWweasyprint/text/line_break.py477 # Step 5: Try to break word if it's too long for the lineCOMMENT
LOWweasyprint/text/fonts.py268 # Step 1: getting the default, we rely on Pango for this.COMMENT
LOWweasyprint/text/fonts.py269 # Step 2: @font-face font-variant, done in fonts.add_font_face.COMMENT
LOWweasyprint/text/fonts.py270 # Step 3: @font-face font-feature-settings, done in fonts.add_font_face.COMMENT
LOWweasyprint/text/fonts.py272 # Step 4: font-variant and OpenType features.COMMENT
LOWweasyprint/text/fonts.py317 # Step 5: incompatible non-OpenType features, already handled by Pango.COMMENT
LOWweasyprint/text/fonts.py319 # Step 6: font-feature-settings.COMMENT
Excessive Try-Catch Wrapping15 hits · 18 pts
SeverityFileLineSnippetContext
LOWtests/testing_utils.py115 except Exception: # pragma: no coverCODE
LOWweasyprint/html.py304 except Exception as exception:CODE
LOWweasyprint/document.py132 except Exception:CODE
MEDIUMweasyprint/document.py127def __del__(self):CODE
LOWweasyprint/images.py305 except Exception as svg_exception:CODE
LOWweasyprint/images.py311 except Exception as raster_exception:CODE
LOWweasyprint/images.py319 except Exception:CODE
LOWweasyprint/urls.py382 except Exception: # pragma: no coverCODE
LOWweasyprint/urls.py427 except Exception as exception:CODE
MEDIUMweasyprint/urls.py379def close(self):CODE
LOWweasyprint/svg/defs.py23 except Exception:CODE
LOWweasyprint/css/__init__.py1273 except Exception:CODE
LOWweasyprint/pdf/fonts.py168 except Exception as exception:CODE
LOWweasyprint/text/fonts.py171 except Exception as exception:CODE
LOWweasyprint/text/fonts.py188 except Exception as exc:CODE
Structural Annotation Overuse8 hits · 16 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/page.py759 # Step 1: page based back-referencesCOMMENT
LOWweasyprint/layout/page.py769 # Step 2: local countersCOMMENT
LOWweasyprint/layout/page.py788 # Step 3: targeted countersCOMMENT
LOWweasyprint/text/line_break.py477 # Step 5: Try to break word if it's too long for the lineCOMMENT
LOWweasyprint/text/fonts.py268 # Step 1: getting the default, we rely on Pango for this.COMMENT
LOWweasyprint/text/fonts.py272 # Step 4: font-variant and OpenType features.COMMENT
LOWweasyprint/text/fonts.py317 # Step 5: incompatible non-OpenType features, already handled by Pango.COMMENT
LOWweasyprint/text/fonts.py319 # Step 6: font-feature-settings.COMMENT
Over-Commented Block13 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_pdf.py81 ''').write_pdf()COMMENT
LOWtests/layout/test_position.py281 assert (p1.position_x, p1.position_y) == (0, 0)COMMENT
LOWweasyprint/__init__.py21#: command-line.COMMENT
LOWweasyprint/__init__.py41#: :param bool pdf_tags:COMMENT
LOWweasyprint/document.py41 #: ``'bottom'`` and ``'left'`` as keys, and values in CSS pixels.COMMENT
LOWweasyprint/document.py61 #: The anchor might be defined in another page,COMMENT
LOWweasyprint/css/__init__.py61 """Convenience function to get the computed styles for an element."""COMMENT
LOWweasyprint/layout/preferred.py381 # "The line breaking behavior of a replaced elementCOMMENT
LOWweasyprint/layout/column.py81COMMENT
LOWweasyprint/pdf/metadata.py41 #: Extracted from the ``<meta name=author>`` elements in HTMLCOMMENT
LOWweasyprint/pdf/metadata.py61 #: Extracted from the ``<meta name=dcterms.created>`` element in HTMLCOMMENT
LOWweasyprint/pdf/anchors.py321def add_annotations(links, matrix, document, pdf, page, annot_files, compress):COMMENT
LOWweasyprint/formatting_structure/build.py221 element, box, style, counter_values, target_collector, counter_style)COMMENT
AI Structural Patterns8 hits · 8 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py158CODE
LOWweasyprint/__init__.py287CODE
LOWweasyprint/__init__.py347CODE
LOWweasyprint/urls.py163CODE
LOWweasyprint/css/__init__.py1866CODE
LOWweasyprint/layout/block.py18CODE
LOWweasyprint/pdf/metadata.py32CODE
LOWweasyprint/text/fonts.py257CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/float.py172 # Assign locals to avoid slow attribute lookups.COMMENT
LOWweasyprint/layout/table.py363 # Set baseline to lowest bottom content edge.COMMENT
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWweasyprint/layout/table.py565 # If the height property has a bigger value, just add blank spaceCOMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py88__all__ = [CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWweasyprint/__init__.py379CODE