From 800d7879f12cfc8d773b63045207b014583d3c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Fri, 12 Apr 2024 14:39:06 +0200 Subject: [PATCH] Make variable naming conventions skip unnamed variables Fix #4954 --- .../net/sourceforge/pmd/lang/java/ast/ASTVariableId.java | 9 +++++++++ .../codestyle/FormalParameterNamingConventionsRule.java | 4 ++++ .../codestyle/LocalVariableNamingConventionsRule.java | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableId.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableId.java index e21de7a2b5b..01ea8e30758 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableId.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTVariableId.java @@ -127,6 +127,15 @@ private ModifierOwner getModifierOwnerParent() { return (ModifierOwner) parent; } + /** + * Return true if this variable has no name. The name is then equal to {@code "_"}. + * A variable declaration with this name does not actually declare a variable in + * the current scope. + */ + public boolean isUnnamed() { + return "_".equals(name); + } + /** Returns the name of the variable. */ public String getName() { return name; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FormalParameterNamingConventionsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FormalParameterNamingConventionsRule.java index 6c81af4e234..57cd8ee6c80 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FormalParameterNamingConventionsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/FormalParameterNamingConventionsRule.java @@ -39,6 +39,10 @@ public FormalParameterNamingConventionsRule() { @Override public Object visit(ASTVariableId node, Object data) { + if (node.isUnnamed()) { + // unnamed variables do not have to match the regexes. + return null; + } if (node.isLambdaParameter()) { checkMatches(node, node.isTypeInferred() ? lambdaParamRegex : explicitLambdaParamRegex, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/LocalVariableNamingConventionsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/LocalVariableNamingConventionsRule.java index eb5880b8c60..928ed24a475 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/LocalVariableNamingConventionsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/LocalVariableNamingConventionsRule.java @@ -38,6 +38,10 @@ public LocalVariableNamingConventionsRule() { @Override public Object visit(ASTVariableId node, Object data) { + if (node.isUnnamed()) { + // unnamed variables do not have to match the regexes. + return null; + } if (node.isExceptionBlockParameter()) { checkMatches(node, exceptionBlockParameterRegex, data);