Coverage for metrics / lloc / python.py: 100%
9 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
1"""LLOC (Logical Lines of Code) for Python."""
3from __future__ import annotations
5_PY_LLOC_TYPES = {
6 # Simple statements
7 "expression_statement", "return_statement", "pass_statement",
8 "break_statement", "continue_statement", "raise_statement",
9 "assert_statement", "delete_statement", "global_statement",
10 "nonlocal_statement", "import_statement", "import_from_statement",
11 "future_import_statement", "type_alias_statement",
12 # Compound statement headers
13 "if_statement", "elif_clause", "else_clause",
14 "for_statement", "while_statement",
15 "try_statement", "except_clause", "finally_clause",
16 "with_statement",
17 "function_definition", "class_definition",
18 "match_statement", "case_clause",
19 # Decorators
20 "decorator",
21}
24def count_lloc(root) -> int:
25 """Count logical lines of code in a Python AST."""
26 count = 0
27 if root.type in _PY_LLOC_TYPES:
28 count += 1
29 for child in root.children:
30 count += count_lloc(child)
31 return count