def _write_entry_lines(self, tw: TerminalWriter) -> None: """Write the source code portions of a list of traceback entries with syntax highlighting. Usually entries are lines like these: " x = 1" "> assert x == 2" "E assert 1 == 2" This function takes care of rendering the "source" portions of it (the lines without the "E" prefix) using syntax highlighting, taking care to not highlighting the ">" character, as doing so might break line continuations. """ if not self.lines: return # separate indents and source lines that are not failures: we want to # highlight the code but not the indentation, which may contain markers # such as "> assert 0" fail_marker = "{} ".format(FormattedExcinfo.fail_marker) indent_size = len(fail_marker) indents = [] source_lines = [] failure_lines = [] seeing_failures = False for line in self.lines: is_source_line = not line.startswith(fail_marker) if is_source_line: assert not seeing_failures, ( "Unexpected failure lines between source lines:\n" + "\n".join(self.lines) ) if self.style == "value": source_lines.append(line) else: indents.append(line[:indent_size]) source_lines.append(line[indent_size:]) else: seeing_failures = True failure_lines.append(line) tw._write_source(source_lines, indents) # failure lines are always completely red and bold for line in failure_lines: tw.line(line, bold=True, red=True)
def _write_entry_lines(self, tw: TerminalWriter) -> None: """Write the source code portions of a list of traceback entries with syntax highlighting. Usually entries are lines like these: " x = 1" "> assert x == 2" "E assert 1 == 2" This function takes care of rendering the "source" portions of it (the lines without the "E" prefix) using syntax highlighting, taking care to not highlighting the ">" character, as doing so might break line continuations. """ if not self.lines: return # separate indents and source lines that are not failures: we want to # highlight the code but not the indentation, which may contain markers # such as "> assert 0" fail_marker = f"{FormattedExcinfo.fail_marker} " indent_size = len(fail_marker) indents: List[str] = [] source_lines: List[str] = [] failure_lines: List[str] = [] for index, line in enumerate(self.lines): is_failure_line = line.startswith(fail_marker) if is_failure_line: # from this point on all lines are considered part of the failure failure_lines.extend(self.lines[index:]) break else: if self.style == "value": source_lines.append(line) else: indents.append(line[:indent_size]) source_lines.append(line[indent_size:]) tw._write_source(source_lines, indents) # failure lines are always completely red and bold for line in failure_lines: tw.line(line, bold=True, red=True)
def _write_entry_lines(self, tw: TerminalWriter) -> None: """Writes the source code portions of a list of traceback entries with syntax highlighting. Usually entries are lines like these: " x = 1" "> assert x == 2" "E assert 1 == 2" This function takes care of rendering the "source" portions of it (the lines without the "E" prefix) using syntax highlighting, taking care to not highlighting the ">" character, as doing so might break line continuations. """ indent_size = 4 def is_fail(line): return line.startswith("{} ".format( FormattedExcinfo.fail_marker)) if not self.lines: return # separate indents and source lines that are not failures: we want to # highlight the code but not the indentation, which may contain markers # such as "> assert 0" indents = [] source_lines = [] for line in self.lines: if not is_fail(line): indents.append(line[:indent_size]) source_lines.append(line[indent_size:]) tw._write_source(source_lines, indents) # failure lines are always completely red and bold for line in (x for x in self.lines if is_fail(x)): tw.line(line, bold=True, red=True)