•  


GitHub - kucherenko/jscpd: Copy/paste detector for programming source code.
Skip to content

kucherenko/jscpd

Repository files navigation

jscpd

stand with Ukraine

npm jscpd license npm

jscpd CI codecov FOSSA Status Backers on Open Collective Sponsors on Open Collective

NPM

Copy/paste detector for programming source code, supports 150+ formats.

Copy/paste is a common technical debt on a lot of projects. The jscpd gives the ability to find duplicated blocks implemented on more than 150 programming languages and digital formats of documents. The jscpd tool implements Rabin-Karp algorithm for searching duplications.

Packages of jscpd

name version description
jscpd npm main package for jscpd (cli and API for detections included)
@jscpd/core npm core detection algorithm, can be used for detect duplication in different environments, one dependency to eventemitter3
@jscpd/finder npm detector of duplication in files
@jscpd/tokenizer npm tool for tokenize programming source code
@jscpd/leveldb-store npm LevelDB store, used for big repositories, slower than default store
@jscpd/html-reporter npm Html reporter for jscpd
@jscpd/badge-reporter npm Badge reporter for jscpd

Installation

$ npm install -g jscpd

Usage

$ npx jscpd /path/to/source

or

$ jscpd /path/to/code

or

$ jscpd --pattern 
"
src/**/*.js
"

More information about cli here .

Programming API

For integration copy/paste detection to your application you can use programming API:

jscpd Promise API

import
 {
IClone
}
 from
 '@jscpd/core'
;

import
 {
jscpd
}
 from
 'jscpd'
;


const
 clones
: 
Promise
<
IClone
[
]
>
 =
 jscpd
(
process
.
argv
)
;

jscpd async/await API

import
 {
IClone
}
 from
 '@jscpd/core'
;

import
 {
jscpd
}
 from
 'jscpd'
;

(
async
 (
)
 =>
 {

  const
 clones
: 
IClone
[
]
 =
 await
 jscpd
(
[
''
,
 ''
,
 __dirname
 +
 '/../fixtures'
,
 '-m'
,
 'weak'
,
 '--silent'
]
)
;

  console
.
log
(
clones
)
;

}
)
(
)
;

detectClones API

import
 {
detectClones
}
 from
 "jscpd"
;


(
async
 (
)
 =>
 {

  const
 clones
 =
 await
 detectClones
(
{

    path
: 
[

      __dirname
 +
 '/../fixtures'

    ]
,

    silent
: 
true

  }
)
;

  console
.
log
(
clones
)
;

}
)
(
)

detectClones with persist store

import
 {
detectClones
}
 from
 "jscpd"
;

import
 {
IMapFrame
,
 MemoryStore
}
 from
 "@jscpd/core"
;


(
async
 (
)
 =>
 {

  const
 store
 =
 new
 MemoryStore
<
IMapFrame
>
(
)
;


  await
 detectClones
(
{

    path
: 
[

      __dirname
 +
 '/../fixtures'

    ]
,

  }
,
 store
)
;


  await
 detectClones
(
{

    path
: 
[

      __dirname
 +
 '/../fixtures'

    ]
,

    silent
: 
true

  }
,
 store
)
;

}
)
(
)

In case of deep customisation of detection process you can build your own tool with @jscpd/core , @jscpd/finder and @jscpd/tokenizer .

Start contribution

  • Fork the repo kucherenko/jscpd
  • Clone forked version ( git clone https://github.com/{your-id}/jscpd )
  • Install dependencies ( pnpm install )
  • Run the project in dev mode: pnpm dev (watch changes and rebuild the packages)
  • Add your changes
  • Add tests and check it with pnpm test
  • Build your project pnpm build
  • Create PR

Who uses jscpd

  • GitHub Super Linter is combination of multiple linters to install as a GitHub Action
  • Code-Inspector is a code analysis and technical debt management service.
  • Mega-Linter is a 100% open-source linters aggregator for CI (GitHub Action & other CI tools) or to run locally
  • Codacy automatically analyzes your source code and identifies issues as you go, helping you develop software more efficiently with fewer issues down the line.
  • Natural is a general natural language facility for nodejs. It offers a broad range of functionalities for natural language processing.

Backers

Thank you to all our backers! ?? [ Become a backer ]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [ Become a sponsor ]

ga tracker

License

MIT ⓒ Andrey Kucherenko

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본