jscpd
JSCPD browses all files of your repository to detect excessive copy-pastes
If you need to ignore folders,files or file extensions, use glob expressions ignore property of local .jscpd.json file
Example:
{
  "threshold": 0,
  "reporters": ["html", "markdown"],
  "ignore": [
    "**/node_modules/**",
    "**/.git/**",
    "**/*.md",
    "**/myFolderToSkip/**"
  ]
}
jscpd documentation
- Version in MegaLinter: 3.5.9
- Visit Official Web Site
- See How to configure jscpd rules- If custom .jscpd.jsonconfig file isn't found, .jscpd.json will be used
 
- If custom 
- See How to disable jscpd rules in files
Configuration in MegaLinter
- Enable jscpd by adding COPYPASTE_JSCPDin ENABLE_LINTERS variable
- Disable jscpd by adding COPYPASTE_JSCPDin DISABLE_LINTERS variable
| Variable | Description | Default value | 
|---|---|---|
| COPYPASTE_JSCPD_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" | |
| COPYPASTE_JSCPD_PRE_COMMANDS | List of bash commands to run before the linter | None | 
| COPYPASTE_JSCPD_POST_COMMANDS | List of bash commands to run after the linter | None | 
| COPYPASTE_JSCPD_CONFIG_FILE | jscpd configuration file nameUse LINTER_DEFAULTto let the linter find it | .jscpd.json | 
| COPYPASTE_JSCPD_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules | 
| COPYPASTE_JSCPD_DISABLE_ERRORS | Run linter but consider errors as warnings | false | 
| COPYPASTE_JSCPD_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 | 
| COPYPASTE_JSCPD_CLI_EXECUTABLE | Override CLI executable | ['jscpd'] | 
MegaLinter Flavours
This linter is available in the following flavours
| Flavor | Description | Embedded linters | Info | |
|---|---|---|---|---|
|  | all | Default MegaLinter Flavor | 113 | |
| ci_light | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 19 | ||
| cupcake | MegaLinter for the most commonly used languages | 81 | ||
| documentation | MegaLinter for documentation projects | 47 | ||
| dotnet | Optimized for C, C++, C# or VB based projects | 59 | ||
| go | Optimized for GO based projects | 49 | ||
| java | Optimized for JAVA based projects | 51 | ||
| javascript | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 56 | ||
| php | Optimized for PHP based projects | 50 | ||
| python | Optimized for PYTHON based projects | 58 | ||
| ruby | Optimized for RUBY based projects | 47 | ||
| rust | Optimized for RUST based projects | 47 | ||
| salesforce | Optimized for Salesforce based projects | 50 | ||
| swift | Optimized for SWIFT based projects | 47 | ||
| terraform | Optimized for TERRAFORM based projects | 51 | 
Behind the scenes
How are identified applicable files
- If this linter is active, all files will always be linted
How the linting is performed
jscpd is called once on the whole project directory (project CLI lint mode)
- filtering can not be done using MegaLinter configuration variables,it must be done using jscpd configuration or ignore file (if existing)
- VALIDATE_ALL_CODEBASE: falsedoesn't make jscpd analyze only updated files
Example calls
jscpd --output ./report/copy-paste/ .
jscpd --output ./report/copy-paste/ -c .jscpd.json .
Help content
Usage: jscpd [options] <path ...>
detector of copy/paste in files
Options:
  -V, --version              output the version number
  -l, --min-lines [number]   min size of duplication in code lines (Default is
                             5)
  -k, --min-tokens [number]  min size of duplication in code tokens (Default is
                             50)
  -x, --max-lines [number]   max size of source in lines (Default is 1000)
  -z, --max-size [string]    max size of source in bytes, examples: 1kb, 1mb,
                             120kb (Default is 100kb)
  -t, --threshold [number]   threshold for duplication, in case duplications >=
                             threshold jscpd will exit with error
  -c, --config [string]      path to config file (Default is .jscpd.json in
                             <path>)
  -i, --ignore [string]      glob pattern for files what should be excluded
                             from duplication detection
  --ignore-pattern [string]  Ignore code blocks matching the regexp patterns
  -r, --reporters [string]   reporters or list of reporters separated with
                             comma to use (Default is time,console)
  -o, --output [string]      reporters to use (Default is ./report/)
  -m, --mode [string]        mode of quality of search, can be "strict", "mild" and "weak" (Default is "function mild(token) {
      return strict(token) && token.type !== 'empty' && token.type !== 'new_line';
  }")
  -f, --format [string]      format or formats separated by comma (Example
                             php,javascript,python)
  -p, --pattern [string]     glob pattern to file search (Example **/*.txt)
  -b, --blame                blame authors of duplications (get information
                             about authors from git)
  -s, --silent               do not write detection progress and result to a
                             console
  --store [string]           use for define custom store (e.g. --store leveldb
                             used for big codebase)
  -a, --absolute             use absolute path in reports
  -n, --noSymlinks           dont use symlinks for detection in files
  --ignoreCase               ignore case of symbols in code (experimental)
  -g, --gitignore            ignore all files from .gitignore file
  --formats-exts [string]    list of formats with file extensions
                             (javascript:es,es6;dart:dt)
  -d, --debug                show debug information, not run detection
                             process(options list and selected files)
  -v, --verbose              show full information during detection process
  --list                     show list of total supported formats
  --skipLocal                skip duplicates in local folders, just detect
                             cross folders duplications
  --exitCode [number]        exit code to use when code duplications are
                             detected
  -h, --help                 display help for command