Skip to content

Commit 0fefcb2

Browse files
committed
Refactor directory tree generation logic for better readability and maintainability
1 parent 1192108 commit 0fefcb2

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

tree_view_cli.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,26 +86,38 @@ def generate_tree(self):
8686
def _generate_tree(self, directory, prefix, depth, visited):
8787
if depth >= self.max_depth:
8888
return
89-
89+
9090
entries = sorted(directory.iterdir(), key=lambda x: (x.is_file(), x.name.lower()))
9191

9292
for i, entry in enumerate(entries):
9393
if self.should_ignore(entry):
9494
continue
95-
95+
9696
is_last = i == len(entries) - 1
97-
current_prefix = "└── " if is_last else "├── "
97+
current_prefix = self._get_current_prefix(is_last)
9898
print(f"{prefix}{current_prefix}{entry.name}")
99-
99+
100100
if entry.is_dir() and not entry.is_symlink():
101-
canonical_path = entry.resolve()
102-
if canonical_path in visited:
103-
print(f"{prefix}{' ' if is_last else '│ '}[Cyclic reference to {entry.name}]")
104-
continue
105-
106-
new_prefix = prefix + (" " if is_last else "│ ")
107-
new_visited = visited.union({canonical_path})
108-
self._generate_tree(entry, new_prefix, depth + 1, new_visited)
101+
self._handle_directory(entry, prefix, is_last, depth, visited)
102+
103+
def _get_current_prefix(self, is_last):
104+
return "└── " if is_last else "├── "
105+
106+
def _handle_directory(self, entry, prefix, is_last, depth, visited):
107+
canonical_path = entry.resolve()
108+
if canonical_path in visited:
109+
self._print_cyclic_reference(prefix, entry.name, is_last)
110+
return
111+
112+
new_prefix = self._get_new_prefix(prefix, is_last)
113+
new_visited = visited.union({canonical_path})
114+
self._generate_tree(entry, new_prefix, depth + 1, new_visited)
115+
116+
def _print_cyclic_reference(self, prefix, name, is_last):
117+
print(f"{prefix}{' ' if is_last else '│ '}[Cyclic reference to {name}]")
118+
119+
def _get_new_prefix(self, prefix, is_last):
120+
return prefix + (" " if is_last else "│ ")
109121

110122
def main():
111123
parser = argparse.ArgumentParser(description="Generate a directory tree.")

0 commit comments

Comments
 (0)