[Codenarc-user] Writing CodeNarc rules
Brought to you by:
chrismair
|
From: <AGo...@cf...> - 2016-08-18 19:32:26
|
Hello all.
I am trying to write a CodeNarc rule and am struggling with just how to
use the AST code visitor support (or anything else) to get were I want to
go. Does anyone know of a resource that might be helpful and/or give me
some firsthand assistance? I have looked at all of the obvious ones from
the CodeNarc site as well as the distributed rules, google searches, etc.
I am trying to write a rule that checks to make sure the body of
particular methods consists entirely of a try/catch block where Exception
is caught. I have gotten as far as verifying the first statement in the
method is a try/catch statement using an AbstractMethodVisitor but am
struggling a bit in figuring out how to make sure there is no statement
following it in the method.
This is where I am on my astVisitorClass.
class MyTestAstVisitor extends AbstractMethodVisitor {
@Override
void visitMethod(MethodNode methodNode) {
if (Modifier.isPublic(methodNode.modifiers)) {
if (AstUtil.isEmptyBlock(methodNode.code)) {
addViolation(methodNode, "Action ${methodNode.name} in ${
currentClassName} is empty")
} else {
def tryCatchStatement = methodNode.firstStatement
if (!(tryCatchStatement instanceof TryCatchStatement)) {
addViolation(methodNode, "First statement of action
${methodNode.name} in ${currentClassName} is ${tryCatchStatement.class.
name}")
} else {
// try/catch statement, but nothing more?
}
}
}
}
}
I am running with CodeNarc 0.22 and Grails 2.2.4/Groovy 2.0.8.
Thanks for any insight.
-Andrew Goodspeed
NOTICE: This message and all attachments transmitted with it may contain sensitive and/or confidential information intended solely for the use of the addressee. If the reader of this message is not the intended recipient, you are hereby notified that any reading, dissemination, distribution, copying, or other use of this message or its attachments is strictly prohibited. If you have received this message in error, please notify the sender immediately and delete this message and all copies and backups thereof. If you choose to communicate with us by email, you should be aware that the security of incoming Internet email is not secure. We strongly encourage you to use encrypted email when sending sensitive and/or confidential information. By sending sensitive or confidential email messages that are not encrypted, you accept the risks of such lack of security and possible lack of confidentiality. If you elect to communicate from your workplace computer, you also should be aware that your employer and its agents have access to email communications between you and us.
|