[GSoC] PMD Application - pmd/pmd GitHub Wiki

Google Summer of Code Logo

Organization Application

Why does your org want to participate in Google Summer of Code?

PMD is a widely used tool. However, the active community is relatively small, although growing fast. Google Summer of Code seems like a wonderful opportunity to keep promoting PMD and building a stronger community. Getting new contributors on board is a really great benefit, even if not the main objective.

PMD is a mature project. The codebase is stable and easy to maintain, yet there are plenty of opportunities to improve and build upon existing features. We believe this provides a great environment on which students may get involved in Open Source and make meaningful contributions.

How many potential mentors have agreed to mentor this year?

1-5

How will you keep mentors engaged with their students?

The mentors are the most active developers in the community and are already very engaged with the project with proven sustained participation on all fronts: the codebase, the issue tracker, the wiki, the mailing list, and StackOverflow. The proposed mentors are the ones that suggested applying to Google Summer of Code in the first place, and which have already mentored successful applications in Google Summer of Code 2017 and 2018. Therefore, there should be no problem keeping them engaged.

How will you help your students stay on schedule to complete their projects?

We believe it's fundamental to have a regular checkpoint with the students. We suggest to start with a weekly (video) chat, to update each other on the progress and discuss next steps. This doesn't need to be a long meeting and it should be similar to a scrum standup meeting. Depending on the performance of the student, this might be done bi-weekly, or every couple days. Of course, if the student is facing any challenges, he can reach out to PMD's mailing list or text the mentor by IM to get a proper response in at most a couple hours.

All proposed ideas for Google Summer of Code are already pretty mature. The mentors have already iterated over them, and even if there is plenty of room for students to work freely, we can provide several lines of parallel work to make sure that, even if they get stuck on one, they can still make progress on another while awaiting response.

How will you get your students involved in your community during GSoC?

The students are encouraged to reach out to the mailing list, public wiki and issue tracker and start discussions in the open. This is how the development team currently works, building design docs and proposing changes that way before starting to write code, and would not expect differently from students. This helps to make their work visible to everyone, and benefit from input, suggestions and ideas from the whole community.

How will you keep students involved with your community after GSoC?

We plan to integrate the code produced by the students into a released version of PMD as soon as possible. Some of the proposed ideas allow for intermediate deliverables which we would like to see published before Google Summer of Code ends, making their impact on the community visible as early as we can.

Hopefully, during the Google Summer of Code, the students will bond with the mentors and community making them more willing to keep involved, further developing their solutions and working on other projects.

Their time with us will also let them realize the relevance PMD has on real world projects, both closed and open source, make them discover their own ability to have impact on the work of many others, and feel accomplished.

For each year your organization has participated, provide the counts of successful and total students. (e.g. 2016: 3/4)

  • 2017: 2/2
  • 2018: 1/2

What year was your project started?

2002

Where does your source code live?

https://github.com/pmd/pmd/

Organization Profile

Name

PMD

Website URL

https://pmd.github.io/

Tagline

An extensible cross-language static code analyzer.

Logo

https://github.com/pmd/pmd/blob/master/docs/images/pmd-logo-big.png

Primary Open Source License

BSD 2-Clause "Simplified" or "FreeBSD" License (BSD-2-Clause)

Organization Category

Programming Languages and Development Tools

Technology Tags

java, xml, javacc, antlr, xpath

Topic Tags

code analysis, code quality, source code analyzer, linter

Ideas List

https://github.com/pmd/pmd/wiki/Project-Ideas-%5BMature%5D

Short Description

PMD keeps an eye on code quality in your project. It understands multiple languages and can be customized to your specific needs with custom rules.

Long Description

PMD is a static code analyzer. It finds common programming flaws, sub-optimal code and code style issues in multiple languages. For example, it can highlight unused variables, empty catch blocks or too complex code, just to name a few.

Programming Languages

Initially PMD started out to be a Java-only code analyzer. But nowadays, it fully supports 8 languages: Java, JavaScript, Salesforce.com Apex and Visualforce, PLSQL, Apache Velocity, XML and XSL. All languages provide many rules, that you can immediately use to check your source code.

Copy-Paste-Detector

Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code in all the above languages and additionally in C, C++, C#, Groovy, PHP, Ruby, Fortran, Scala, Objective C, Matlab, Python, Go, and Swift.

Usage

PMD has over 50000 monthly downloads and is actively used by many open source and closed source projects. It is integrated into most common build tools like Maven, Gradle and Ant, but it can also be used from the command line. Integrations into CI systems such as Jenkins can provide comparisons between builds to see quality improvements or degradation over time based on the issues found by PMD. When integrated into the build, PMD can serve as a quality gate.

Extensibility

PMD comes out of the box with many rules in the area of code design, optimizations, naming and many more. It provides a flexible infrastructure to customize the existing rules via properties and to define completely new custom rules. The rules can be organized in rulesets, which can be shared within a software project, so that every developer is using the same PMD configuration.

An innovative approach allows to define PMD rules using a single XPath expression, allowing developers to do so without having to write code or deal with PMD internals. PMD ships with a designer tool to help build and test such expressions. More complex rules can be coded in Java using a visitor pattern over the analyzed code.

Application Instructions

Although PMD is a mature project there are plenty of opportunities to improve and build upon existing features. We've collected already many ideas in our Wiki and have a Newcomers' Guide to help you getting started.

We have two kinds of idea lists:

You may also suggest a project of your own or take an idea and adjust it. Please make sure to discuss it with us on gitter, on our mailing list or issue tracker beforehand.

Proposal Tags

new feature, new language, gui, ide, new rule, performance

Contact Methods

Chat: https://gitter.im/pmd/pmd

Mailing List: https://lists.sourceforge.net/lists/listinfo/pmd-devel

General Email: [email protected]

Links

Twitter: https://twitter.com/pmd_analyzer