docs: def decode_coords(ds, gridfile=None):
          """
          Reimplemented to set the mesh variables as coordinates
  
          Parameters
          ----------
          %(CFDecoder.decode_coords.parameters)s
  
          Returns
          -------
          %(CFDecoder.decode_coords.returns)s"""
          extra_coords = set(ds.coords)
          for var in six.itervalues(ds.variables):
              if 'mesh' in var.attrs:
                  mesh = var.attrs['mesh']
                  if mesh not in extra_coords:
                      extra_coords.add(mesh)
                      try:
                          mesh_var = ds.variables[mesh]
                      except KeyError:
                          warn('Could not find mesh variable %s' % mesh)
                          continue
                      if 'node_coordinates' in mesh_var.attrs:
                          extra_coords.update(
                              mesh_var.attrs['node_coordinates'].split())
                      if 'face_node_connectivity' in mesh_var.attrs:
                          extra_coords.add(
                              mesh_var.attrs['face_node_connectivity'])
          if gridfile is not None and not isinstance(gridfile, xr.Dataset):
              gridfile = open_dataset(gridfile)
              ds.update({k: v for k, v in six.iteritems(gridfile.variables)
                         if k in extra_coords})
          if xr_version < (0, 11):
              ds.set_coords(extra_coords.intersection(ds.variables),
                            inplace=True)
          else:
              ds._coord_names.update(extra_coords.intersection(ds.variables))
          return ds