2026-03-29 03:09:43 -05:00
|
|
|
# Python imports
|
|
|
|
|
|
|
|
|
|
# Lib imports
|
|
|
|
|
|
|
|
|
|
# Application imports
|
|
|
|
|
from .fold_types import FOLD_NODES
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-29 14:33:40 -05:00
|
|
|
def visit_node(fold_types, node, ranges):
|
|
|
|
|
if node.type in fold_types:
|
|
|
|
|
start_line = node.start_point[0]
|
|
|
|
|
end_line = node.end_point[0]
|
|
|
|
|
|
|
|
|
|
if end_line > start_line:
|
|
|
|
|
ranges.append({
|
|
|
|
|
"start_line": start_line,
|
|
|
|
|
"end_line": end_line,
|
|
|
|
|
"id": (start_line, end_line, node.type),
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
for child in node.children:
|
|
|
|
|
visit_node(fold_types, child, ranges)
|
|
|
|
|
|
2026-03-29 03:09:43 -05:00
|
|
|
def get_folding_ranges(lang_name: str, ast):
|
|
|
|
|
root = ast.root_node
|
|
|
|
|
fold_types = FOLD_NODES.get(lang_name, set())
|
|
|
|
|
ranges = []
|
|
|
|
|
|
2026-03-29 14:33:40 -05:00
|
|
|
visit_node(fold_types, root, ranges)
|
2026-03-29 03:09:43 -05:00
|
|
|
return ranges
|
2026-03-29 14:33:40 -05:00
|
|
|
|