Slide 1

Slide 1 text

Codenarc Revisited Jenn Strater @codeJENNerator

Slide 2

Slide 2 text

@codeJENNerator About Me

Slide 3

Slide 3 text

@codeJENNerator About You

Slide 4

Slide 4 text

@codeJENNerator What is ?

Slide 5

Slide 5 text

@codeJENNerator “CodeNarc is a static analysis tool for Groovy source code, enabling monitoring and enforcement of many coding standards and best practices… CodeNarc is similar to popular static analysis tools such as PMD or Checkstyle. Unlike those tools which analyze Java code, CodeNarc analyzes Groovy code.” https://github.com/CodeNarc/CodeNarc

Slide 6

Slide 6 text

@codeJENNerator

Slide 7

Slide 7 text

@codeJENNerator • codenarc.sourceforge.net

Slide 8

Slide 8 text

@codeJENNerator • codenarc.sourceforge.net • Latest Release: 1.4.0 on May 26, 2019

Slide 9

Slide 9 text

@codeJENNerator Why use Codenarc? • Improves readability • Saves time with code reviews • Code with fewer bugs • Help onboard new team members

Slide 10

Slide 10 text

@codeJENNerator Who needs Codenarc? • Interns/Junior Devs • Java Devs converting to Groovy • New Team Members • YOU!

Slide 11

Slide 11 text

@codeJENNerator Demo

Slide 12

Slide 12 text

@codeJENNerator Configure the Gradle Plugin plugins { id 'codenarc' } codenarc { toolVersion = '1.4' } codenarcMain { configFile file('config/codenarc/codenarc.groovy') } codenarcTest { configFile file('config/codenarc/codenarcTest.groovy') }

Slide 13

Slide 13 text

@codeJENNerator Other Codenarc Plugins • IntelliJ (recently updated!!) • Eclipse • Grails 2.x Plugin • Maven • Hudson/Jenkins

Slide 14

Slide 14 text

@codeJENNerator Approaches

Slide 15

Slide 15 text

@codeJENNerator Approaches • Start with one project or team

Slide 16

Slide 16 text

@codeJENNerator Approaches • Start with one project or team • Turn on all rules

Slide 17

Slide 17 text

@codeJENNerator Approaches • Start with one project or team • Turn on all rules • Look at all of the violations

Slide 18

Slide 18 text

@codeJENNerator Approaches • Start with one project or team • Turn on all rules • Look at all of the violations • Turn off rules that don’t make sense for your team

Slide 19

Slide 19 text

@codeJENNerator Approaches • Start with one project or team • Turn on all rules • Look at all of the violations • Turn off rules that don’t make sense for your team • Fix all the problems

Slide 20

Slide 20 text

@codeJENNerator Approaches • Start with one project or team • Turn on all rules • Look at all of the violations • Turn off rules that don’t make sense for your team • Fix all the problems • Once you have a good set of rules with minimal false positives, set that as the standard for all teams using Groovy

Slide 21

Slide 21 text

@codeJENNerator Approaches • Turn on all the rules • Set a violation limit and fail builds that add go above the limit

Slide 22

Slide 22 text

https://flic.kr/p/rmit9T

Slide 23

Slide 23 text

@codeJENNerator 1.0 (Sept 2017) • Updates several library versions • Updated Infrastructure • Lots of bug fixes

Slide 24

Slide 24 text

@codeJENNerator 1.3 (Jan 2019) • Lots of new Javadoc rules • Fixes for some of the problematic JUnit rules

Slide 25

Slide 25 text

@codeJENNerator 1.4 (May 26, 2019) • Enforcing Static Compilation • More Javadoc formatting rules

Slide 26

Slide 26 text

img src: https://flic.kr/p/rehEf5 I don’t like all of the Codenarc Rules!

Slide 27

Slide 27 text

@codeJENNerator Dry • DuplicateListLiteral • DuplicateMapLiteral • DuplicateNumberLiteral • DuplicateStringLiteral

Slide 28

Slide 28 text

@codeJENNerator JUnit Ruleset Doesn’t work well with Spock

Slide 29

Slide 29 text

@codeJENNerator No Def https://flic.kr/p/apRkJh

Slide 30

Slide 30 text

@codeJENNerator No Def • Great for Spring Boot and other Groovy only projects https://flic.kr/p/apRkJh

Slide 31

Slide 31 text

@codeJENNerator No Def • Great for Spring Boot and other Groovy only projects • Problematic with Grails https://flic.kr/p/apRkJh

Slide 32

Slide 32 text

@codeJENNerator Good in Theory

Slide 33

Slide 33 text

@codeJENNerator Good in Theory • Unnecessary Return

Slide 34

Slide 34 text

@codeJENNerator Good in Theory • Unnecessary Return • Line Length

Slide 35

Slide 35 text

@codeJENNerator Debatable

Slide 36

Slide 36 text

@codeJENNerator Debatable • Unnecessary Groovy String

Slide 37

Slide 37 text

@codeJENNerator Debatable • Unnecessary Groovy String • Unnecessary Getter

Slide 38

Slide 38 text

@codeJENNerator Debatable

Slide 39

Slide 39 text

@codeJENNerator Debatable • Misordered Static Imports

Slide 40

Slide 40 text

@codeJENNerator Debatable • Misordered Static Imports • No Wildcard Imports

Slide 41

Slide 41 text

@codeJENNerator WARNING! • Enhanced Ruleset does not work with the gradle codenarc plugin • https://objectpartners.com/2016/03/16/resolving- codenarc-compilation-warnings/

Slide 42

Slide 42 text

@codeJENNerator Demo

Slide 43

Slide 43 text

@codeJENNerator Create a Custom Rule import org.codenarc.rule.AbstractRule
 import org.codenarc.source.SourceCode
 
 /**
 * Sample rule. Checks for static fields.
 */
 class MyStaticFieldRule extends AbstractRule {
 String name = 'MyStaticField'
 int priority = 2
 
 void applyTo(SourceCode sourceCode, List violations) {
 sourceCode.ast.classes.each { clazz ->
 clazz.fields.each { fieldNode ->
 if (fieldNode.static) {
 violations << createViolation(sourceCode, fieldNode)
 }
 }
 }
 }
 }

Slide 44

Slide 44 text

@codeJENNerator Adding Custom Rules to Your Project • Follow the Grails Guide! https://guides.grails.org/ grails-codenarc/guide/index.html

Slide 45

Slide 45 text

@codeJENNerator Conclusion

Slide 46

Slide 46 text

@codeJENNerator Read the docs for more on.. • Rule Specifics • Ant Task • Command Line

Slide 47

Slide 47 text

@codeJENNerator

Slide 48

Slide 48 text

@codeJENNerator • Subscribe to the mailing list: https://sourceforge.net/ p/codenarc/mailman

Slide 49

Slide 49 text

@codeJENNerator • Subscribe to the mailing list: https://sourceforge.net/ p/codenarc/mailman • Contribute on GitHub: https://github.com/codenarc/ codenarc

Slide 50

Slide 50 text

@codeJENNerator Example Rulesets • Grails • https://github.com/jlstrater/gr8data/tree/master/ config/codenarc • Spring Boot • https://github.com/jlstrater/groovy-spring-boot- restdocs-example/tree/master/gradle/codenarc

Slide 51

Slide 51 text

@codeJENNerator Questions? https://flic.kr/p/5DeuzB https://speakerdeck.com/jlstrater/codenarc-revisited-gr8conf-eu-2019