diff --git a/README.md b/README.md index 0ee521b467..24dca50bbc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# PMD +# PMD - source code analyzer [![Join the chat at https://gitter.im/pmd/pmd](https://badges.gitter.im/pmd/pmd.svg)](https://gitter.im/pmd/pmd?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://github.com/pmd/pmd/workflows/build/badge.svg?branch=master)](https://github.com/pmd/pmd/actions) @@ -7,18 +7,73 @@ [![Coverage Status](https://coveralls.io/repos/github/pmd/pmd/badge.svg)](https://coveralls.io/github/pmd/pmd) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/a674ee8642ed44c6ba7633626ee95967)](https://www.codacy.com/app/pmd/pmd?utm_source=github.com&utm_medium=referral&utm_content=pmd/pmd&utm_campaign=Badge_Grade) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](code_of_conduct.md) - -## About +[![Documentation (latest)](https://img.shields.io/badge/docs-latest-green)](https://pmd.github.io/latest/) **PMD** is a source code analyzer. It finds common programming flaws like unused variables, empty catch blocks, -unnecessary object creation, and so forth. It supports Java, JavaScript, Salesforce.com Apex and Visualforce, +unnecessary object creation, and so forth. It supports many languages. It can be extended with custom rules. +It uses JavaCC and Antlr for parsing source into AST and runs rules against it to find violations. +Rules can be written in Java or using a XPath query. + +It supports Java, JavaScript, Salesforce.com Apex and Visualforce, Modelica, PLSQL, Apache Velocity, XML, XSL, Scala. Additionally it includes **CPD**, the copy-paste-detector. CPD finds duplicated code in C/C++, C#, Dart, Fortran, Go, Groovy, Java, JavaScript, JSP, Kotlin, Lua, Matlab, Modelica, Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex, Scala, Swift, Visualforce and XML. -## Support +In the future we hope to add support for data/control flow analysis and automatic (quick) fixes where +it makes sense. + +## 🚀 Installation and Usage + +Download the latest binary zip from the [releases](https://github.com/pmd/pmd/releases/latest) +and extract it somewhere. + +Execute `bin/run.sh pmd` or `bin\pmd.bat`. + +See also [Getting Started](https://pmd.github.io/latest/pmd_userdocs_installation.html) + +**Demo:** + +For this sample file: + +```java +import java.util.List; + +public class MyClass { + void loop(List l) { + for (int i = 0; i < l.size(); i++) { + System.out.println(l.get(i)); + } + } +} +``` + +Run PMD on the command line: + +```bash +$ run.sh pmd -d /usr/src -R rulesets/java/quickstart.xml -f xml + + + + +All classes, interfaces, enums and annotations must belong to a named package + + +This for loop can be replaced by a foreach loop + + + +``` + +PMD Eclipse Plugin: + +![Screenshot PMD Eclipse Plugin](docs/images/userdocs/screenshot_pmd-eclipse-plugin.png) + +There are plugins for Maven and Gradle as well as for various IDEs. +See [Tools / Integrations](https://pmd.github.io/latest/pmd_userdocs_tools.html) + +## ℹī¸ How to get support? * How do I? -- Ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/pmd) or on [discussions](https://github.com/pmd/pmd/discussions). @@ -29,7 +84,9 @@ Objective-C, Perl, PHP, PLSQL, Python, Ruby, Salesforce.com Apex, Scala, Swift, * I have a quick question -- ask on our [Gitter chat](https://gitter.im/pmd/pmd). * Where's your documentation? -- -## Source +## 🤝 Contributing + +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Our latest source of PMD can be found on [GitHub](https://github.com/pmd/pmd). Fork us! @@ -40,6 +97,10 @@ The rule designer is developed over at [pmd/pmd-designer](https://github.com/pmd Please see [its README](https://github.com/pmd/pmd-designer#contributing) for developer documentation. -## Website +## đŸĒ™ Financial Contributors -More information can be found on our [Website](https://pmd.github.io). +Become a financial contributor and help us sustain our community. [Contribute](https://opencollective.com/pmd/contribute) + +## 📝 License + +[BSD Style](LICENSE) diff --git a/docs/images/userdocs/screenshot_pmd-eclipse-plugin.png b/docs/images/userdocs/screenshot_pmd-eclipse-plugin.png new file mode 100644 index 0000000000..68fce2eb4f Binary files /dev/null and b/docs/images/userdocs/screenshot_pmd-eclipse-plugin.png differ