jscpd

Copy/paste detector for programming code, support JavaScript, CoffeeScript, PHP, Ruby, Python, Less, Go, Java, C#, C++, C languages

Copy/paste detector for programming source code.

jscpd is a tool for detect copy/paste "design pattern" in programming source code.

Supported languages
JavaScriptJava
CoffeeScriptC++
PHPC#
GoPython
RubyC
LessCSS
SCSSMixed HTML
TypeScript

If you need support language not from list feel free to create request.

![Gitter](https://badges.gitter.im/Join Chat.svg)

npm install jscpd -g
jscpd --path my_project/ --languages javascript,coffee

jscpd -f **/*.js -e **/node_modules/**

jscpd --files **/*.js --exclude **/*.min.js --output report.xml

or

If you have file .cpd.yaml in your directory

#.cpd.yaml 
path:
  - fixtures/
languages:
  - javascript
  - coffeescript
  - typescript
  - php
  - python
  - css
  - ruby
  - go
  - java
  - "c++src"    # c++ source 
  - csrc        # c source 
  - csharp      # c# source 
  - htmlmixed   # html mixed source like knockout.js templates 
exclude:
  - "**/*.min.js"
  - "**/*.mm.js"

and run jscpd command, you will check code for duplicates according config from .cpd.yaml

or

# coffeescript 
jscpd = require('jscpd')
result = jscpd::run
    path: 'my/project/folder'
    files: '**/*.js'
    exclude: ['**/*.min.js''**/node_modules/**']

Please see the minimatch documentation for more details.

OptionTypeDefaultDescription
- -l, --min-lines[NUMBER]5min size of duplication in code lines
- -t, --min-tokens[NUMBER]70mim size of duplication in code tokens
- -f, --files[STRING]*glob pattern for find code
- -e, --exclude[STRING]-directory to ignore
- -g, --languages[STRING]All supportedlist of languages which scan for duplicates, separated with coma
- -o, --output[PATH]-path to report xml file
- --verbose-show full info about copies
- -p, --path[PATH]Current dirpath to code
- -d, --debug-show debug information (options list and selected files)
- -v, --version-Display the current version
- -h, --help-Display help and usage details
  npm test

Project changelog

Project plans

The MIT License

Thanks to Mathieu Desvé for grunt-jscpd. Thanks to Yannick Croissant for gulp-jscpd. Thanks to linslin for grunt-jscpd-reporter.

Project developed with PyCharm Thanks to JetBrains company for license key. Feel free to contribute this project and you will have chance to get license key too.