{"record":{"id":"4a02a852863e64d7","repo":"stanfordnlp/CoreNLP","slug":"cannot-make-a-deletegraphfromnode-out-of-argsb","errorCode":null,"errorMessage":"Cannot make a DeleteGraphFromNode out of \" + argsBox.nodes.size() + \" nodes","messagePattern":"Cannot make a DeleteGraphFromNode out of \" \\+ argsBox\\.nodes\\.size\\(\\) \\+ \" nodes","errorType":"exception","errorClass":"SsurgeonParseException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/semgraph/semgrex/ssurgeon/Ssurgeon.java","lineNumber":631,"sourceCode":"      if (command.equalsIgnoreCase(AddDep.LABEL)) {\n        if (argsBox.reln == null) {\n          throw new SsurgeonParseException(\"Relation not specified for AddDep\");\n        }\n        GrammaticalRelation reln = GrammaticalRelation.valueOf(language, argsBox.reln);\n        return new AddDep(argsBox.govNodeName, reln, argsBox.annotations, argsBox.position);\n      } else if (command.equalsIgnoreCase(AddNode.LABEL)) {\n        return AddNode.createAddNode(argsBox.nodeString, argsBox.name);\n      } else if (command.equalsIgnoreCase(AddEdge.LABEL)) {\n        if (argsBox.reln == null) {\n          throw new SsurgeonParseException(\"Relation not specified for AddEdge\");\n        }\n        GrammaticalRelation reln = GrammaticalRelation.valueOf(language, argsBox.reln);\n        return new AddEdge(argsBox.govNodeName, argsBox.dep, reln, argsBox.weight);\n      } else if (command.equalsIgnoreCase(ReattachNamedEdge.LABEL)) {\n          return new ReattachNamedEdge(argsBox.edge, argsBox.govNodeName, argsBox.dep);\n      } else if (command.equalsIgnoreCase(DeleteGraphFromNode.LABEL)) {\n        if (argsBox.nodes.size() != 1) {\n          throw new SsurgeonParseException(\"Cannot make a DeleteGraphFromNode out of \" + argsBox.nodes.size() + \" nodes\");\n        }\n        return new DeleteGraphFromNode(argsBox.nodes.get(0));\n      } else if (command.equalsIgnoreCase(DeleteLeaf.LABEL)) {\n        if (argsBox.nodes.size() != 1) {\n          throw new SsurgeonParseException(\"Cannot make a DeleteLeaf out of \" + argsBox.nodes.size() + \" nodes\");\n        }\n        return new DeleteLeaf(argsBox.nodes.get(0));\n      } else if (command.equalsIgnoreCase(EditNode.LABEL)) {\n        if (argsBox.nodes.size() != 1) {\n          throw new SsurgeonParseException(\"Cannot make an EditNode out of \" + argsBox.nodes.size() + \" nodes.  Please use exactly one -node\");\n        }\n        return new EditNode(argsBox.nodes.get(0), argsBox.annotations, argsBox.updateMorphoFeatures, argsBox.remove, argsBox.removeMorphoFeatures);\n      } else if (command.equalsIgnoreCase(Lemmatize.LABEL)) {\n        if (argsBox.nodes.size() != 1) {\n          throw new SsurgeonParseException(\"Cannot make a Lemmatize out of \" + argsBox.nodes.size() + \" nodes.  Please use exactly one -node\");\n        }\n        return new Lemmatize(argsBox.nodes.get(0), language);\n      } else if (command.equalsIgnoreCase(MergeNodes.LABEL)) {","sourceCodeStart":613,"sourceCodeEnd":649,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/semgraph/semgrex/ssurgeon/Ssurgeon.java#L613-L649","documentation":"DeleteGraphFromNode removes the graph rooted at exactly one named node, so parseEditLine enforces that argsBox.nodes contains exactly 1 entry (from -node flags). Otherwise SsurgeonParseException('Cannot make a DeleteGraphFromNode out of N nodes') is thrown.","triggerScenarios":"A 'deletegraphfromnode' edit line with zero -node flags or more than one -node flag (nodes.size() != 1).","commonSituations":"Reusing a multi-node arg list from a MergeNodes rule; forgetting the -node flag entirely; a paste-in that kept two -node flags from different rules.","solutions":["Provide exactly one -node <name> flag on the deletegraphfromnode line.","Remove extra -node flags; additional nodes must be handled by separate edit lines.","If you meant to delete from multiple roots, split into multiple deletegraphfromnode edits in the rule."],"exampleFix":"// before\ndeletegraphfromnode -node a -node b\n// after\ndeletegraphfromnode -node a\ndeletegraphfromnode -node b","handlingStrategy":"validation","validationCode":"int count = countFlagOccurrences(line, \"-node\");\nif (line.startsWith(\"deletegraphfromnode\") && count != 1)\n  throw new IllegalArgumentException(\"deletegraphfromnode needs exactly one -node, got \" + count);","typeGuard":null,"tryCatchPattern":"try { parseEditLine(line, attrs, lang); } catch (SsurgeonParseException e) { if (e.getMessage().startsWith(\"Cannot make a DeleteGraphFromNode\")) log.error(\"Fix -node count in: \" + line); }","preventionTips":["One -node flag per deletegraphfromnode edit","Split multi-node deletions into separate edits","Lint -node flag counts per operation type"],"tags":["parsing","ssurgeon","argument-count"],"backgroundTag":"invalid-argument-value","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}