Re: [Codenarc-user] Writing CodeNarc rules
Brought to you by:
chrismair
From: <chr...@we...> - 2016-08-29 12:15:16
|
Sorry for the delayed response. I would suggest installing Groovy, if you have not already done so, and then use the Groovy Console. That has been invaluable for me when writing rules and AST-parsing code. Paste a code sample into the console and then press Ctrl-T to open the AST Browser. Then match the AST-parsing code you are writing to what the console shows for the structure of the resulting AST. Chris From: AGo...@cf... [mailto:AGo...@cf...] Sent: Thursday, August 18, 2016 3:18 PM To: cod...@li... Subject: [Codenarc-user] Writing CodeNarc rules 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. classMyTestAstVisitor extendsAbstractMethodVisitor { @Override voidvisitMethod(MethodNode methodNode) { if(Modifier.isPublic(methodNode.modifiers)) { if(AstUtil.isEmptyBlock(methodNode.code)) { addViolation(methodNode, "Action ${methodNode.name} in ${currentClassName} is empty") } else{ deftryCatchStatement = methodNode.firstStatement if(!(tryCatchStatement instanceofTryCatchStatement)) { 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. |