docs: def _check_file_syntax(filename, temp_dir, override_lang=None, enforce=True):
      """
      Checks that the code in FILENAME parses, attempting to autodetect
      the language if necessary.
  
      Raises IOError if the file cannot be read.
  
      Raises DXSyntaxError if there is a problem and "enforce" is True.
      """
      def check_python(filename):
          # Generate a semi-recognizable name to write the pyc to. Of
          # course it's possible that different files being scanned could
          # have the same basename, so this path won't be unique, but the
          # checks don't run concurrently so this shouldn't cause any
          # problems.
          pyc_path = os.path.join(temp_dir, os.path.basename(filename) + ".pyc")
          try:
              if USING_PYTHON2:
                  filename = filename.encode(sys.getfilesystemencoding())
              py_compile.compile(filename, cfile=pyc_path, doraise=True)
          finally:
              try:
                  os.unlink(pyc_path)
              except OSError:
                  pass
      def check_bash(filename):
          if platform.system() == 'Windows':
              logging.warn(
                      'Skipping bash syntax check due to unavailability of bash on Windows.')
          else:
              subprocess.check_output(["/bin/bash", "-n", filename], stderr=subprocess.STDOUT)
  
      if override_lang == 'python2.7':
          checker_fn = check_python
      elif override_lang == 'bash':
          checker_fn = check_bash
      elif filename.endswith('.py'):
          checker_fn = check_python
      elif filename.endswith('.sh'):
          checker_fn = check_bash
      else:
          # Ignore other kinds of files.
          return
  
      # Do a test read of the file to catch errors like the file not
      # existing or not being readable.
      open(filename)
  
      try:
          checker_fn(filename)
      except subprocess.CalledProcessError as e:
          print(filename + " has a syntax error! Interpreter output:", file=sys.stderr)
          for line in e.output.strip("\n").split("\n"):
              print("  " + line.rstrip("\n"), file=sys.stderr)
          if enforce:
              raise DXSyntaxError(filename + " has a syntax error")
      except py_compile.PyCompileError as e:
          print(filename + " has a syntax error! Interpreter output:", file=sys.stderr)
          print("  " + e.msg.strip(), file=sys.stderr)
          if enforce:
              raise DXSyntaxError(e.msg.strip())