Re: [Codenarc-user] Writing CodeNarc rules
Brought to you by:
chrismair
From: Roshan D. <ros...@gm...> - 2016-09-01 13:33:26
|
Aha! What a pleasant surprise to see a mail from you again. Long time, Hamlet! On Thu, Sep 1, 2016 at 6:52 PM, Hamlet D'Arcy <ham...@gm...> wrote: > Not sure if you ever got an answer to this... > > Here is the latest Javadoc for MethodNode: http://docs. > groovy-lang.org/latest/html/api/org/codehaus/groovy/ast/MethodNode.html > > A MethodNode only ever has one Statement! so if your Method has only a > TryCatchStatement then you know nothing follows it. > If your method has-a BlockStatement then your method will be several > statements long. > > The best way to explore is to write more unit tests and just look and see > what is in the AST! > > On Thu, Aug 18, 2016 at 9:18 PM, <AGo...@cf...> wrote: > >> 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. >> >> ------------------------------------------------------------ >> ------------------ >> >> _______________________________________________ >> Codenarc-user mailing list >> Cod...@li... >> https://lists.sourceforge.net/lists/listinfo/codenarc-user >> >> > > > -- > Hamlet D'Arcy > ham...@gm... > > ------------------------------------------------------------ > ------------------ > > _______________________________________________ > Codenarc-user mailing list > Cod...@li... > https://lists.sourceforge.net/lists/listinfo/codenarc-user > > |