{"record":{"id":"6698deab6aed337c","repo":"stanfordnlp/CoreNLP","slug":"cannot-make-a-deleteleaf-out-of-argsbox-nodes","errorCode":null,"errorMessage":"Cannot make a DeleteLeaf out of \" + argsBox.nodes.size() + \" nodes","messagePattern":"Cannot make a DeleteLeaf 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":636,"sourceCode":"        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)) {\n        if (argsBox.nodes.size() < 2) {\n          throw new SsurgeonParseException(\"Cannot make a MergeNodes out of fewer than 2 nodes (got \" + argsBox.nodes.size() + \")\");\n        }\n        return new MergeNodes(argsBox.nodes, argsBox.annotations);\n      } else if (command.equalsIgnoreCase(RelabelNamedEdge.LABEL)) {","sourceCodeStart":618,"sourceCodeEnd":654,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/semgraph/semgrex/ssurgeon/Ssurgeon.java#L618-L654","documentation":"DeleteLeaf deletes exactly one leaf node, so parseEditLine requires argsBox.nodes.size() == 1. Any other count (0 or multiple -node flags) raises SsurgeonParseException('Cannot make a DeleteLeaf out of N nodes').","triggerScenarios":"A 'deleteleaf' edit line with no -node flag or with two or more -node flags.","commonSituations":"Copy-pasting delete rules and stacking -node flags; assuming deleteleaf accepts a node list like MergeNodes does; missing the -node flag when writing the rule from scratch.","solutions":["Supply exactly one -node <name> flag for deleteleaf.","Remove redundant -node flags; issue one deleteleaf edit per leaf to remove.","Confirm the node name was defined by an earlier pattern named group or addnode/edit in the same rule."],"exampleFix":"// before\ndeleteleaf\n// after\ndeleteleaf -node child","handlingStrategy":"validation","validationCode":"int count = countFlagOccurrences(line, \"-node\");\nif (line.startsWith(\"deleteleaf\") && count != 1)\n  throw new IllegalArgumentException(\"deleteleaf needs exactly one -node, got \" + count);","typeGuard":null,"tryCatchPattern":"try { parseEditLine(line, attrs, lang); } catch (SsurgeonParseException e) { if (e.getMessage().startsWith(\"Cannot make a DeleteLeaf\")) log.error(\"deleteleaf requires exactly one -node: \" + line); }","preventionTips":["Always pass exactly one -node to deleteleaf","Don't reuse multi-node ops as templates for deleteleaf","Confirm the named node is a leaf in matched graphs"],"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"}