code: def separate_trailing_comments(lines: List[str]) -> List[Tuple[int, str]]:
      
  
      enumerated_lines = list(enumerate(lines, 1))
      i = 0
      while i < len(enumerated_lines):
          (n, code_line) = enumerated_lines[i]
          if not line_is_comment(code_line):
              (code_part, comment_part) = split_trailing_comment(code_line)
              if comment_part is not None:
                  enumerated_lines[i] = (n, comment_part)
                  enumerated_lines.insert(i + 1, (n, code_part))
          i += 1
  
      return enumerated_lines
docs: Given a list of numbered Fortran source code lines, i.e., pairs of the
         form (n, code_line) where n is a line number and code_line is a line
         of code, separate_trailing_comments() behaves as follows: for each
         pair (n, code_line) where code_line can be broken into two parts -- a
         code portion code_part and a trailing comment portion comment_part, such
         that code_part and comment_part are both non-empty, it replaces the
         pair (n, code_line) by two pairs (n, comment_part) and (n, code_part).
         The return value is the resulting list of numbered lines.