anchor.diff:        resources = sel;
       }
   
  -    ws.Project project = resources.firstWhere((r) => r is ws.Project, orElse: () => null);
  -    if (project != null) {
  -      _removeProject(project);
  -      return;
  -    }
  -
       String message;
       if (resources.length == 1) {
         message = "Do you really want to delete '${resources.first.name}'?\nThis will permanently delete this file from disk and cannot be undone.";
  
positive.code: 
    void _removeFileReference(ws.File file) {
      spark.workspace.unlink(file);
    }
  
    String get category => 'resource';
  
negative.code:     });
    }
  
    String get category => 'resource';
  
    bool appliesTo(Object object) => _isResourceList(object) &&
        !_hasTopLevelResource(object);
  }
  
  class ProjectRemoveAction extends SparkAction implements ContextAction {
    ProjectRemoveAction(Spark spark) : super(spark, "project-remove", "Remove");
  
    void _invoke([List<ws.Resource> resources]) {
      ws.Project project = resources.first;
      // If project is on sync filesystem, it can only be deleted.
      // It can't be unlinked.
      if (project.isSyncResource()) {
  