Path 1: 25 calls (0.68)

4 (25)

'│' (25)

Style (13) 'repr.indent' (12)

Text (25)

1def with_indent_guides(
2        self,
3        indent_size: Optional[int] = None,
4        *,
5        character: str = "│",
6        style: StyleType = "dim green",
7    ) -> "Text":
8        """Adds indent guide lines to text.
9
10        Args:
11            indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12            character (str, optional): Character to use for indentation. Defaults to "│".
13            style (Union[Style, str], optional): Style of indent guides.
14
15        Returns:
16            Text: New text with indentation guides.
17        """
18
19        _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21        text = self.copy()
22        text.expand_tabs()
23        indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25        re_indent = re.compile(r"^( *)(.*)$")
26        new_lines: List[Text] = []
27        add_line = new_lines.append
28        blank_lines = 0
29        for line in text.split(allow_blank=True):
30            match = re_indent.match(line.plain)
31            if not match or not match.group(2):
32                blank_lines += 1
33                continue
34            indent = match.group(1)
35            full_indents, remaining_space = divmod(len(indent), _indent_size)
36            new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37            line.plain = new_indent + line.plain[len(new_indent) :]
38            line.stylize(style, 0, len(new_indent))
39            if blank_lines:
40                new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41                blank_lines = 0
42            add_line(line)
43        if blank_lines:
44            new_lines.extend([Text("", style=style)] * blank_lines)
45
46        new_text = text.blank_copy("\n").join(new_lines)
47        return new_text
            

Path 2: 7 calls (0.19)

4 (7)

'│' (7)

Style (7)

Text (7)

1def with_indent_guides(
2        self,
3        indent_size: Optional[int] = None,
4        *,
5        character: str = "│",
6        style: StyleType = "dim green",
7    ) -> "Text":
8        """Adds indent guide lines to text.
9
10        Args:
11            indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12            character (str, optional): Character to use for indentation. Defaults to "│".
13            style (Union[Style, str], optional): Style of indent guides.
14
15        Returns:
16            Text: New text with indentation guides.
17        """
18
19        _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21        text = self.copy()
22        text.expand_tabs()
23        indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25        re_indent = re.compile(r"^( *)(.*)$")
26        new_lines: List[Text] = []
27        add_line = new_lines.append
28        blank_lines = 0
29        for line in text.split(allow_blank=True):
30            match = re_indent.match(line.plain)
31            if not match or not match.group(2):
32                blank_lines += 1
33                continue
34            indent = match.group(1)
35            full_indents, remaining_space = divmod(len(indent), _indent_size)
36            new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37            line.plain = new_indent + line.plain[len(new_indent) :]
38            line.stylize(style, 0, len(new_indent))
39            if blank_lines:
40                new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41                blank_lines = 0
42            add_line(line)
43        if blank_lines:
44            new_lines.extend([Text("", style=style)] * blank_lines)
45
46        new_text = text.blank_copy("\n").join(new_lines)
47        return new_text
            

Path 3: 4 calls (0.11)

4 (3) None (1)

'│' (4)

Style (3) 'dim green' (1)

Text (4)

1def with_indent_guides(
2        self,
3        indent_size: Optional[int] = None,
4        *,
5        character: str = "│",
6        style: StyleType = "dim green",
7    ) -> "Text":
8        """Adds indent guide lines to text.
9
10        Args:
11            indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12            character (str, optional): Character to use for indentation. Defaults to "│".
13            style (Union[Style, str], optional): Style of indent guides.
14
15        Returns:
16            Text: New text with indentation guides.
17        """
18
19        _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21        text = self.copy()
22        text.expand_tabs()
23        indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25        re_indent = re.compile(r"^( *)(.*)$")
26        new_lines: List[Text] = []
27        add_line = new_lines.append
28        blank_lines = 0
29        for line in text.split(allow_blank=True):
30            match = re_indent.match(line.plain)
31            if not match or not match.group(2):
32                blank_lines += 1
33                continue
34            indent = match.group(1)
35            full_indents, remaining_space = divmod(len(indent), _indent_size)
36            new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37            line.plain = new_indent + line.plain[len(new_indent) :]
38            line.stylize(style, 0, len(new_indent))
39            if blank_lines:
40                new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41                blank_lines = 0
42            add_line(line)
43        if blank_lines:
44            new_lines.extend([Text("", style=style)] * blank_lines)
45
46        new_text = text.blank_copy("\n").join(new_lines)
47        return new_text
            

Path 4: 1 calls (0.03)

4 (1)

'│' (1)

Style (1)

Text (1)

1def with_indent_guides(
2        self,
3        indent_size: Optional[int] = None,
4        *,
5        character: str = "│",
6        style: StyleType = "dim green",
7    ) -> "Text":
8        """Adds indent guide lines to text.
9
10        Args:
11            indent_size (Optional[int]): Size of indentation, or None to auto detect. Defaults to None.
12            character (str, optional): Character to use for indentation. Defaults to "│".
13            style (Union[Style, str], optional): Style of indent guides.
14
15        Returns:
16            Text: New text with indentation guides.
17        """
18
19        _indent_size = self.detect_indentation() if indent_size is None else indent_size
20
21        text = self.copy()
22        text.expand_tabs()
23        indent_line = f"{character}{' ' * (_indent_size - 1)}"
24
25        re_indent = re.compile(r"^( *)(.*)$")
26        new_lines: List[Text] = []
27        add_line = new_lines.append
28        blank_lines = 0
29        for line in text.split(allow_blank=True):
30            match = re_indent.match(line.plain)
31            if not match or not match.group(2):
32                blank_lines += 1
33                continue
34            indent = match.group(1)
35            full_indents, remaining_space = divmod(len(indent), _indent_size)
36            new_indent = f"{indent_line * full_indents}{' ' * remaining_space}"
37            line.plain = new_indent + line.plain[len(new_indent) :]
38            line.stylize(style, 0, len(new_indent))
39            if blank_lines:
40                new_lines.extend([Text(new_indent, style=style)] * blank_lines)
41                blank_lines = 0
42            add_line(line)
43        if blank_lines:
44            new_lines.extend([Text("", style=style)] * blank_lines)
45
46        new_text = text.blank_copy("\n").join(new_lines)
47        return new_text