code: def _parse_comment_trail(self):  # type: () -> Tuple[str, str, str]
          
          if self.end():
              return "", "", ""
  
          comment = ""
          comment_ws = ""
          self.mark()
  
          while True:
              c = self._current
  
              if c == "\n":
                  break
              elif c == "#":
                  comment_ws = self.extract()
  
                  self.mark()
                  self.inc()  # Skip #
  
                  # The comment itself
                  while not self.end() and not self._current.is_nl() and self.inc():
                      pass
  
                  comment = self.extract()
                  self.mark()
  
                  break
              elif c in " \t\r":
                  self.inc()
              else:
                  raise self.parse_error(UnexpectedCharError, c)
  
              if self.end():
                  break
  
          while self._current.is_spaces() and self.inc():
              pass
  
          if self._current == "\r":
              self.inc()
  
          if self._current == "\n":
              self.inc()
  
          trail = ""
          if self._idx != self._marker or self._current.is_ws():
              trail = self.extract()
  
          return comment_ws, comment, trail
docs: Returns (comment_ws, comment, trail)
          If there is no comment, comment_ws and comment will
          simply be empty.