{"record":{"id":"48a54c89f951ea0f","repo":"languagetool-org/languagetool","slug":"set-only-weekday-and-date-for-ymddatecheck","errorCode":null,"errorMessage":"Set only 'weekDay' and 'date' for \" + YMDDateCheckFilter.class.getSimpleName()","messagePattern":"Set only 'weekDay' and 'date' for \" \\+ YMDDateCheckFilter\\.class\\.getSimpleName\\(\\)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/YMDDateCheckFilter.java","lineNumber":39,"sourceCode":"import org.languagetool.AnalyzedTokenReadings;\nimport org.languagetool.rules.RuleMatch;\nimport org.languagetool.rules.YMDDateHelper;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * Date filter that expects a 'date' argument in the format 'yyyy-mm-dd'.\n * @since 3.2\n */\npublic class YMDDateCheckFilter extends DateCheckFilter {\n\n  private final YMDDateHelper ymdDateHelper = new YMDDateHelper();\n\n  @Override\n  public RuleMatch acceptRuleMatch(RuleMatch match, Map<String, String> args, int patternTokenPos, AnalyzedTokenReadings[] patternTokens, List<Integer> tokenPositions) {\n    if (args.containsKey(\"year\") || args.containsKey(\"month\") || args.containsKey(\"day\")) {\n      throw new RuntimeException(\"Set only 'weekDay' and 'date' for \" + YMDDateCheckFilter.class.getSimpleName());\n    }\n    return super.acceptRuleMatch(match, ymdDateHelper.parseDate(args), patternTokenPos, patternTokens, tokenPositions);\n  }\n\n}\n","sourceCodeStart":21,"sourceCodeEnd":45,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/YMDDateCheckFilter.java#L21-L45","documentation":"YMDDateCheckFilter.acceptRuleMatch validates which parameters a regex/date rule may set. This filter only supports the 'weekDay' and 'date' arguments; if the rule XML passes 'year', 'month' or 'day' (which belong to other date filters), it throws a RuntimeException naming the filter class.","triggerScenarios":"A Grammar/regex rule XML uses <filter class=\"...YMDDateCheckFilter\" args=\"...\"/> but includes year=, month= or day= in its filter arguments, e.g. copied from a DMYDateCheckFilter-style rule.","commonSituations":"Copy-pasting filter args between date-check rule variants; writing a new English date rule and mixing filter argument conventions; renaming/merging date rules without updating args.","solutions":["Remove year/month/day from the rule's filter args, keeping only weekDay and/or date","If the rule needs year/month/day matching, use the date filter class designed for those arguments","Re-run the rule against a test sentence after editing the XML"],"exampleFix":"<!-- before -->\n<filter class=\"org.languagetool.rules.en.YMDDateCheckFilter\" args=\"date:\\d year:(\\d+) month:(\\d+) day:(\\d+)\"/>\n<!-- after -->\n<filter class=\"org.languagetool.rules.en.YMDDateCheckFilter\" args=\"date:\\d weekDay:MONDAY|TUESDAY\"/>","handlingStrategy":"validation","validationCode":"// validate rule XML filter args before loading rules\nSet<String> allowed = Set.of(\"weekDay\", \"date\");\nMap<String,String> args = parseFilterArgs(xmlFilterArgs);\nargs.keySet().retainAll(Set.of(\"year\",\"month\",\"day\",\"weekDay\",\"date\"));\nif (args.keySet().stream().anyMatch(k -> !allowed.contains(k))) {\n  throw new IllegalStateException(\"YMDDateCheckFilter accepts only weekDay/date\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  rule = language.getRuleById(\"EN_YMD_DATE\", sentence);\n  tool.check(sentence);\n} catch (RuntimeException e) {\n  if (e.getMessage().contains(\"Set only 'weekDay' and 'date'\")) {\n    log.error(\"rule XML uses unsupported filter args: \" + e.getMessage());\n  } else throw e;\n}","preventionTips":["Only use weekDay/date with YMDDateCheckFilter; year/month/day belong to other filters","Lint rule XML filter args against each filter class's accepted keys","Test each new/edited date rule with a sample sentence before committing"],"tags":["java","rule-configuration","validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}