code: def parse(self, filename: str, language: Optional[str]=None,
                contents: Optional[str]=None, mode: Optional[ModeType]=None,
                timeout: Optional[int]=None) -> ResultContext:
          
  
          # TODO: handle syntax errors
          contents = self._get_contents(contents, filename)
          request = ParseRequest(filename=os.path.basename(filename),
                                 content=contents, mode=mode,
                                 language=self._scramble_language(language))
          response = self._stub_v2.Parse(request, timeout=timeout)
          return ResultContext(response)
docs: Queries the Babelfish server and receives the UAST response for the specified
          file.
  
          :param filename: The path to the file. Can be arbitrary if contents \
                           is not None.
          :param language: The programming language of the file. Refer to \
                           https://doc.bblf.sh/languages.html for the list of \
                           currently supported languages. None means autodetect.
          :param contents: The contents of the file. IF None, it is read from \
                           filename.
          :param mode:     UAST transformation mode.
          :param timeout: The request timeout in seconds.
          :type filename: str
          :type language: str
          :type contents: str
          :type timeout: float
          :return: UAST object.