2011-10-19 1 views
0

J'essaie de créer une règle Checkstyle personnalisée qui sera signalée comme une erreur lorsque les développeurs utiliseront @Ignore sans commentaire. Par conséquent, je suis à la recherche d'une expression régulière qui correspond au scénario suivant:Expression Regex pour que Checkstyle corresponde aux commentaires @Ignore manquants

@Ignore 
@Test 
public void someTest() { 
    ... 
} 

et celui-ci:

@Ignore @Test //or @Test @Ignore 
public void someTest() { 
    ... 
} 

mais ne correspondrait pas à ce scénario:

@Ignore("some comment detailing why this test was ignored") 
@Test 
public void someTest() { 
    ... 
} 

ou celui-ci :

@Test 
public void someTest() { 
    ... 
} 

Donc, fondamentalement, il s'agit d'une expression régulière correspondant à @Ignore mais seulement lorsque son présent et seulement quand il est présent sans commentaires qualifiants, par exemple. @Ignore("commnent here")

+0

Quel moteur regex utilisez-vous? Les solutions peuvent différer un peu en fonction de cela (comme expliqué dans la [info tags Regex] (http://stackoverflow.com/tags/regex/info)) –

+0

@Tim, je suppose que c'est Java –

Répondre

1
@Ignore(?![ \t]*\() 

correspond à @Ignore que si elle est pas suivie d'une parenthèse d'ouverture.

Explication:

@Ignore # Match "@Ignore" 
(?!  # Assert that we can't match... 
[ \t]* # optional spaces/tabs 
\(  # followed by a (at the current position 
)   # End of lookahead 

En Java:

Pattern regex = Pattern.compile("@Ignore(?![ \\t]*\\()"); 
+0

Merci Tim. On dirait que cela fonctionnera pour mon exemple original ci-dessus. Cependant, comme Kent l'a souligné, il y a un autre scénario que j'ai oublié (maintenant ajouté à ma question) –

+0

@Chris: OK, j'ai réécrit ma réponse. Est-ce que cela fonctionne pour vous? Plus précisément, est-il possible que des espaces/tabulations ou d'autres espaces apparaissent entre '@ Ignore' et le commentaire? –

+0

oui il est possible que les espaces soient entre '@ Ignore' et le commentaire. Par exemple. '@Ignore (" un commentaire ")' est valide (par exemple ne devrait pas correspondre) –

1

vous pouvez essayer ceci:

@Ignore\s*$ 

fait pour test JUnit, annotation:

@Test @Ignore 
public void testXXXX(){} 

également valide. donc cela doit être adapté aussi.

mis à jour

cela devrait être ok:

@Ignore\s*(?!\() 
+0

Merci Kent. J'aime la simplicité de la tienne, sauf que ça ne marche pas quand on a '@Ignore @Test '. –

+0

voir ma réponse mise à jour – Kent

+0

Je suppose que vous faites une révision de code. avec un IDE peut-être? IDE a généralement des fonctionnalités de formatage/checkStyle de code. vous pouvez définir l'ajout d'une nouvelle ligne après l'annotation. (une annotation par ligne) ce n'est pas seulement pour cette question, mais aussi pour rendre le code plus lisible. – Kent

Questions connexes