├── .changeset ├── README.md └── config.json ├── .editorconfig ├── .eslintrc.json ├── .github ├── CONTRIBUTING.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── nodejs.yml │ └── release.yml ├── .gitignore ├── .pre-commit-hooks.yaml ├── .prettierignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── TODO.md ├── apps └── jscpd │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── __tests__ │ ├── formats.test.ts │ ├── modes.test.ts │ ├── options.test.ts │ └── reporters.test.ts │ ├── bin │ ├── jscpd │ └── jscpd.ts │ ├── nodemon.json │ ├── package.json │ ├── src │ ├── index.ts │ ├── init │ │ ├── cli.ts │ │ ├── hooks.ts │ │ ├── ignore.ts │ │ ├── index.ts │ │ ├── options.ts │ │ ├── reporters.ts │ │ ├── store.ts │ │ └── subscribers.ts │ ├── options.ts │ └── print │ │ ├── files.ts │ │ ├── index.ts │ │ ├── options.ts │ │ └── supported-format.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── tsup.config.ts ├── assets ├── jscpd-badge.svg ├── logo-small-box.svg ├── logo-small.svg ├── logo.svg ├── screenshot-1.png ├── screenshot-2.png └── screenshot.png ├── build-utils ├── prismjs-languages-concat.ts └── publish-util.ts ├── examples └── api │ ├── example-detectClones.ts │ ├── example-jscpd.ts │ ├── example-persist-store.ts │ └── example_github_action.yml ├── fixtures ├── .jscpd.json ├── apl │ ├── file1.apl │ ├── file1.dyalog │ ├── file2.apl │ └── file2.dyalog ├── brainfuck │ ├── file1.b │ ├── file1.bf │ ├── file2.b │ └── file2.bf ├── clike │ ├── file1.c │ ├── file1.c++ │ ├── file1.cc │ ├── file1.cpp │ ├── file1.cs │ ├── file1.cxx │ ├── file1.h │ ├── file1.h++ │ ├── file1.hh │ ├── file1.hpp │ ├── file1.hxx │ ├── file1.java │ ├── file1.kt │ ├── file1.m │ ├── file1.mm │ ├── file1.nut │ ├── file1.scala │ ├── file2.c │ ├── file2.c++ │ ├── file2.cc │ ├── file2.cpp │ ├── file2.cs │ ├── file2.cxx │ ├── file2.h │ ├── file2.h++ │ ├── file2.hh │ ├── file2.hpp │ ├── file2.hxx │ ├── file2.java │ ├── file2.kt │ ├── file2.m │ ├── file2.mm │ ├── file2.nut │ └── file2.scala ├── clojure │ ├── file1.clj │ ├── file1.cljc │ ├── file1.cljs │ ├── file1.cljx │ ├── file1.edn │ ├── file2.clj │ ├── file2.cljc │ ├── file2.cljs │ ├── file2.cljx │ └── file2.edn ├── cmake │ ├── file1.cmake │ ├── file1.cmake.in │ ├── file2.cmake │ └── file2.cmake.in ├── cobol │ ├── file1.cob │ ├── file1.cpy │ ├── file2.cob │ └── file2.cpy ├── coffeescript │ ├── file1.coffee │ └── file2.coffee ├── commonlisp │ ├── file1.cl │ ├── file1.el │ ├── file1.lisp │ ├── file2.cl │ ├── file2.el │ └── file2.lisp ├── crystal │ ├── file1.cr │ └── file2.cr ├── css │ ├── file1.css │ ├── file1.gss │ ├── file1.less │ ├── file1.scss │ ├── file10.css │ ├── file2.css │ ├── file2.gss │ ├── file2.less │ └── file2.scss ├── custom │ ├── file.cc1 │ └── file.ccc ├── cypher │ ├── file1.cyp │ ├── file1.cypher │ ├── file2.cyp │ └── file2.cypher ├── d │ ├── file1.d │ └── file2.d ├── dart │ ├── file1.dart │ └── file2.dart ├── diff │ ├── file1.diff │ ├── file1.patch │ ├── file2.diff │ └── file2.patch ├── dtd │ ├── file1.dtd │ └── file2.dtd ├── dylan │ ├── file1.dyl │ ├── file1.dylan │ ├── file1.intr │ ├── file2.dyl │ ├── file2.dylan │ └── file2.intr ├── ecl │ ├── file1.ecl │ └── file2.ecl ├── eiffel │ ├── file1.e │ └── file2.e ├── elm │ ├── file1.elm │ └── file2.elm ├── erlang │ ├── file1.erl │ └── file2.erl ├── factor │ ├── file1.factor │ └── file2.factor ├── folder1 │ ├── file2.c │ └── file_1.js ├── folder2 │ └── file_2.js ├── forth │ ├── file1.4th │ ├── file1.forth │ ├── file1.fth │ ├── file2.4th │ ├── file2.forth │ └── file2.fth ├── fortran │ ├── file1.f │ ├── file1.f77 │ ├── file1.f90 │ ├── file1.for │ ├── file2.f │ ├── file2.f77 │ ├── file2.f90 │ └── file2.for ├── gas │ ├── file1.s │ └── file2.s ├── gherkin │ ├── file1.feature │ └── file2.feature ├── go │ ├── file1.go │ └── file2.go ├── groovy │ ├── file1.gradle │ ├── file1.groovy │ ├── file2.gradle │ └── file2.groovy ├── haml │ ├── file1.haml │ └── file2.haml ├── haskell-literate │ ├── file1.lhs │ └── file2.lhs ├── haskell │ ├── file1.hs │ └── file2.hs ├── haxe │ ├── file1.hx │ ├── file1.hxml │ ├── file2.hx │ └── file2.hxml ├── htmlembedded │ ├── file1.aspx │ ├── file1.ejs │ ├── file1.erb │ ├── file1.jsp │ ├── file2.aspx │ ├── file2.ejs │ ├── file2.erb │ └── file2.jsp ├── htmlmixed │ ├── file1.htm │ ├── file1.html │ ├── file2.htm │ └── file2.html ├── idl │ ├── file1.pro │ └── file2.pro ├── ignore-case │ ├── file1.txt │ └── file2.txt ├── ignore-pattern │ ├── file_1.js │ └── file_2.js ├── ignore │ ├── file1.htm │ ├── file2.htm │ ├── file_1.js │ └── file_2.js ├── javascript │ ├── file1.cts │ ├── file1.js │ ├── file1.json │ ├── file1.jsonld │ ├── file1.map │ ├── file1.mts │ ├── file1.ts │ ├── file2.cts │ ├── file2.js │ ├── file2.json │ ├── file2.jsonld │ ├── file2.map │ ├── file2.mts │ ├── file2.ts │ ├── file_1.cjs │ ├── file_1.js │ ├── file_1.mjs │ ├── file_2.cjs │ ├── file_2.js │ ├── file_2.mjs │ ├── file_3.js │ └── file_4.js ├── jsx │ ├── file1.jsx │ ├── file1.tsx │ ├── file2.jsx │ └── file2.tsx ├── julia │ ├── file1.jl │ └── file2.jl ├── livescript │ ├── file1.ls │ └── file2.ls ├── lua │ ├── file1.lua │ └── file2.lua ├── markdown │ ├── file1.markdown │ ├── file1.md │ ├── file1.mkd │ ├── file2.markdown │ ├── file2.md │ └── file2.mkd ├── markup.html ├── mathematica │ ├── file1.m │ ├── file1.nb │ ├── file2.m │ └── file2.nb ├── mbox │ ├── file1.mbox │ └── file2.mbox ├── mixed-formats │ ├── file.css │ ├── file.html │ └── file.js ├── mllike │ ├── file1.fs │ ├── file1.ml │ ├── file1.mli │ ├── file1.mll │ ├── file1.mly │ ├── file2.fs │ ├── file2.ml │ ├── file2.mli │ ├── file2.mll │ └── file2.mly ├── modelica │ ├── file1.mo │ └── file2.mo ├── modes │ ├── file1.ts │ └── file2.ts ├── mscgen │ ├── file1.msc │ ├── file1.mscgen │ ├── file1.mscin │ ├── file1.msgenny │ ├── file1.xu │ ├── file2.msc │ ├── file2.mscgen │ ├── file2.mscin │ ├── file2.msgenny │ └── file2.xu ├── mumps │ ├── file1.mps │ └── file2.mps ├── nsis │ ├── file1.nsh │ ├── file1.nsi │ ├── file2.nsh │ └── file2.nsi ├── ntriples │ ├── file1.nt │ └── file2.nt ├── null │ ├── file1.conf │ ├── file1.def │ ├── file1.list │ ├── file1.text │ ├── file1.txt │ ├── file2.conf │ ├── file2.def │ ├── file2.list │ ├── file2.text │ └── file2.txt ├── objective-c │ ├── file_1.h │ ├── file_1.m │ ├── file_2.h │ └── file_2.m ├── octave │ ├── file1.m │ └── file2.m ├── one-file │ └── one-file.js ├── oz │ ├── file1.oz │ └── file2.oz ├── pascal │ ├── file1.p │ ├── file1.pas │ ├── file2.p │ └── file2.pas ├── pegjs │ ├── file1.jsonld │ └── file2.jsonld ├── perl │ ├── file1.pl │ ├── file1.pm │ ├── file2.pl │ └── file2.pm ├── php │ ├── file1.php │ ├── file1.php3 │ ├── file1.php4 │ ├── file1.php5 │ ├── file1.phtml │ ├── file2.php │ ├── file2.php3 │ ├── file2.php4 │ ├── file2.php5 │ └── file2.phtml ├── pig │ ├── file1.pig │ └── file2.pig ├── powershell │ ├── file1.ps1 │ ├── file1.psd1 │ ├── file1.psm1 │ ├── file2.ps1 │ ├── file2.psd1 │ └── file2.psm1 ├── properties │ ├── file1.in │ ├── file1.ini │ ├── file1.properties │ ├── file2.in │ ├── file2.ini │ └── file2.properties ├── protobuf │ ├── file1.proto │ └── file2.proto ├── pug │ ├── file1.jade │ ├── file1.pug │ ├── file2.jade │ └── file2.pug ├── puppet │ ├── file1.pp │ └── file2.pp ├── python │ ├── file1.BUILD │ ├── file1.bzl │ ├── file1.pxd │ ├── file1.pxi │ ├── file1.py │ ├── file1.pyw │ ├── file1.pyx │ ├── file2.BUILD │ ├── file2.bzl │ ├── file2.pxd │ ├── file2.pxi │ ├── file2.py │ ├── file2.pyw │ └── file2.pyx ├── q │ ├── file1.q │ └── file2.q ├── r │ ├── file1.r │ └── file2.r ├── rpm │ ├── file1.spec │ └── file2.spec ├── rst │ ├── file1.rst │ └── file2.rst ├── ruby │ ├── file1.rb │ └── file2.rb ├── rust │ ├── file1.rs │ └── file2.rs ├── sas │ ├── file1.sas │ └── file2.sas ├── sass │ ├── file1.sass │ └── file2.sass ├── scheme │ ├── file1.scm │ ├── file1.ss │ ├── file2.scm │ └── file2.ss ├── shell │ ├── file1.bash │ ├── file1.ksh │ ├── file1.sh │ ├── file2.bash │ ├── file2.ksh │ └── file2.sh ├── sieve │ ├── file1.sieve │ ├── file1.siv │ ├── file2.sieve │ └── file2.siv ├── slim │ ├── file1.slim │ └── file2.slim ├── smalltalk │ ├── file1.st │ └── file2.st ├── smarty │ ├── file1.tpl │ └── file2.tpl ├── soy │ ├── file1.soy │ └── file2.soy ├── sparql │ ├── file1.rq │ ├── file1.sparql │ ├── file2.rq │ └── file2.sparql ├── sql │ ├── file1.cql │ ├── file1.pls │ ├── file1.sql │ ├── file2.cql │ ├── file2.pls │ └── file2.sql ├── stex │ ├── file1.ltx │ ├── file1.text │ ├── file2.ltx │ └── file2.text ├── stylus │ ├── file1.styl │ └── file2.styl ├── swift │ ├── file1.swift │ └── file2.swift ├── tcl │ ├── file1.tcl │ └── file2.tcl ├── text │ ├── file1.txt │ └── file2.txt ├── textile │ ├── file1.textile │ └── file2.textile ├── toml │ ├── file1.toml │ └── file2.toml ├── troff │ ├── file1.1 │ ├── file1.2 │ ├── file1.3 │ ├── file1.4 │ ├── file1.5 │ ├── file1.6 │ ├── file1.7 │ ├── file1.8 │ ├── file1.9 │ ├── file2.1 │ ├── file2.2 │ ├── file2.3 │ ├── file2.4 │ ├── file2.5 │ ├── file2.6 │ ├── file2.7 │ ├── file2.8 │ └── file2.9 ├── ttcn-cfg │ ├── file1.cfg │ └── file2.cfg ├── ttcn │ ├── file1.ttcn │ ├── file1.ttcn3 │ ├── file1.ttcnpp │ ├── file2.ttcn │ ├── file2.ttcn3 │ └── file2.ttcnpp ├── turtle │ ├── file1.ttl │ └── file2.ttl ├── twig │ ├── file_1.twig │ └── file_2.twig ├── vb │ ├── file1.vb │ └── file2.vb ├── vbscript │ ├── file1.vbs │ └── file2.vbs ├── velocity │ ├── file1.vtl │ └── file2.vtl ├── verilog │ ├── file1.v │ └── file2.v ├── vhdl │ ├── file1.vhd │ ├── file1.vhdl │ ├── file2.vhd │ └── file2.vhdl ├── vue │ ├── file1.vue │ └── file2.vue ├── webidl │ ├── file1.webidl │ └── file2.webidl ├── xml │ ├── file1.svg │ ├── file1.xml │ ├── file1.xsd │ ├── file1.xsl │ ├── file2.svg │ ├── file2.xml │ ├── file2.xsd │ └── file2.xsl ├── xquery │ ├── file1.xquery │ ├── file1.xy │ ├── file2.xquery │ └── file2.xy ├── yacas │ ├── file1.ys │ └── file2.ys ├── yaml │ ├── file1.yaml │ ├── file1.yml │ ├── file2.yaml │ └── file2.yml └── z80 │ ├── file1.z80 │ └── file2.z80 ├── package.json ├── packages ├── badge-reporter │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── core │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ ├── detector.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── blamed-lines.interface.ts │ │ │ ├── clone-validator.interface.ts │ │ │ ├── clone.interface.ts │ │ │ ├── index.ts │ │ │ ├── map-frame.interface.ts │ │ │ ├── options.interface.ts │ │ │ ├── source-validator.interface.ts │ │ │ ├── statistic.interface.ts │ │ │ ├── store.interface.ts │ │ │ ├── subscriber.interface.ts │ │ │ ├── token-location.interface.ts │ │ │ ├── token.interface.ts │ │ │ ├── tokenizer.interface.ts │ │ │ ├── tokens-map.interface.ts │ │ │ └── validation-result.interface.ts │ │ ├── mode.ts │ │ ├── options.ts │ │ ├── rabin-karp.ts │ │ ├── statistic.ts │ │ ├── store │ │ │ └── memory.ts │ │ └── validators │ │ │ ├── index.ts │ │ │ ├── lines-length-clone.validator.ts │ │ │ └── validator.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── finder │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── __tests__ │ │ ├── in-files-detector.test.ts │ │ └── utils.test.ts │ ├── nodemon.json │ ├── package.json │ ├── src │ │ ├── files.ts │ │ ├── hooks │ │ │ ├── blamer.ts │ │ │ ├── fragment.ts │ │ │ └── index.ts │ │ ├── in-files-detector.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── entry-with-content.interface.ts │ │ │ ├── hook.interface.ts │ │ │ ├── index.ts │ │ │ └── reporter.interface.ts │ │ ├── reporters │ │ │ ├── console-full.ts │ │ │ ├── console.ts │ │ │ ├── csv.ts │ │ │ ├── index.ts │ │ │ ├── json.ts │ │ │ ├── markdown.ts │ │ │ ├── silent.ts │ │ │ ├── threshold.ts │ │ │ ├── xcode.ts │ │ │ └── xml.ts │ │ ├── subscribers │ │ │ ├── index.ts │ │ │ ├── progress.ts │ │ │ └── verbose.ts │ │ ├── utils │ │ │ ├── clone-found.ts │ │ │ ├── options.ts │ │ │ └── reports.ts │ │ └── validators │ │ │ ├── index.ts │ │ │ └── skip-local.validator.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── html-reporter │ ├── .gitignore │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── public │ │ ├── js │ │ │ └── prism.js │ │ └── styles │ │ │ ├── prism.css │ │ │ └── tailwind.css │ ├── src │ │ ├── index.ts │ │ └── templates │ │ │ └── main.pug │ ├── tsconfig.json │ └── tsup.config.ts ├── leveldb-store │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── redis-store │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── sarif-reporter │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── tsup.config.ts ├── tokenizer │ ├── .npmignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── nodemon.json │ ├── package.json │ ├── src │ │ ├── formats.ts │ │ ├── grammar-loader.ts │ │ ├── hash.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── format-meta.interface.ts │ │ │ ├── index.ts │ │ │ └── source-options.interface.ts │ │ ├── languages │ │ │ ├── plsql.ts │ │ │ ├── sql.ts │ │ │ └── tap.ts │ │ ├── token-map.ts │ │ └── tokenize.ts │ ├── tsconfig.json │ └── tsup.config.ts └── tsconfig │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ └── pkg.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── supported_formats.md └── turbo.json /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "restricted", 8 | "baseBranch": "master", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "node": true, 5 | "es6": true, 6 | "es2017": true 7 | }, 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:sonarjs/recommended", 11 | "plugin:@typescript-eslint/eslint-recommended", 12 | "plugin:@typescript-eslint/recommended", 13 | "plugin:@typescript-eslint/recommended-requiring-type-checking" 14 | ], 15 | "parser": "@typescript-eslint/parser", 16 | "parserOptions": { 17 | "project": "tsconfig.json", 18 | "tsconfigRootDir": "./packages/" 19 | }, 20 | "plugins": [ 21 | "@typescript-eslint" 22 | ], 23 | "rules": { 24 | "@typescript-eslint/interface-name-prefix": [ 25 | "off" 26 | ], 27 | "@typescript-eslint/no-var-requires": [ 28 | "off" 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for start reading the document. Currently, jscpd has not strict contribution rules. Will be here soon... 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: jscpd 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Screenshots** 21 | If applicable, add screenshots to help explain your problem. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. iOS] 25 | - OS Version [e.g. 22] 26 | - NodeJS Version [e.g. 9, 10, 11] 27 | - jscpd version [e.g. 0.6.x, 1.0.x, 2.0.3] 28 | 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | * **What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...) 2 | 3 | 4 | 5 | * **What is the current behavior?** (You can also link to an open issue here) 6 | 7 | 8 | 9 | * **What is the new behavior (if this is a feature change)?** 10 | 11 | 12 | 13 | * **Other information**: 14 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: jscpd CI 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | strategy: 11 | matrix: 12 | node-version: [20.x, 22.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v4 16 | - name: Use Node.js ${{ matrix.node-version }} 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: ${{ matrix.node-version }} 20 | - name: pnpm install 21 | run: | 22 | npm i pnpm -g 23 | 24 | - name: Install dependencies 25 | run: pnpm install 26 | 27 | - name: Build 28 | run: pnpm build 29 | 30 | - name: Lint 31 | run: pnpm lint 32 | 33 | - name: Test 34 | run: pnpm test 35 | 36 | - name: jscpd 37 | run: ./apps/jscpd/bin/jscpd ./fixtures 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | results 4 | .nyc_output 5 | *.tsbuildinfo 6 | coverage 7 | .idea 8 | report 9 | .DS_Store 10 | .eslintcache 11 | .jscpd 12 | docs 13 | .cache 14 | tmp 15 | sandbox 16 | tmp/ 17 | .turbo 18 | build/ 19 | -------------------------------------------------------------------------------- /.pre-commit-hooks.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | - id: jscpd 3 | name: Check for duplicated code 4 | entry: jscpd 5 | args: ["--gitignore", "--exitCode", "'1'"] 6 | language: node 7 | types: [text] 8 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # package.json is formatted by package managers, so we ignore it here 2 | package.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2024 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # JSCPD 2 | > Copy/paste detector for source code 3 | 4 | ## TODO list 5 | 6 | List of items to implement: 7 | - Add validators 8 | - Files 9 | ? Sources(TokenMap) 10 | - Clones 11 | - Split options for `core` and `finder` 12 | - Add examples of usage for `core` and `finder` 13 | - Add documentation 14 | - Add in browser detector 15 | - Detection server support 16 | - Register old reporters (like badge) 17 | -------------------------------------------------------------------------------- /apps/jscpd/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /apps/jscpd/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apps/jscpd/bin/jscpd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../dist/bin/jscpd') 4 | -------------------------------------------------------------------------------- /apps/jscpd/bin/jscpd.ts: -------------------------------------------------------------------------------- 1 | import {jscpd} from "../src"; 2 | 3 | (async () => { 4 | try { 5 | await jscpd(process.argv, process.exit) 6 | } catch(e) { 7 | console.log(e); 8 | process.exit(1); 9 | } 10 | })() 11 | 12 | export * from '../src' 13 | -------------------------------------------------------------------------------- /apps/jscpd/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/hooks.ts: -------------------------------------------------------------------------------- 1 | import {BlamerHook, FragmentsHook, InFilesDetector} from '@jscpd/finder'; 2 | import {IOptions} from '@jscpd/core'; 3 | 4 | export function registerHooks(options: IOptions, detector: InFilesDetector): void { 5 | detector.registerHook(new FragmentsHook()); 6 | if (options.blame) { 7 | detector.registerHook(new BlamerHook()); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/ignore.ts: -------------------------------------------------------------------------------- 1 | import {IOptions} from '@jscpd/core'; 2 | import {existsSync} from "fs"; 3 | 4 | const gitignoreToGlob = require('gitignore-to-glob'); 5 | 6 | export function initIgnore(options: IOptions): string[] { 7 | const ignore: string[] = options.ignore || []; 8 | 9 | if (options.gitignore && existsSync(process.cwd() + '/.gitignore')) { 10 | let gitignorePatterns: string[] = gitignoreToGlob(process.cwd() + '/.gitignore') || []; 11 | gitignorePatterns = gitignorePatterns.map((pattern) => 12 | pattern.substr(pattern.length - 1) === '/' ? `${pattern}**/*` : pattern, 13 | ); 14 | ignore.push(...gitignorePatterns); 15 | ignore.map((pattern) => pattern.replace('!', '')); 16 | } 17 | return ignore; 18 | } 19 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/index.ts: -------------------------------------------------------------------------------- 1 | export * from './cli'; 2 | export * from './options'; 3 | export * from './ignore'; 4 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/options.ts: -------------------------------------------------------------------------------- 1 | import {Command} from 'commander'; 2 | import {getModeHandler, IOptions} from '@jscpd/core'; 3 | import {getSupportedFormats} from '@jscpd/tokenizer'; 4 | import {initIgnore} from './ignore'; 5 | import {prepareOptions} from '../options'; 6 | 7 | export function initOptionsFromCli(cli: Command): IOptions { 8 | const options: IOptions = prepareOptions(cli); 9 | 10 | options.format = options.format || getSupportedFormats(); 11 | 12 | options.mode = getModeHandler(options.mode); 13 | 14 | options.ignore = initIgnore(options); 15 | 16 | return options; 17 | } 18 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/store.ts: -------------------------------------------------------------------------------- 1 | import {IMapFrame, IStore, MemoryStore} from '@jscpd/core'; 2 | import {red} from 'colors/safe'; 3 | 4 | export function getStore(storeName: string | undefined): IStore<IMapFrame> { 5 | if (storeName) { 6 | const packageName = '@jscpd/' + storeName + '-store'; 7 | try { 8 | const store = require(packageName).default; 9 | return new store(); 10 | } catch (e) { 11 | console.error(red('store name ' + storeName + ' not installed.')) 12 | } 13 | } 14 | return new MemoryStore<IMapFrame>(); 15 | } 16 | -------------------------------------------------------------------------------- /apps/jscpd/src/init/subscribers.ts: -------------------------------------------------------------------------------- 1 | import {InFilesDetector, ProgressSubscriber, VerboseSubscriber} from '@jscpd/finder'; 2 | import {IOptions} from '@jscpd/core'; 3 | 4 | export function registerSubscribers(options: IOptions, detector: InFilesDetector): void { 5 | if (options.verbose) { 6 | detector.registerSubscriber(new VerboseSubscriber(options)); 7 | } 8 | 9 | if (!options.silent) { 10 | detector.registerSubscriber(new ProgressSubscriber(options)); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/jscpd/src/print/files.ts: -------------------------------------------------------------------------------- 1 | import {bold, grey} from 'colors/safe'; 2 | import {EntryWithContent} from '@jscpd/finder'; 3 | 4 | export function printFiles(files: EntryWithContent[]): void { 5 | files.forEach((stats: EntryWithContent) => { 6 | console.log(grey(stats.path)); 7 | }); 8 | console.log(bold(`Found ${files.length} files to detect.`)); 9 | } 10 | -------------------------------------------------------------------------------- /apps/jscpd/src/print/index.ts: -------------------------------------------------------------------------------- 1 | export * from './files'; 2 | export * from './options'; 3 | export * from './supported-format'; 4 | -------------------------------------------------------------------------------- /apps/jscpd/src/print/options.ts: -------------------------------------------------------------------------------- 1 | import {IOptions} from '@jscpd/core'; 2 | import {bold, white} from 'colors/safe'; 3 | 4 | export function printOptions(options: IOptions): void { 5 | console.log(bold(white('Options:'))); 6 | console.dir(options); 7 | } 8 | -------------------------------------------------------------------------------- /apps/jscpd/src/print/supported-format.ts: -------------------------------------------------------------------------------- 1 | import {bold, white} from 'colors/safe'; 2 | import {getSupportedFormats} from '@jscpd/tokenizer'; 3 | 4 | export function printSupportedFormat(): void { 5 | console.log(bold(white('Supported formats: '))); 6 | console.log(getSupportedFormats().join(', ')); 7 | process.exit(0); 8 | } 9 | -------------------------------------------------------------------------------- /apps/jscpd/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.build.json", 3 | 4 | "compilerOptions": { 5 | "outDir": "./dist" 6 | }, 7 | 8 | "include": [ 9 | "src/**/*" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /apps/jscpd/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node20/tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "dist/src", 5 | "baseUrl": ".", 6 | "module": "esnext", 7 | "moduleResolution": "bundler", 8 | "allowUnusedLabels": false, 9 | "allowUnreachableCode": false, 10 | "noFallthroughCasesInSwitch": true, 11 | "noUncheckedIndexedAccess": true, 12 | "noUnusedLocals": true, 13 | "noUnusedParameters": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "declaration": true, 16 | "sourceMap": true, 17 | "resolveJsonModule": true 18 | }, 19 | "include": ["src"], 20 | "exclude": ["dist", "bundle", "node_modules"], 21 | "ts-node": { 22 | // these options are overrides used only by ts-node 23 | // same as the --compilerOptions flag and the TS_NODE_COMPILER_OPTIONS environment variable 24 | "compilerOptions": { 25 | "module": "commonjs" 26 | } 27 | }, 28 | } 29 | -------------------------------------------------------------------------------- /apps/jscpd/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | entry: ["bin/jscpd.ts", "src/index.ts"], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ["esm", "cjs"], 9 | }); 10 | -------------------------------------------------------------------------------- /assets/jscpd-badge.svg: -------------------------------------------------------------------------------- 1 | <svg width="101.6" height="20" viewBox="0 0 1016 200" xmlns="http://www.w3.org/2000/svg"> 2 | <g> 3 | <rect fill="#555" width="726" height="200"/> 4 | <rect fill="#3C1" x="726" width="290" height="200"/> 5 | </g> 6 | <g fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110"> 7 | <text x="60" y="148" textLength="626" fill="#000" opacity="0.1">Copy/Paste</text> 8 | <text x="50" y="138" textLength="626">Copy/Paste</text> 9 | <text x="781" y="148" textLength="190" fill="#000" opacity="0.1">0%</text> 10 | <text x="771" y="138" textLength="190">0%</text> 11 | </g> 12 | 13 | </svg> -------------------------------------------------------------------------------- /assets/logo-small-box.svg: -------------------------------------------------------------------------------- 1 | <svg width="204" height="85" xmlns="http://www.w3.org/2000/svg"> 2 | <g> 3 | <title>jscpd v1.0.0</title> 4 | <g id="svg_5"> 5 | <text font-weight="normal" xml:space="preserve" text-anchor="start" font-family="'Courier New', Courier, monospace" font-size="70" id="svg_1" y="58.5" x="0" stroke-width="0" stroke="#000" fill="#007bff">js</text> 6 | <text font-weight="normal" xml:space="preserve" text-anchor="start" font-family="'Courier New', Courier, monospace" font-size="70" id="svg_3" y="58.5" x="78" stroke-width="0" stroke="#000" fill="#B200B2">cpd</text> 7 | <text xml:space="preserve" text-anchor="start" font-family="'Courier New', Courier, monospace" font-size="12" id="version" y="82" x="47" stroke-width="0" stroke="#000" fill="#c0c0c0">Copy/Paste Detector</text> 8 | </g> 9 | </g> 10 | </svg> 11 | -------------------------------------------------------------------------------- /assets/logo-small.svg: -------------------------------------------------------------------------------- 1 | <svg width="1000" height="300" xmlns="http://www.w3.org/2000/svg" clip-rule="evenodd"> 2 | <g> 3 | <title transform="translate(398,110) ">jscpd</title> 4 | <g id="svg_5"> 5 | <text fill="#007bff" stroke="#000" stroke-width="0" x="398" y="168.5" id="svg_1" font-size="70" font-family="'Courier New', Courier, monospace" text-anchor="start" xml:space="preserve" font-weight="normal">js</text> 6 | <text fill="#B200B2" stroke="#000" stroke-width="0" x="476" y="168.5" id="svg_3" font-size="70" font-family="'Courier New', Courier, monospace" text-anchor="start" xml:space="preserve" font-weight="normal">cpd</text> 7 | <!--<text fill="#c0c0c0" stroke="#000" stroke-width="0" x="545" y="180.5" id="version" font-size="10" font-family="'Courier New', Courier, monospace" text-anchor="start" xml:space="preserve">v1.0.0</text>--> 8 | <text transform="matrix(1,0,0,1,0,0) " font-weight="normal" xml:space="preserve" text-anchor="start" font-family="'Courier New', Courier, monospace" font-size="15" id="svg_2" y="200" x="420" stroke-width="0" stroke="#000" fill="#b2b2b2">Copy/Paste Detector</text> 9 | </g> 10 | </g> 11 | </svg> 12 | -------------------------------------------------------------------------------- /assets/screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/assets/screenshot-1.png -------------------------------------------------------------------------------- /assets/screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/assets/screenshot-2.png -------------------------------------------------------------------------------- /assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/assets/screenshot.png -------------------------------------------------------------------------------- /build-utils/prismjs-languages-concat.ts: -------------------------------------------------------------------------------- 1 | import {readFileSync, writeFileSync} from 'fs-extra'; 2 | import {sync} from 'fast-glob'; 3 | 4 | const files = sync('node_modules/prismjs/components/prism-*.min.js', { 5 | onlyFiles: true, 6 | }).map((file: string) => readFileSync(file)); 7 | 8 | writeFileSync(process.argv[2], files.join('\n')); 9 | 10 | -------------------------------------------------------------------------------- /build-utils/publish-util.ts: -------------------------------------------------------------------------------- 1 | import {readJsonSync, writeJsonSync} from 'fs-extra'; 2 | 3 | const changePackageJsonFields = (path: string, pairs: { name: string; value: string }[] = []): void => { 4 | const pkg = readJsonSync(path); 5 | pairs.forEach((pair: { name: string; value: string }) => { 6 | pkg[pair.name] = pair.value; 7 | }); 8 | writeJsonSync(path, pkg, {spaces: 2}); 9 | }; 10 | 11 | if (!module.parent) { 12 | const [, , path, value] = process.argv; 13 | changePackageJsonFields(path, [ 14 | {name: 'main', value}, 15 | {name: 'types', value}, 16 | ]); 17 | } 18 | -------------------------------------------------------------------------------- /examples/api/example-detectClones.ts: -------------------------------------------------------------------------------- 1 | import {detectClones} from "../../apps/jscpd"; 2 | 3 | (async () => { 4 | const clones = await detectClones({ 5 | path: [ 6 | __dirname + '/../fixtures' 7 | ], 8 | silent: true 9 | }); 10 | console.log(clones); 11 | })() 12 | -------------------------------------------------------------------------------- /examples/api/example-jscpd.ts: -------------------------------------------------------------------------------- 1 | import {IClone} from '@jscpd/core'; 2 | import {jscpd} from '../../apps/jscpd'; 3 | 4 | (async () => { 5 | const clones: IClone[] = await jscpd(['', '', __dirname + '/../fixtures', '-m', 'weak', '--silent']); 6 | console.log(clones); 7 | })(); 8 | -------------------------------------------------------------------------------- /examples/api/example-persist-store.ts: -------------------------------------------------------------------------------- 1 | import {detectClones} from "../../apps/jscpd"; 2 | import {IMapFrame, MemoryStore} from "@jscpd/core"; 3 | 4 | (async () => { 5 | const store = new MemoryStore<IMapFrame>(); 6 | 7 | await detectClones({ 8 | path: [ 9 | __dirname + '/../fixtures' 10 | ], 11 | }, store); 12 | 13 | await detectClones({ 14 | path: [ 15 | __dirname + '/../fixtures' 16 | ], 17 | silent: true 18 | }, store); 19 | })() 20 | -------------------------------------------------------------------------------- /fixtures/.jscpd.json: -------------------------------------------------------------------------------- 1 | { 2 | "path": [ 3 | "./yaml" 4 | ], 5 | "silent": true 6 | } 7 | -------------------------------------------------------------------------------- /fixtures/apl/file1.apl: -------------------------------------------------------------------------------- 1 | :Namespace each_tests 2 | 3 | I←{⍬≡⍴⍵:⍵ ⋄ ⊃((⎕DR ⍵)323)⎕DR ⍵}¯5000+?100⍴10000 4 | F←100÷⍨?100⍴10000 5 | B←?10⍴2 6 | 7 | each∆dpii_TEST←'each∆R1'#.util.MK∆T2 I I 8 | each∆dpiis_TEST←'each∆R1'#.util.MK∆T2 4 5 9 | each∆dpff_TEST←'each∆R1'#.util.MK∆T2 F F 10 | each∆dpif_TEST←'each∆R1'#.util.MK∆T2 I F 11 | each∆dpfi_TEST←'each∆R1'#.util.MK∆T2 F I 12 | each∆duffs_TEST←'each∆R2'#.util.MK∆T2 5.5 3.1 13 | each∆duii_TEST←'each∆R2'#.util.MK∆T2 I I 14 | each∆duff_TEST←'each∆R2'#.util.MK∆T2 F F 15 | each∆duif_TEST←'each∆R2'#.util.MK∆T2 I F 16 | each∆dufi_TEST←'each∆R2'#.util.MK∆T2 F I 17 | each∆mui_TEST←'each∆R3'#.util.MK∆T2 I (I~0) 18 | each∆muf_TEST←'each∆R3'#.util.MK∆T2 F F 19 | each∆mub_TEST←'each∆R6'#.util.MK∆T2 B B 20 | each∆mpi_TEST←'each∆R4'#.util.MK∆T2 I (I~0) 21 | each∆mpf_TEST←'each∆R4'#.util.MK∆T2 F F 22 | each∆mpb_TEST←'each∆R5'#.util.MK∆T2 B B 23 | each∆durep_TEST←'each∆R7'#.util.MK∆T2 I (⍉⍪I) 24 | 25 | :EndNamespace -------------------------------------------------------------------------------- /fixtures/apl/file2.apl: -------------------------------------------------------------------------------- 1 | :Namespace each_tests 2 | 3 | I←{⍬≡⍴⍵:⍵ ⋄ ⊃((⎕DR ⍵)323)⎕DR ⍵}¯5000+?100⍴10000 4 | F←100÷⍨?100⍴10000 5 | B←?10⍴2 6 | 7 | each∆dpii_TEST←'each∆R1'#.util.MK∆T2 I I 8 | each∆dpiis_TEST←'each∆R1'#.util.MK∆T2 4 5 9 | each∆dpff_TEST←'each∆R1'#.util.MK∆T2 F F 10 | each∆dpif_TEST←'each∆R1'#.util.MK∆T2 I F 11 | each∆dpfi_TEST←'each∆R1'#.util.MK∆T2 F I 12 | each∆duffs_TEST←'each∆R2'#.util.MK∆T2 5.5 3.1 13 | each∆duii_TEST←'each∆R2'#.util.MK∆T2 I I 14 | each∆duff_TEST←'each∆R2'#.util.MK∆T2 F F 15 | each∆duif_TEST←'each∆R2'#.util.MK∆T2 I F 16 | each∆dufi_TEST←'each∆R2'#.util.MK∆T2 F I 17 | each∆mui_TEST←'each∆R3'#.util.MK∆T2 I (I~0) 18 | each∆muf_TEST←'each∆R3'#.util.MK∆T2 F F 19 | each∆mub_TEST←'each∆R6'#.util.MK∆T2 B B 20 | each∆mpi_TEST←'each∆R4'#.util.MK∆T2 I (I~0) 21 | 22 | :EndNamespace -------------------------------------------------------------------------------- /fixtures/clike/file1.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | return wp; 19 | } 20 | -------------------------------------------------------------------------------- /fixtures/clike/file1.c++: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.c++ -------------------------------------------------------------------------------- /fixtures/clike/file1.cc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.cc -------------------------------------------------------------------------------- /fixtures/clike/file1.cxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.cxx -------------------------------------------------------------------------------- /fixtures/clike/file1.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | return wp; 19 | } 20 | -------------------------------------------------------------------------------- /fixtures/clike/file1.h++: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.h++ -------------------------------------------------------------------------------- /fixtures/clike/file1.hh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.hh -------------------------------------------------------------------------------- /fixtures/clike/file1.hxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.hxx -------------------------------------------------------------------------------- /fixtures/clike/file1.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.kt -------------------------------------------------------------------------------- /fixtures/clike/file1.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.m -------------------------------------------------------------------------------- /fixtures/clike/file1.mm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.mm -------------------------------------------------------------------------------- /fixtures/clike/file1.nut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file1.nut -------------------------------------------------------------------------------- /fixtures/clike/file2.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | win_T *wp = NULL; 19 | win_T *wp2; 20 | 21 | fr->fr_height = sn->fr_height; 22 | fr->fr_width = sn->fr_width; 23 | if (fr->fr_layout == FR_LEAF) { 24 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 25 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 26 | wp = sn->fr_win; 27 | } 28 | return wp; 29 | } 30 | -------------------------------------------------------------------------------- /fixtures/clike/file2.c++: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.c++ -------------------------------------------------------------------------------- /fixtures/clike/file2.cc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.cc -------------------------------------------------------------------------------- /fixtures/clike/file2.cxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.cxx -------------------------------------------------------------------------------- /fixtures/clike/file2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | win_T *wp = NULL; 19 | win_T *wp2; 20 | 21 | fr->fr_height = sn->fr_height; 22 | fr->fr_width = sn->fr_width; 23 | if (fr->fr_layout == FR_LEAF) { 24 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 25 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 26 | wp = sn->fr_win; 27 | } 28 | return wp; 29 | } 30 | -------------------------------------------------------------------------------- /fixtures/clike/file2.h++: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.h++ -------------------------------------------------------------------------------- /fixtures/clike/file2.hh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.hh -------------------------------------------------------------------------------- /fixtures/clike/file2.hxx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.hxx -------------------------------------------------------------------------------- /fixtures/clike/file2.kt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.kt -------------------------------------------------------------------------------- /fixtures/clike/file2.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.m -------------------------------------------------------------------------------- /fixtures/clike/file2.mm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.mm -------------------------------------------------------------------------------- /fixtures/clike/file2.nut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clike/file2.nut -------------------------------------------------------------------------------- /fixtures/clojure/file1.clj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file1.clj -------------------------------------------------------------------------------- /fixtures/clojure/file1.cljc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file1.cljc -------------------------------------------------------------------------------- /fixtures/clojure/file1.cljs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file1.cljs -------------------------------------------------------------------------------- /fixtures/clojure/file1.cljx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file1.cljx -------------------------------------------------------------------------------- /fixtures/clojure/file1.edn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file1.edn -------------------------------------------------------------------------------- /fixtures/clojure/file2.clj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file2.clj -------------------------------------------------------------------------------- /fixtures/clojure/file2.cljc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file2.cljc -------------------------------------------------------------------------------- /fixtures/clojure/file2.cljs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file2.cljs -------------------------------------------------------------------------------- /fixtures/clojure/file2.cljx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file2.cljx -------------------------------------------------------------------------------- /fixtures/clojure/file2.edn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/clojure/file2.edn -------------------------------------------------------------------------------- /fixtures/cmake/file1.cmake: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cmake/file1.cmake -------------------------------------------------------------------------------- /fixtures/cmake/file1.cmake.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cmake/file1.cmake.in -------------------------------------------------------------------------------- /fixtures/cmake/file2.cmake: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cmake/file2.cmake -------------------------------------------------------------------------------- /fixtures/cmake/file2.cmake.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cmake/file2.cmake.in -------------------------------------------------------------------------------- /fixtures/cobol/file1.cob: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cobol/file1.cob -------------------------------------------------------------------------------- /fixtures/cobol/file1.cpy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cobol/file1.cpy -------------------------------------------------------------------------------- /fixtures/cobol/file2.cob: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cobol/file2.cob -------------------------------------------------------------------------------- /fixtures/cobol/file2.cpy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cobol/file2.cpy -------------------------------------------------------------------------------- /fixtures/coffeescript/file2.coffee: -------------------------------------------------------------------------------- 1 | console.log "!!!" 2 | 3 | shjs = require "shelljs" 4 | 5 | class Clone 6 | constructor: (@firstFile, @secondFile, @firstFileStart, @secondFileStart, @linesCount, @tokensCount)-> 7 | 8 | getLines: -> 9 | code = shjs.cat(@firstFile) 10 | lines = code.split '\n' 11 | start = @firstFileStart 12 | end = start + @linesCount 13 | lines[start..end].join("\n") 14 | 15 | exports.Clone = Clone 16 | -------------------------------------------------------------------------------- /fixtures/commonlisp/file1.cl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file1.cl -------------------------------------------------------------------------------- /fixtures/commonlisp/file1.el: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file1.el -------------------------------------------------------------------------------- /fixtures/commonlisp/file1.lisp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file1.lisp -------------------------------------------------------------------------------- /fixtures/commonlisp/file2.cl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file2.cl -------------------------------------------------------------------------------- /fixtures/commonlisp/file2.el: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file2.el -------------------------------------------------------------------------------- /fixtures/commonlisp/file2.lisp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/commonlisp/file2.lisp -------------------------------------------------------------------------------- /fixtures/crystal/file1.cr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/crystal/file1.cr -------------------------------------------------------------------------------- /fixtures/crystal/file2.cr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/crystal/file2.cr -------------------------------------------------------------------------------- /fixtures/css/file1.css: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | -moz-box-shadow: @style @c; 6 | box-shadow: @style @c; 7 | } 8 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 9 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 10 | } 11 | .box { 12 | color: saturate(@base, 5%); 13 | border-color: lighten(@base, 30%); 14 | div { .box-shadow(0 0 5px, 30%) } 15 | } 16 | .box3 { 17 | color: saturate(@base, 5%); 18 | border-color: lighten(@base, 30%); 19 | div { .box-shadow(0 0 5px, 30%) } 20 | .box2 { 21 | color: saturate(@base, 5%); 22 | border-color: lighten(@base, 30%); 23 | div { .box-shadow(0 0 5px, 30%) } 24 | } 25 | } -------------------------------------------------------------------------------- /fixtures/css/file1.gss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/css/file1.gss -------------------------------------------------------------------------------- /fixtures/css/file1.less: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | -moz-box-shadow: @style @c; 6 | box-shadow: @style @c; 7 | } 8 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 9 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 10 | } 11 | .box { 12 | color: saturate(@base, 5%); 13 | border-color: lighten(@base, 30%); 14 | div { .box-shadow(0 0 5px, 30%) } 15 | } 16 | .box3 { 17 | color: saturate(@base, 5%); 18 | border-color: lighten(@base, 30%); 19 | div { .box-shadow(0 0 5px, 30%) } 20 | .box2 { 21 | color: saturate(@base, 5%); 22 | border-color: lighten(@base, 30%); 23 | div { .box-shadow(0 0 5px, 30%) } 24 | } 25 | } 26 | 27 | .box3 { 28 | color: saturate(@base, 5%); 29 | border-color: lighten(@base, 30%); 30 | div { .box-shadow(0 0 5px, 30%) } 31 | .box2 { 32 | color: saturate(@base, 5%); 33 | border-color: lighten(@base, 30%); 34 | div { .box-shadow(0 0 5px, 30%) } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /fixtures/css/file1.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/css/file1.scss -------------------------------------------------------------------------------- /fixtures/css/file10.css: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | -moz-box-shadow: @style @c; 6 | box-shadow: @style @c; 7 | } 8 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 9 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 10 | } 11 | .box { 12 | color: saturate(@base, 5%); 13 | border-color: lighten(@base, 30%); 14 | div { .box-shadow(0 0 5px, 30%) } 15 | } 16 | .box3 { 17 | color: saturate(@base, 5%); 18 | border-color: lighten(@base, 30%); 19 | div { .box-shadow(0 0 5px, 30%) } 20 | .box2 { 21 | color: saturate(@base, 5%); 22 | border-color: lighten(@base, 30%); 23 | div { .box-shadow(0 0 5px, 30%) } 24 | } 25 | } -------------------------------------------------------------------------------- /fixtures/css/file2.css: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | -moz-box-shadow: @style @c; 6 | box-shadow: @style @c; 7 | } 8 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 9 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 10 | } 11 | .box { 12 | color: saturate(@base, 5%); 13 | border-color: lighten(@base, 30%); 14 | div { .box-shadow(0 0 5px, 30%) } 15 | } 16 | .box3 { 17 | color: saturate(@base, 5%); 18 | border-color: lighten(@base, 30%); 19 | div { .box-shadow(0 0 5px, 30%) } 20 | } -------------------------------------------------------------------------------- /fixtures/css/file2.gss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/css/file2.gss -------------------------------------------------------------------------------- /fixtures/css/file2.less: -------------------------------------------------------------------------------- 1 | @base: #f938ab; 2 | 3 | .box-shadow(@style, @c) when (iscolor(@c)) { 4 | -webkit-box-shadow: @style @c; 5 | -moz-box-shadow: @style @c; 6 | box-shadow: @style @c; 7 | } 8 | .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { 9 | .box-shadow(@style, rgba(0, 0, 0, @alpha)); 10 | } 11 | .box { 12 | color: saturate(@base, 5%); 13 | border-color: lighten(@base, 30%); 14 | div { .box-shadow(0 0 5px, 30%) } 15 | } 16 | .box3 { 17 | color: saturate(@base, 5%); 18 | border-color: lighten(@base, 30%); 19 | div { .box-shadow(0 0 5px, 30%) } 20 | } -------------------------------------------------------------------------------- /fixtures/css/file2.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/css/file2.scss -------------------------------------------------------------------------------- /fixtures/custom/file.cc1: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | win_T *wp = NULL; 19 | win_T *wp2; 20 | 21 | fr->fr_height = sn->fr_height; 22 | fr->fr_width = sn->fr_width; 23 | if (fr->fr_layout == FR_LEAF) { 24 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 25 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 26 | wp = sn->fr_win; 27 | } 28 | return wp; 29 | } 30 | -------------------------------------------------------------------------------- /fixtures/custom/file.ccc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | win_T *wp = NULL; 19 | win_T *wp2; 20 | 21 | fr->fr_height = sn->fr_height; 22 | fr->fr_width = sn->fr_width; 23 | if (fr->fr_layout == FR_LEAF) { 24 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 25 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 26 | wp = sn->fr_win; 27 | } 28 | return wp; 29 | } 30 | -------------------------------------------------------------------------------- /fixtures/cypher/file1.cyp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cypher/file1.cyp -------------------------------------------------------------------------------- /fixtures/cypher/file1.cypher: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cypher/file1.cypher -------------------------------------------------------------------------------- /fixtures/cypher/file2.cyp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cypher/file2.cyp -------------------------------------------------------------------------------- /fixtures/cypher/file2.cypher: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/cypher/file2.cypher -------------------------------------------------------------------------------- /fixtures/diff/file1.diff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/diff/file1.diff -------------------------------------------------------------------------------- /fixtures/diff/file1.patch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/diff/file1.patch -------------------------------------------------------------------------------- /fixtures/diff/file2.diff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/diff/file2.diff -------------------------------------------------------------------------------- /fixtures/diff/file2.patch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/diff/file2.patch -------------------------------------------------------------------------------- /fixtures/dtd/file1.dtd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dtd/file1.dtd -------------------------------------------------------------------------------- /fixtures/dtd/file2.dtd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dtd/file2.dtd -------------------------------------------------------------------------------- /fixtures/dylan/file1.dyl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file1.dyl -------------------------------------------------------------------------------- /fixtures/dylan/file1.dylan: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file1.dylan -------------------------------------------------------------------------------- /fixtures/dylan/file1.intr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file1.intr -------------------------------------------------------------------------------- /fixtures/dylan/file2.dyl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file2.dyl -------------------------------------------------------------------------------- /fixtures/dylan/file2.dylan: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file2.dylan -------------------------------------------------------------------------------- /fixtures/dylan/file2.intr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/dylan/file2.intr -------------------------------------------------------------------------------- /fixtures/ecl/file1.ecl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ecl/file1.ecl -------------------------------------------------------------------------------- /fixtures/ecl/file2.ecl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ecl/file2.ecl -------------------------------------------------------------------------------- /fixtures/eiffel/file1.e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/eiffel/file1.e -------------------------------------------------------------------------------- /fixtures/eiffel/file2.e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/eiffel/file2.e -------------------------------------------------------------------------------- /fixtures/elm/file1.elm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/elm/file1.elm -------------------------------------------------------------------------------- /fixtures/elm/file2.elm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/elm/file2.elm -------------------------------------------------------------------------------- /fixtures/factor/file1.factor: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/factor/file1.factor -------------------------------------------------------------------------------- /fixtures/factor/file2.factor: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/factor/file2.factor -------------------------------------------------------------------------------- /fixtures/folder1/file2.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copy the size of snapshot frame "sn" to frame "fr". Do the same for all 3 | * following frames and children. 4 | * Returns a pointer to the old current window, or NULL. 5 | */ 6 | static win_T *restore_snapshot_rec(frame_T *sn, frame_T *fr) 7 | { 8 | win_T *wp = NULL; 9 | win_T *wp2; 10 | 11 | fr->fr_height = sn->fr_height; 12 | fr->fr_width = sn->fr_width; 13 | if (fr->fr_layout == FR_LEAF) { 14 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 15 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 16 | wp = sn->fr_win; 17 | } 18 | win_T *wp = NULL; 19 | win_T *wp2; 20 | 21 | fr->fr_height = sn->fr_height; 22 | fr->fr_width = sn->fr_width; 23 | if (fr->fr_layout == FR_LEAF) { 24 | frame_new_height(fr, fr->fr_height, FALSE, FALSE); 25 | frame_new_width(fr, fr->fr_width, FALSE, FALSE); 26 | wp = sn->fr_win; 27 | } 28 | return wp; 29 | } 30 | -------------------------------------------------------------------------------- /fixtures/forth/file1.4th: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file1.4th -------------------------------------------------------------------------------- /fixtures/forth/file1.forth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file1.forth -------------------------------------------------------------------------------- /fixtures/forth/file1.fth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file1.fth -------------------------------------------------------------------------------- /fixtures/forth/file2.4th: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file2.4th -------------------------------------------------------------------------------- /fixtures/forth/file2.forth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file2.forth -------------------------------------------------------------------------------- /fixtures/forth/file2.fth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/forth/file2.fth -------------------------------------------------------------------------------- /fixtures/fortran/file1.f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file1.f -------------------------------------------------------------------------------- /fixtures/fortran/file1.f77: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file1.f77 -------------------------------------------------------------------------------- /fixtures/fortran/file1.f90: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file1.f90 -------------------------------------------------------------------------------- /fixtures/fortran/file1.for: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file1.for -------------------------------------------------------------------------------- /fixtures/fortran/file2.f: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file2.f -------------------------------------------------------------------------------- /fixtures/fortran/file2.f77: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file2.f77 -------------------------------------------------------------------------------- /fixtures/fortran/file2.f90: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file2.f90 -------------------------------------------------------------------------------- /fixtures/fortran/file2.for: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/fortran/file2.for -------------------------------------------------------------------------------- /fixtures/gas/file1.s: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/gas/file1.s -------------------------------------------------------------------------------- /fixtures/gas/file2.s: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/gas/file2.s -------------------------------------------------------------------------------- /fixtures/gherkin/file1.feature: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/gherkin/file1.feature -------------------------------------------------------------------------------- /fixtures/gherkin/file2.feature: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/gherkin/file2.feature -------------------------------------------------------------------------------- /fixtures/go/file1.go: -------------------------------------------------------------------------------- 1 | package bfs 2 | 3 | import ( 4 | "github.com/arnauddri/algorithms/algorithms/graphs/bfs" 5 | "github.com/arnauddri/algorithms/data-structures/graph" 6 | ) 7 | 8 | func ShortestPath(g *graph.DirGraph, start graph.VertexId) (dist map[graph.VertexId]int) { 9 | dist = make(map[graph.VertexId]int) 10 | visited := make(map[graph.VertexId]bool) 11 | 12 | getDist := func(v graph.VertexId) { 13 | neighbours := g.GetNeighbours(v).VerticesIter() 14 | visited[v] = true 15 | 16 | for neighbour := range neighbours { 17 | 18 | ok, _ := visited[neighbour] 19 | if !ok { 20 | dist[neighbour] = dist[v] + 1 21 | } 22 | } 23 | } 24 | 25 | bfs.Bfs(g, start, getDist) 26 | 27 | return 28 | } 29 | 30 | func GetDist(g *graph.DirGraph, from graph.VertexId, to graph.VertexId) int { 31 | return ShortestPath(g, from)[to] 32 | } 33 | -------------------------------------------------------------------------------- /fixtures/go/file2.go: -------------------------------------------------------------------------------- 1 | package bfs 2 | 3 | import ( 4 | "github.com/arnauddri/algorithms/algorithms/graphs/bfs" 5 | "github.com/arnauddri/algorithms/data-structures/graph" 6 | ) 7 | 8 | func ShortestPath(g *graph.DirGraph, start graph.VertexId) (dist map[graph.VertexId]int) { 9 | dist = make(map[graph.VertexId]int) 10 | visited := make(map[graph.VertexId]bool) 11 | 12 | getDist := func(v graph.VertexId) { 13 | neighbours := g.GetNeighbours(v).VerticesIter() 14 | visited[v] = true 15 | 16 | for neighbour := range neighbours { 17 | 18 | ok, _ := visited[neighbour] 19 | if !ok { 20 | dist[neighbour] = dist[v] + 1 21 | } 22 | } 23 | } 24 | 25 | bfs.Bfs(g, start, getDist) 26 | 27 | return 28 | } 29 | 30 | 31 | func test() { 32 | return 33 | } 34 | -------------------------------------------------------------------------------- /fixtures/groovy/file1.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/groovy/file1.gradle -------------------------------------------------------------------------------- /fixtures/groovy/file1.groovy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/groovy/file1.groovy -------------------------------------------------------------------------------- /fixtures/groovy/file2.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/groovy/file2.gradle -------------------------------------------------------------------------------- /fixtures/groovy/file2.groovy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/groovy/file2.groovy -------------------------------------------------------------------------------- /fixtures/haml/file1.haml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/haml/file1.haml -------------------------------------------------------------------------------- /fixtures/haml/file2.haml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/haml/file2.haml -------------------------------------------------------------------------------- /fixtures/haskell-literate/file1.lhs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/haskell-literate/file1.lhs -------------------------------------------------------------------------------- /fixtures/haskell-literate/file2.lhs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/haskell-literate/file2.lhs -------------------------------------------------------------------------------- /fixtures/haxe/file1.hxml: -------------------------------------------------------------------------------- 1 | -cp test 2 | -js path/to/file.js 3 | #-remap nme:flash 4 | --next 5 | -D source-map-content 6 | -cmd 'test' 7 | -lib lime 8 | -cp test 9 | -js path/to/file.js 10 | #-remap nme:flash 11 | --next 12 | -D source-map-content 13 | -cmd 'test' 14 | -lib lime 15 | -------------------------------------------------------------------------------- /fixtures/haxe/file2.hxml: -------------------------------------------------------------------------------- 1 | #-remap nme:flash 2 | --next 3 | -D source-map-content 4 | -cmd 'test' 5 | -lib lime 6 | -cp test 7 | -js path/to/file.js 8 | #-remap nme:flash 9 | --next 10 | -D source-map-content 11 | -cmd 'test' 12 | -lib lime 13 | -------------------------------------------------------------------------------- /fixtures/htmlembedded/file1.aspx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file1.aspx -------------------------------------------------------------------------------- /fixtures/htmlembedded/file1.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file1.ejs -------------------------------------------------------------------------------- /fixtures/htmlembedded/file1.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file1.erb -------------------------------------------------------------------------------- /fixtures/htmlembedded/file1.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file1.jsp -------------------------------------------------------------------------------- /fixtures/htmlembedded/file2.aspx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file2.aspx -------------------------------------------------------------------------------- /fixtures/htmlembedded/file2.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file2.ejs -------------------------------------------------------------------------------- /fixtures/htmlembedded/file2.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file2.erb -------------------------------------------------------------------------------- /fixtures/htmlembedded/file2.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/htmlembedded/file2.jsp -------------------------------------------------------------------------------- /fixtures/htmlmixed/file1.htm: -------------------------------------------------------------------------------- 1 | <div class="orderSearchReport"> 2 | 3 | <!-- This title must be here due to an IE8 + KO bug that happens to affect the next element --> 4 | <h4 style="visibility: hidden">Order Search</h4> 5 | 6 | <!-- ko if: errorMessages() && errorMessages().length --> 7 | <ul class="validationErrors"> 8 | <li data-bind="foreach: errorMessages()"> 9 | <div class="ui-state-error"> 10 | <span class="ui-icon ui-icon-alert"> </span> 11 | <span data-bind="text: $data"></span> 12 | </div> 13 | </li> 14 | </ul> 15 | <!-- /ko --> 16 | 17 | <!-- ko if: message() --> 18 | <div class="ui-state-highlight"> 19 | <span class="ui-icon ui-icon-info"> </span> 20 | <span data-bind="text: message"></span> 21 | </div> 22 | <!-- /ko --> 23 | 24 | </div> 25 | -------------------------------------------------------------------------------- /fixtures/htmlmixed/file1.html: -------------------------------------------------------------------------------- 1 | <!doctype html> 2 | <html lang="en"> 3 | <head> 4 | <meta charset="UTF-8"> 5 | <meta name="viewport" 6 | content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 7 | <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 | <title>Document</title> 9 | </head> 10 | <body> 11 | <div> 12 | <script>alert('test')</script> 13 | <h1>Test File</h1> 14 | <p>Ololo</p> 15 | </div> 16 | </body> 17 | </html> 18 | -------------------------------------------------------------------------------- /fixtures/htmlmixed/file2.htm: -------------------------------------------------------------------------------- 1 | <div class="orderSearchReport"> 2 | 3 | <!-- This title must be here due to an IE8 + KO bug that happens to affect the next element --> 4 | <h4 style="visibility: hidden">Order Search</h4> 5 | 6 | <!-- ko if: errorMessages() && errorMessages().length --> 7 | <ul class="validationErrors"> 8 | <li data-bind="foreach: errorMessages()"> 9 | <div class="ui-state-error"> 10 | <span class="ui-icon ui-icon-alert"> </span> 11 | <span data-bind="text: $data"></span> 12 | </div> 13 | </li> 14 | </ul> 15 | <!-- /ko --> 16 | 17 | <!-- ko if: message() --> 18 | <div class="ui-state-highlight"> 19 | <span class="ui-icon ui-icon-info"> </span> 20 | <span data-bind="text: message"></span> 21 | </div> 22 | <!-- /ko --> 23 | 24 | </div> 25 | -------------------------------------------------------------------------------- /fixtures/htmlmixed/file2.html: -------------------------------------------------------------------------------- 1 | <!doctype html> 2 | <html lang="en"> 3 | <head> 4 | <meta charset="UTF-8"> 5 | <meta name="viewport" 6 | content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 7 | <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 | <title>Document</title> 9 | </head> 10 | <body> 11 | <div> 12 | <script>alert('test')</script> 13 | <h1>Test File</h1> 14 | <p>Ololo</p> 15 | </div> 16 | <!--<div></div>--> 17 | </body> 18 | </html> 19 | -------------------------------------------------------------------------------- /fixtures/idl/file1.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/idl/file1.pro -------------------------------------------------------------------------------- /fixtures/idl/file2.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/idl/file2.pro -------------------------------------------------------------------------------- /fixtures/ignore-case/file1.txt: -------------------------------------------------------------------------------- 1 | ВОЛХВЫ ПРИШЛИ. МЛАДЕНЕЦ КРЕПКО СПАЛ. 2 | ЗВЕЗДА СВЕТИЛА ЯРКО С НЕБОСВОДА. 3 | ХОЛОДНЫЙ ВЕТЕР СНЕГ В СУГРОБ СГРЕБАЛ. 4 | ШУРШАЛ ПЕСОК. КОСТЕР ТРЕЩАЛ У ВХОДА. 5 | ДЫМ ШЕЛ СВЕЧОЙ. ОГОНЬ ВИЛСЯ КРЮЧКОМ. 6 | И ТЕНИ СТАНОВИЛИСЬ ТО КОРОЧЕ, 7 | ТО ВДРУГ ДЛИННЕЙ. НИКТО НЕ ЗНАЛ КРУГОМ, 8 | ЧТО ЖИЗНИ СЧЕТ НАЧНЕТСЯ С ЭТОЙ НОЧИ. 9 | ВОЛХВЫ ПРИШЛИ. МЛАДЕНЕЦ КРЕПКО СПАЛ. 10 | КРУТЫЕ СВОДЫ ЯСЛИ ОКРУЖАЛИ. 11 | КРУЖИЛСЯ СНЕГ. КЛУБИЛСЯ БЕЛЫЙ ПАР. 12 | ЛЕЖАЛ МЛАДЕНЕЦ, И ДАРЫ ЛЕЖАЛИ. 13 | -------------------------------------------------------------------------------- /fixtures/ignore-pattern/file_1.js: -------------------------------------------------------------------------------- 1 | import a from 'a'; 2 | import b from 'b'; 3 | import c from 'c'; 4 | import d from 'd'; 5 | import e from 'e'; 6 | import f from 'f'; 7 | 8 | const USER_1 = Symbol('USER_1'); 9 | const USER_2 = Symbol('USER_2'); 10 | const USER_3 = Symbol('USER_3'); 11 | const USER_4 = Symbol('USER_4'); 12 | const USER_5 = Symbol('USER_5'); 13 | const USER_6 = Symbol('USER_6'); 14 | 15 | function fibonacci(num, memo) { 16 | memo = memo || {}; 17 | 18 | if (memo[num]) return memo[num]; 19 | if (num <= 1) return 1; 20 | 21 | return memo[num] = fibonacci(num - 1, memo) + fibonacci(num - 2, memo); 22 | } 23 | 24 | export { fibonacci } 25 | -------------------------------------------------------------------------------- /fixtures/ignore-pattern/file_2.js: -------------------------------------------------------------------------------- 1 | import a from 'a'; 2 | import b from 'b'; 3 | import c from 'c'; 4 | import d from 'd'; 5 | import e from 'e'; 6 | import f from 'f'; 7 | 8 | const DELIM = Symbol('|'); 9 | 10 | const USER_1 = Symbol('USER_1'); 11 | const USER_2 = Symbol('USER_2'); 12 | const USER_3 = Symbol('USER_3'); 13 | const USER_4 = Symbol('USER_4'); 14 | const USER_5 = Symbol('USER_5'); 15 | 16 | export function factorial(n){ 17 | let answer = 1; 18 | if (n == 0 || n == 1){ 19 | return answer; 20 | }else{ 21 | for(var i = n; i >= 1; i--){ 22 | answer = answer * i; 23 | } 24 | return answer; 25 | } 26 | } -------------------------------------------------------------------------------- /fixtures/ignore/file1.htm: -------------------------------------------------------------------------------- 1 | <!-- 2 | // jscpd:ignore-start 3 | --> 4 | <div class="orderSearchReport"> 5 | 6 | <!-- This title must be here due to an IE8 + KO bug that happens to affect the next element --> 7 | <h4 style="visibility: hidden">Order Search</h4> 8 | 9 | <!-- ko if: errorMessages() && errorMessages().length --> 10 | <ul class="validationErrors"> 11 | <li data-bind="foreach: errorMessages()"> 12 | <div class="ui-state-error"> 13 | <span class="ui-icon ui-icon-alert"> </span> 14 | <span data-bind="text: $data"></span> 15 | </div> 16 | </li> 17 | </ul> 18 | <!-- /ko --> 19 | 20 | <!-- ko if: message() --> 21 | <div class="ui-state-highlight"> 22 | <span class="ui-icon ui-icon-info"> </span> 23 | <span data-bind="text: message"></span> 24 | </div> 25 | <!-- /ko --> 26 | 27 | </div> 28 | <!-- 29 | // jscpd:ignore-end 30 | --> 31 | -------------------------------------------------------------------------------- /fixtures/ignore/file2.htm: -------------------------------------------------------------------------------- 1 | <div class="orderSearchReport"> 2 | 3 | <!-- This title must be here due to an IE8 + KO bug that happens to affect the next element --> 4 | <h4 style="visibility: hidden">Order Search</h4> 5 | 6 | <!-- ko if: errorMessages() && errorMessages().length --> 7 | <ul class="validationErrors"> 8 | <li data-bind="foreach: errorMessages()"> 9 | <div class="ui-state-error"> 10 | <span class="ui-icon ui-icon-alert"> </span> 11 | <span data-bind="text: $data"></span> 12 | </div> 13 | </li> 14 | </ul> 15 | <!-- /ko --> 16 | 17 | <!-- ko if: message() --> 18 | <div class="ui-state-highlight"> 19 | <span class="ui-icon ui-icon-info"> </span> 20 | <span data-bind="text: message"></span> 21 | </div> 22 | <!-- /ko --> 23 | 24 | </div> 25 | -------------------------------------------------------------------------------- /fixtures/javascript/file1.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hello 3 | * @type {{html: {template: string}, webpack: (function(*))}} 4 | */ 5 | module.exports = { 6 | html: { 7 | template: 'src/index.html' 8 | }, 9 | webpack (config) { 10 | config.module.rules.push({ 11 | test: /\.(code|path)$/, 12 | use: [{ loader: 'raw-loader' }] 13 | }) 14 | config.module.rules.push({ 15 | test: /\.(code|path)$/, 16 | use: [{ loader: 'raw-loader' }] 17 | }) 18 | config.module.rules.push({ 19 | test: /\.(code|path)$/, 20 | use: [{ loader: 'raw-loader' }] 21 | }) 22 | return config 23 | } 24 | } -------------------------------------------------------------------------------- /fixtures/javascript/file1.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file1.json -------------------------------------------------------------------------------- /fixtures/javascript/file1.jsonld: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file1.jsonld -------------------------------------------------------------------------------- /fixtures/javascript/file1.map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file1.map -------------------------------------------------------------------------------- /fixtures/javascript/file2.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hello 3 | * @type {{html: {template: string}, webpack: (function(*))}} 4 | */ 5 | module.exports = { 6 | html: { 7 | template: 'src/index.html' 8 | }, 9 | webpack (config) { 10 | config.module.rules.push({ 11 | test: /\.(code|path)$/, 12 | use: [{ loader: 'raw-loader' }] 13 | }) 14 | config.module.rules.push({ 15 | test: /\.(code|path)$/, 16 | use: [{ loader: 'raw-loader' }] 17 | }) 18 | config.module.rules.push({ 19 | test: /\.(code|path)$/, 20 | use: [{ loader: 'raw-loader' }] 21 | }) 22 | 23 | 24 | 25 | return config 26 | } 27 | } -------------------------------------------------------------------------------- /fixtures/javascript/file2.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file2.json -------------------------------------------------------------------------------- /fixtures/javascript/file2.jsonld: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file2.jsonld -------------------------------------------------------------------------------- /fixtures/javascript/file2.map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/javascript/file2.map -------------------------------------------------------------------------------- /fixtures/jsx/file1.jsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import PropTypes from 'prop-types'; 4 | 5 | import Media from './Media'; 6 | import { bsClass, getClassSet, prefix, splitBsProps } 7 | from './utils/bootstrapUtils'; 8 | 9 | const propTypes = { 10 | /** 11 | * Align the media to the top, middle, or bottom of the media object. 12 | */ 13 | align: PropTypes.oneOf(['top', 'middle', 'bottom']), 14 | }; 15 | 16 | class MediaRight extends React.Component { 17 | render() { 18 | const { align, className, ...props } = this.props; 19 | const [bsProps, elementProps] = splitBsProps(props); 20 | 21 | const classes = getClassSet(bsProps); 22 | 23 | return ( 24 | <div 25 | {...elementProps} 26 | className={classNames(className, classes)} 27 | /> 28 | ); 29 | } 30 | } 31 | 32 | MediaRight.propTypes = propTypes; 33 | 34 | export default bsClass('media-right', MediaRight); -------------------------------------------------------------------------------- /fixtures/jsx/file1.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import PropTypes from 'prop-types'; 4 | 5 | import Media from './Media'; 6 | import { bsClass, getClassSet, prefix, splitBsProps } 7 | from './utils/bootstrapUtils'; 8 | 9 | const propTypes = { 10 | /** 11 | * Align the media to the top, middle, or bottom of the media object. 12 | */ 13 | align: PropTypes.oneOf(['top', 'middle', 'bottom']), 14 | }; 15 | 16 | class MediaRight extends React.Component { 17 | render() { 18 | const { align, className, ...props } = this.props; 19 | const [bsProps, elementProps] = splitBsProps(props); 20 | 21 | const classes = getClassSet(bsProps); 22 | 23 | if (align) { 24 | // The class is e.g. `media-top`, not `media-right-top`. 25 | classes[prefix(Media.defaultProps, align)] = true; 26 | } 27 | 28 | return ( 29 | <div 30 | {...elementProps} 31 | className={classNames(className, classes)} 32 | /> 33 | ); 34 | } 35 | } 36 | 37 | MediaRight.propTypes = propTypes; 38 | 39 | export default bsClass('media-right', MediaRight); -------------------------------------------------------------------------------- /fixtures/jsx/file2.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import PropTypes from 'prop-types'; 4 | 5 | import Media from './Media'; 6 | import { bsClass, getClassSet, prefix, splitBsProps } 7 | from './utils/bootstrapUtils'; 8 | 9 | const propTypes = { 10 | /** 11 | * Align the media to the top, middle, or bottom of the media object. 12 | */ 13 | align: PropTypes.oneOf(['top', 'middle', 'bottom']), 14 | }; 15 | 16 | class MediaRight extends React.Component { 17 | render() { 18 | const { align, className, ...props } = this.props; 19 | const [bsProps, elementProps] = splitBsProps(props); 20 | 21 | const classes = getClassSet(bsProps); 22 | 23 | if (align) { 24 | // The class is e.g. `media-top`, not `media-right-top`. 25 | classes[prefix(Media.defaultProps, align)] = true; 26 | } 27 | 28 | return ( 29 | <div 30 | {...elementProps} 31 | className={classNames(className, classes)} 32 | /> 33 | ); 34 | } 35 | } 36 | 37 | export default bsClass('media-right', MediaRight); -------------------------------------------------------------------------------- /fixtures/julia/file1.jl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/julia/file1.jl -------------------------------------------------------------------------------- /fixtures/julia/file2.jl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/julia/file2.jl -------------------------------------------------------------------------------- /fixtures/livescript/file1.ls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/livescript/file1.ls -------------------------------------------------------------------------------- /fixtures/livescript/file2.ls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/livescript/file2.ls -------------------------------------------------------------------------------- /fixtures/lua/file1.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/lua/file1.lua -------------------------------------------------------------------------------- /fixtures/lua/file2.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/lua/file2.lua -------------------------------------------------------------------------------- /fixtures/markdown/file1.markdown: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/markdown/file1.markdown -------------------------------------------------------------------------------- /fixtures/markdown/file1.mkd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/markdown/file1.mkd -------------------------------------------------------------------------------- /fixtures/markdown/file2.markdown: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/markdown/file2.markdown -------------------------------------------------------------------------------- /fixtures/markdown/file2.mkd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/markdown/file2.mkd -------------------------------------------------------------------------------- /fixtures/markup.html: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html lang="en"> 3 | <head> 4 | <meta charset="UTF-8"> 5 | <title>Title</title> 6 | <script> 7 | /* jscpd:ignore-start */ 8 | var a = {}; 9 | /* jscpd:ignore-end */ 10 | console.log('qweqweqw'); 11 | alert('!!!!' + a); 12 | </script> 13 | <style> 14 | .content { 15 | color: blue; 16 | width: 400px; 17 | border: 1px solid red; 18 | } 19 | </style> 20 | </head> 21 | <body> 22 | <div class="content"> 23 | <h1>Hello</h1> 24 | </div> 25 | </body> 26 | </html> 27 | -------------------------------------------------------------------------------- /fixtures/mathematica/file1.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mathematica/file1.m -------------------------------------------------------------------------------- /fixtures/mathematica/file1.nb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mathematica/file1.nb -------------------------------------------------------------------------------- /fixtures/mathematica/file2.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mathematica/file2.m -------------------------------------------------------------------------------- /fixtures/mathematica/file2.nb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mathematica/file2.nb -------------------------------------------------------------------------------- /fixtures/mbox/file1.mbox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mbox/file1.mbox -------------------------------------------------------------------------------- /fixtures/mbox/file2.mbox: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mbox/file2.mbox -------------------------------------------------------------------------------- /fixtures/mixed-formats/file.css: -------------------------------------------------------------------------------- 1 | .gg-adidas { 2 | position: relative; 3 | box-sizing: border-box; 4 | display: block; 5 | width: 23px; 6 | height: 15px; 7 | transform: scale(var(--ggs,1)); 8 | overflow: hidden 9 | } 10 | 11 | .gg-adidas::before { 12 | content: ""; 13 | position: absolute; 14 | box-sizing: border-box; 15 | display: block; 16 | width: 5px; 17 | height: 18px; 18 | background: currentColor; 19 | transform: rotate(-30deg); 20 | left: 4px; 21 | bottom: -14px; 22 | box-shadow: 7px -2px,14px -4px 23 | } 24 | -------------------------------------------------------------------------------- /fixtures/mixed-formats/file.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | function arrayMin( array ) { 6 | 7 | if ( array.length === 0 ) return Infinity; 8 | 9 | var min = array[ 0 ]; 10 | 11 | for ( var i = 1, l = array.length; i < l; ++ i ) { 12 | 13 | if ( array[ i ] < min ) min = array[ i ]; 14 | 15 | } 16 | 17 | return min; 18 | 19 | } 20 | 21 | function arrayMax( array ) { 22 | 23 | if ( array.length === 0 ) return - Infinity; 24 | 25 | var max = array[ 0 ]; 26 | 27 | for ( var i = 1, l = array.length; i < l; ++ i ) { 28 | 29 | if ( array[ i ] > max ) max = array[ i ]; 30 | 31 | } 32 | 33 | return max; 34 | 35 | } 36 | 37 | export { arrayMin, arrayMax }; 38 | -------------------------------------------------------------------------------- /fixtures/mllike/file1.fs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file1.fs -------------------------------------------------------------------------------- /fixtures/mllike/file1.ml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file1.ml -------------------------------------------------------------------------------- /fixtures/mllike/file1.mli: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file1.mli -------------------------------------------------------------------------------- /fixtures/mllike/file1.mll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file1.mll -------------------------------------------------------------------------------- /fixtures/mllike/file1.mly: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file1.mly -------------------------------------------------------------------------------- /fixtures/mllike/file2.fs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file2.fs -------------------------------------------------------------------------------- /fixtures/mllike/file2.ml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file2.ml -------------------------------------------------------------------------------- /fixtures/mllike/file2.mli: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file2.mli -------------------------------------------------------------------------------- /fixtures/mllike/file2.mll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file2.mll -------------------------------------------------------------------------------- /fixtures/mllike/file2.mly: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mllike/file2.mly -------------------------------------------------------------------------------- /fixtures/modelica/file1.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/modelica/file1.mo -------------------------------------------------------------------------------- /fixtures/modelica/file2.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/modelica/file2.mo -------------------------------------------------------------------------------- /fixtures/mscgen/file1.msc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file1.msc -------------------------------------------------------------------------------- /fixtures/mscgen/file1.mscgen: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file1.mscgen -------------------------------------------------------------------------------- /fixtures/mscgen/file1.mscin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file1.mscin -------------------------------------------------------------------------------- /fixtures/mscgen/file1.msgenny: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file1.msgenny -------------------------------------------------------------------------------- /fixtures/mscgen/file1.xu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file1.xu -------------------------------------------------------------------------------- /fixtures/mscgen/file2.msc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file2.msc -------------------------------------------------------------------------------- /fixtures/mscgen/file2.mscgen: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file2.mscgen -------------------------------------------------------------------------------- /fixtures/mscgen/file2.mscin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file2.mscin -------------------------------------------------------------------------------- /fixtures/mscgen/file2.msgenny: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file2.msgenny -------------------------------------------------------------------------------- /fixtures/mscgen/file2.xu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mscgen/file2.xu -------------------------------------------------------------------------------- /fixtures/mumps/file1.mps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mumps/file1.mps -------------------------------------------------------------------------------- /fixtures/mumps/file2.mps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/mumps/file2.mps -------------------------------------------------------------------------------- /fixtures/nsis/file1.nsh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/nsis/file1.nsh -------------------------------------------------------------------------------- /fixtures/nsis/file1.nsi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/nsis/file1.nsi -------------------------------------------------------------------------------- /fixtures/nsis/file2.nsh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/nsis/file2.nsh -------------------------------------------------------------------------------- /fixtures/nsis/file2.nsi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/nsis/file2.nsi -------------------------------------------------------------------------------- /fixtures/ntriples/file1.nt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ntriples/file1.nt -------------------------------------------------------------------------------- /fixtures/ntriples/file2.nt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ntriples/file2.nt -------------------------------------------------------------------------------- /fixtures/null/file1.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file1.conf -------------------------------------------------------------------------------- /fixtures/null/file1.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file1.def -------------------------------------------------------------------------------- /fixtures/null/file1.list: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file1.list -------------------------------------------------------------------------------- /fixtures/null/file1.text: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file1.text -------------------------------------------------------------------------------- /fixtures/null/file1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file1.txt -------------------------------------------------------------------------------- /fixtures/null/file2.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file2.conf -------------------------------------------------------------------------------- /fixtures/null/file2.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file2.def -------------------------------------------------------------------------------- /fixtures/null/file2.list: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file2.list -------------------------------------------------------------------------------- /fixtures/null/file2.text: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file2.text -------------------------------------------------------------------------------- /fixtures/null/file2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/null/file2.txt -------------------------------------------------------------------------------- /fixtures/octave/file1.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/octave/file1.m -------------------------------------------------------------------------------- /fixtures/octave/file2.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/octave/file2.m -------------------------------------------------------------------------------- /fixtures/oz/file1.oz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/oz/file1.oz -------------------------------------------------------------------------------- /fixtures/oz/file2.oz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/oz/file2.oz -------------------------------------------------------------------------------- /fixtures/pascal/file1.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pascal/file1.p -------------------------------------------------------------------------------- /fixtures/pascal/file1.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pascal/file1.pas -------------------------------------------------------------------------------- /fixtures/pascal/file2.p: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pascal/file2.p -------------------------------------------------------------------------------- /fixtures/pascal/file2.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pascal/file2.pas -------------------------------------------------------------------------------- /fixtures/pegjs/file1.jsonld: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pegjs/file1.jsonld -------------------------------------------------------------------------------- /fixtures/pegjs/file2.jsonld: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pegjs/file2.jsonld -------------------------------------------------------------------------------- /fixtures/php/file1.php3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file1.php3 -------------------------------------------------------------------------------- /fixtures/php/file1.php4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file1.php4 -------------------------------------------------------------------------------- /fixtures/php/file1.php5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file1.php5 -------------------------------------------------------------------------------- /fixtures/php/file1.phtml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file1.phtml -------------------------------------------------------------------------------- /fixtures/php/file2.php: -------------------------------------------------------------------------------- 1 | <?php 2 | 3 | namespace Bernard\Queue; 4 | 5 | use Bernard\Envelope; 6 | use SplQueue; 7 | 8 | /** 9 | * Wrapper around SplQueue 10 | * 11 | * @package Bernard 12 | */ 13 | class InMemoryQueue extends AbstractQueue 14 | { 15 | protected $queue; 16 | 17 | /** 18 | * {@inheritDoc} 19 | */ 20 | public function __construct($name) 21 | { 22 | parent::__construct($name); 23 | 24 | $this->queue = new SplQueue; 25 | $this->queue->setIteratorMode(SplQueue::IT_MODE_DELETE | SplQueue::IT_MODE_FIFO); 26 | } 27 | 28 | /** 29 | * {@inheritDoc} 30 | */ 31 | public function count() 32 | { 33 | $this->errorIfClosed(); 34 | 35 | return $this->queue->count(); 36 | } 37 | 38 | /** 39 | * {@inheritDoc} 40 | */ 41 | public function enqueue(Envelope $envelope) 42 | { 43 | $this->errorIfClosed(); 44 | 45 | $this->queue->enqueue($envelope); 46 | } 47 | 48 | /** 49 | * {@inheritDoc} 50 | */ 51 | public function dequeuez() 52 | { 53 | 54 | usleep(10000); 55 | 56 | return null; 57 | } 58 | } -------------------------------------------------------------------------------- /fixtures/php/file2.php3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file2.php3 -------------------------------------------------------------------------------- /fixtures/php/file2.php4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file2.php4 -------------------------------------------------------------------------------- /fixtures/php/file2.php5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file2.php5 -------------------------------------------------------------------------------- /fixtures/php/file2.phtml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/php/file2.phtml -------------------------------------------------------------------------------- /fixtures/pig/file1.pig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pig/file1.pig -------------------------------------------------------------------------------- /fixtures/pig/file2.pig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pig/file2.pig -------------------------------------------------------------------------------- /fixtures/powershell/file1.ps1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file1.ps1 -------------------------------------------------------------------------------- /fixtures/powershell/file1.psd1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file1.psd1 -------------------------------------------------------------------------------- /fixtures/powershell/file1.psm1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file1.psm1 -------------------------------------------------------------------------------- /fixtures/powershell/file2.ps1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file2.ps1 -------------------------------------------------------------------------------- /fixtures/powershell/file2.psd1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file2.psd1 -------------------------------------------------------------------------------- /fixtures/powershell/file2.psm1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/powershell/file2.psm1 -------------------------------------------------------------------------------- /fixtures/properties/file1.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file1.in -------------------------------------------------------------------------------- /fixtures/properties/file1.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file1.ini -------------------------------------------------------------------------------- /fixtures/properties/file1.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file1.properties -------------------------------------------------------------------------------- /fixtures/properties/file2.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file2.in -------------------------------------------------------------------------------- /fixtures/properties/file2.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file2.ini -------------------------------------------------------------------------------- /fixtures/properties/file2.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/properties/file2.properties -------------------------------------------------------------------------------- /fixtures/protobuf/file1.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/protobuf/file1.proto -------------------------------------------------------------------------------- /fixtures/protobuf/file2.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/protobuf/file2.proto -------------------------------------------------------------------------------- /fixtures/pug/file1.jade: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pug/file1.jade -------------------------------------------------------------------------------- /fixtures/pug/file2.jade: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/pug/file2.jade -------------------------------------------------------------------------------- /fixtures/python/file1.BUILD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.BUILD -------------------------------------------------------------------------------- /fixtures/python/file1.bzl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.bzl -------------------------------------------------------------------------------- /fixtures/python/file1.pxd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.pxd -------------------------------------------------------------------------------- /fixtures/python/file1.pxi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.pxi -------------------------------------------------------------------------------- /fixtures/python/file1.py: -------------------------------------------------------------------------------- 1 | # hello 2 | 3 | 4 | def hello(): 5 | print("hello") 6 | 7 | 8 | def hello1(): 9 | print("hello") 10 | 11 | 12 | def hello3(): 13 | print("hello") 14 | 15 | 16 | class A(object): 17 | def __init__(self): 18 | print("qwe") 19 | self.test = None 20 | if self.test: 21 | print(self.test) 22 | 23 | def hello4(self): 24 | pass 25 | 26 | 27 | if __name__ == "__main__": 28 | a = A() 29 | -------------------------------------------------------------------------------- /fixtures/python/file1.pyw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.pyw -------------------------------------------------------------------------------- /fixtures/python/file1.pyx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file1.pyx -------------------------------------------------------------------------------- /fixtures/python/file2.BUILD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.BUILD -------------------------------------------------------------------------------- /fixtures/python/file2.bzl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.bzl -------------------------------------------------------------------------------- /fixtures/python/file2.pxd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.pxd -------------------------------------------------------------------------------- /fixtures/python/file2.pxi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.pxi -------------------------------------------------------------------------------- /fixtures/python/file2.py: -------------------------------------------------------------------------------- 1 | # hello 2 | 3 | 4 | def hello(): 5 | print("hello") 6 | 7 | 8 | def hello1(): 9 | print("hello") 10 | 11 | 12 | def hello3(): 13 | print("hello") 14 | 15 | 16 | class A(object): 17 | def __init__(self): 18 | print("qwe") 19 | self.test = None 20 | if self.test: 21 | print(self.test) 22 | 23 | def hello4(self): 24 | pass 25 | 26 | def hello5(self): 27 | pass 28 | 29 | 30 | if __name__ == "__main__": 31 | a = A() 32 | -------------------------------------------------------------------------------- /fixtures/python/file2.pyw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.pyw -------------------------------------------------------------------------------- /fixtures/python/file2.pyx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/python/file2.pyx -------------------------------------------------------------------------------- /fixtures/q/file1.q: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/q/file1.q -------------------------------------------------------------------------------- /fixtures/q/file2.q: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/q/file2.q -------------------------------------------------------------------------------- /fixtures/rpm/file1.spec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/rpm/file1.spec -------------------------------------------------------------------------------- /fixtures/rpm/file2.spec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/rpm/file2.spec -------------------------------------------------------------------------------- /fixtures/rst/file1.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/rst/file1.rst -------------------------------------------------------------------------------- /fixtures/rst/file2.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/rst/file2.rst -------------------------------------------------------------------------------- /fixtures/ruby/file1.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'scan/manager' 3 | require 'scan/options' 4 | require 'scan/runner' 5 | require 'scan/detect_values' 6 | require 'scan/test_command_generator' 7 | require 'scan/xcpretty_reporter_options_generator.rb' 8 | require 'scan/test_result_parser' 9 | require 'scan/error_handler' 10 | require 'scan/slack_poster' 11 | 12 | require 'fastlane_core' 13 | 14 | module Scan 15 | class << self 16 | attr_accessor :config 17 | 18 | attr_accessor :project 19 | 20 | attr_accessor :cache 21 | 22 | attr_accessor :devices 23 | 24 | def config=(value) 25 | @config = value 26 | DetectValues.set_additional_default_values 27 | @cache = {} 28 | end 29 | 30 | def scanfile_name 31 | "Scanfile" 32 | end 33 | end 34 | 35 | Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore 36 | UI = FastlaneCore::UI 37 | ROOT = Pathname.new(File.expand_path('../..', __FILE__)) 38 | 39 | DESCRIPTION = "The easiest way to run tests of your iOS and Mac app" 40 | end -------------------------------------------------------------------------------- /fixtures/ruby/file2.rb: -------------------------------------------------------------------------------- 1 | require 'json' 2 | require 'scan/manager' 3 | require 'scan/options' 4 | require 'scan/runner' 5 | require 'scan/detect_values' 6 | require 'scan/test_command_generator' 7 | require 'scan/xcpretty_reporter_options_generator.rb' 8 | require 'scan/test_result_parser' 9 | require 'scan/error_handler' 10 | require 'scan/slack_poster' 11 | 12 | require 'fastlane_core' 13 | 14 | module Scan 15 | class << self 16 | attr_accessor :config 17 | 18 | attr_accessor :project 19 | 20 | attr_accessor :cache 21 | 22 | attr_accessor :devices 23 | 24 | def config=(value) 25 | @config = value 26 | DetectValues.set_additional_default_values 27 | @cache = {} 28 | end 29 | 30 | def scanfile_name 31 | "Scanfile" 32 | end 33 | end 34 | 35 | Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore 36 | UI = FastlaneCore::UI 37 | ROOT = Pathname.new(File.expand_path('../..', __FILE__)) 38 | 39 | DESCRIPTION = "The easiest way to run tests of your iOS and Mac app" 40 | end -------------------------------------------------------------------------------- /fixtures/sas/file1.sas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sas/file1.sas -------------------------------------------------------------------------------- /fixtures/sas/file2.sas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sas/file2.sas -------------------------------------------------------------------------------- /fixtures/sass/file1.sass: -------------------------------------------------------------------------------- 1 | //hello 2 | 3 | $linkColor: #00F 4 | 5 | a 6 | color: $linkColor 7 | 8 | @mixin border-radius($radius,$border,$color) 9 | -webkit-border-radius: $radius 10 | -moz-border-radius: $radius 11 | -ms-border-radius: $radius 12 | border-radius: $radius 13 | border: $border solid $color 14 | 15 | 16 | .box 17 | @include border-radius(10 px, 1 px, red) 18 | 19 | $linkColor: #00F 20 | 21 | a 22 | color: $linkColor 23 | 24 | @mixin border-radius($radius,$border,$color) 25 | -webkit-border-radius: $radius 26 | -moz-border-radius: $radius 27 | -ms-border-radius: $radius 28 | border-radius: $radius 29 | border: $border solid $color 30 | 31 | 32 | .box 33 | @include border-radius(10 px, 1 px, red) 34 | 35 | 36 | #header 37 | background: #FFFFFF 38 | 39 | .error 40 | color: #FF0000 41 | 42 | a 43 | text-decoration: none 44 | &:hover 45 | text-decoration: underline 46 | -------------------------------------------------------------------------------- /fixtures/sass/file2.sass: -------------------------------------------------------------------------------- 1 | //hello 2 | 3 | $linkColor: #00F 4 | 5 | a 6 | color: $linkColor 7 | 8 | @mixin border-radius($radius,$border,$color) 9 | -webkit-border-radius: $radius 10 | -moz-border-radius: $radius 11 | -ms-border-radius: $radius 12 | border-radius: $radius 13 | border: $border solid $color 14 | 15 | 16 | .box 17 | @include border-radius(10 px, 1 px, red) 18 | 19 | $linkColor: #00F 20 | 21 | 22 | //hello comment 23 | 24 | a 25 | color: $linkColor 26 | 27 | @mixin border-radius($radius,$border,$color) 28 | -webkit-border-radius: $radius 29 | -moz-border-radius: $radius 30 | -ms-border-radius: $radius 31 | border-radius: $radius 32 | border: $border solid $color 33 | 34 | 35 | .box 36 | @include border-radius(10 px, 1 px, red) 37 | 38 | 39 | #header 40 | background: #FFFFFF 41 | 42 | .error 43 | color: #FF0000 44 | 45 | a 46 | text-decoration: none 47 | &:hover 48 | text-decoration: underline 49 | -------------------------------------------------------------------------------- /fixtures/scheme/file1.scm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/scheme/file1.scm -------------------------------------------------------------------------------- /fixtures/scheme/file1.ss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/scheme/file1.ss -------------------------------------------------------------------------------- /fixtures/scheme/file2.scm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/scheme/file2.scm -------------------------------------------------------------------------------- /fixtures/scheme/file2.ss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/scheme/file2.ss -------------------------------------------------------------------------------- /fixtures/shell/file1.bash: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file1.bash -------------------------------------------------------------------------------- /fixtures/shell/file1.ksh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file1.ksh -------------------------------------------------------------------------------- /fixtures/shell/file1.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file1.sh -------------------------------------------------------------------------------- /fixtures/shell/file2.bash: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file2.bash -------------------------------------------------------------------------------- /fixtures/shell/file2.ksh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file2.ksh -------------------------------------------------------------------------------- /fixtures/shell/file2.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/shell/file2.sh -------------------------------------------------------------------------------- /fixtures/sieve/file1.sieve: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sieve/file1.sieve -------------------------------------------------------------------------------- /fixtures/sieve/file1.siv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sieve/file1.siv -------------------------------------------------------------------------------- /fixtures/sieve/file2.sieve: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sieve/file2.sieve -------------------------------------------------------------------------------- /fixtures/sieve/file2.siv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sieve/file2.siv -------------------------------------------------------------------------------- /fixtures/slim/file1.slim: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title Slim Examples 5 | meta name="keywords" content="template language" 6 | meta name="author" content=author 7 | javascript: 8 | alert('Slim supports embedded javascript!') 9 | 10 | body 11 | h1 Markup examples 12 | 13 | #content 14 | p This example shows you what a basic Slim file looks like. 15 | 16 | == yield 17 | 18 | - unless items.empty? 19 | table 20 | - items.each do |item| 21 | tr 22 | td.name = item.name 23 | td.price = item.price 24 | - else 25 | p 26 | | No items found. Please add some inventory. 27 | Thank you! 28 | 29 | div id="footer" 30 | = render 'footer' 31 | | Copyright © #{year} #{author} 32 | 33 | div id="footer1" 34 | = render 'footer' 35 | | Copyright © #{year} #{author} -------------------------------------------------------------------------------- /fixtures/slim/file2.slim: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title Slim Examples 5 | meta name="keywords" content="template language" 6 | meta name="author" content=author 7 | javascript: 8 | alert('Slim supports embedded javascript!') 9 | 10 | body 11 | h1 Markup examples 12 | 13 | #content 14 | p This example shows you what a basic Slim file looks like. 15 | 16 | == yield 17 | 18 | - unless items.empty? 19 | table 20 | - items.each do |item| 21 | tr 22 | td.name = item.name 23 | td.price = item.price 24 | - else 25 | p 26 | | No items found. Please add some inventory. 27 | Thank you! 28 | 29 | div id="footer" 30 | = render 'footer' 31 | | Copyright © #{year} #{author} -------------------------------------------------------------------------------- /fixtures/smalltalk/file1.st: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/smalltalk/file1.st -------------------------------------------------------------------------------- /fixtures/smalltalk/file2.st: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/smalltalk/file2.st -------------------------------------------------------------------------------- /fixtures/smarty/file1.tpl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/smarty/file1.tpl -------------------------------------------------------------------------------- /fixtures/smarty/file2.tpl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/smarty/file2.tpl -------------------------------------------------------------------------------- /fixtures/soy/file1.soy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/soy/file1.soy -------------------------------------------------------------------------------- /fixtures/soy/file2.soy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/soy/file2.soy -------------------------------------------------------------------------------- /fixtures/sparql/file1.rq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sparql/file1.rq -------------------------------------------------------------------------------- /fixtures/sparql/file1.sparql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sparql/file1.sparql -------------------------------------------------------------------------------- /fixtures/sparql/file2.rq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sparql/file2.rq -------------------------------------------------------------------------------- /fixtures/sparql/file2.sparql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sparql/file2.sparql -------------------------------------------------------------------------------- /fixtures/sql/file1.cql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file1.cql -------------------------------------------------------------------------------- /fixtures/sql/file1.pls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file1.pls -------------------------------------------------------------------------------- /fixtures/sql/file1.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file1.sql -------------------------------------------------------------------------------- /fixtures/sql/file2.cql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file2.cql -------------------------------------------------------------------------------- /fixtures/sql/file2.pls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file2.pls -------------------------------------------------------------------------------- /fixtures/sql/file2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/sql/file2.sql -------------------------------------------------------------------------------- /fixtures/stex/file1.ltx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stex/file1.ltx -------------------------------------------------------------------------------- /fixtures/stex/file1.text: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stex/file1.text -------------------------------------------------------------------------------- /fixtures/stex/file2.ltx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stex/file2.ltx -------------------------------------------------------------------------------- /fixtures/stex/file2.text: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stex/file2.text -------------------------------------------------------------------------------- /fixtures/stylus/file1.styl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stylus/file1.styl -------------------------------------------------------------------------------- /fixtures/stylus/file2.styl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/stylus/file2.styl -------------------------------------------------------------------------------- /fixtures/swift/file1.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftMath.swift 3 | // TSwift 4 | // 5 | // Created by Hunk on 14-6-8. 6 | // Copyright (c) 2014年 Hunk. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class SwiftMath : NSObject 12 | { 13 | var name : String? 14 | init(name: String) 15 | { 16 | self.name = name 17 | 18 | println(self.name) 19 | } 20 | 21 | func sum(num1 :Int, num2 :Int) -> Int 22 | { 23 | return (num1 + num2) 24 | } 25 | 26 | func multiply(num1: Int, num2 :Int) -> Int 27 | { 28 | return num1 * num2 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /fixtures/swift/file2.swift: -------------------------------------------------------------------------------- 1 | 2 | import Foundation 3 | 4 | class SwiftMath : NSObject 5 | { 6 | var name : String? 7 | init(name: String) 8 | { 9 | self.name = name 10 | 11 | println(self.name) 12 | } 13 | 14 | func sum(num1 :Int, num2 :Int) -> Int 15 | { 16 | return (num1 + num2) 17 | } 18 | 19 | func multiply(num1: Int, num2 :Int) -> Int 20 | { 21 | return num1 * num2 22 | } 23 | 24 | func multiply_1(num1: Int, num2 :Int) -> Int 25 | { 26 | return num1 * num2 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fixtures/tcl/file1.tcl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/tcl/file1.tcl -------------------------------------------------------------------------------- /fixtures/tcl/file2.tcl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/tcl/file2.tcl -------------------------------------------------------------------------------- /fixtures/text/file1.txt: -------------------------------------------------------------------------------- 1 | Волхвы пришли. Младенец крепко спал. 2 | Звезда светила ярко с небосвода. 3 | Холодный ветер снег в сугроб сгребал. 4 | Шуршал песок. Костер трещал у входа. 5 | Дым шел свечой. Огонь вился крючком. 6 | И тени становились то короче, 7 | то вдруг длинней. Никто не знал кругом, 8 | что жизни счет начнется с этой ночи. 9 | Волхвы пришли. Младенец крепко спал. 10 | Крутые своды ясли окружали. 11 | Кружился снег. Клубился белый пар. 12 | Лежал младенец, и дары лежали. 13 | -------------------------------------------------------------------------------- /fixtures/textile/file1.textile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/textile/file1.textile -------------------------------------------------------------------------------- /fixtures/textile/file2.textile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/textile/file2.textile -------------------------------------------------------------------------------- /fixtures/toml/file1.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/toml/file1.toml -------------------------------------------------------------------------------- /fixtures/toml/file2.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/toml/file2.toml -------------------------------------------------------------------------------- /fixtures/troff/file1.1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.1 -------------------------------------------------------------------------------- /fixtures/troff/file1.2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.2 -------------------------------------------------------------------------------- /fixtures/troff/file1.3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.3 -------------------------------------------------------------------------------- /fixtures/troff/file1.4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.4 -------------------------------------------------------------------------------- /fixtures/troff/file1.5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.5 -------------------------------------------------------------------------------- /fixtures/troff/file1.6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.6 -------------------------------------------------------------------------------- /fixtures/troff/file1.7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.7 -------------------------------------------------------------------------------- /fixtures/troff/file1.8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.8 -------------------------------------------------------------------------------- /fixtures/troff/file1.9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file1.9 -------------------------------------------------------------------------------- /fixtures/troff/file2.1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.1 -------------------------------------------------------------------------------- /fixtures/troff/file2.2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.2 -------------------------------------------------------------------------------- /fixtures/troff/file2.3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.3 -------------------------------------------------------------------------------- /fixtures/troff/file2.4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.4 -------------------------------------------------------------------------------- /fixtures/troff/file2.5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.5 -------------------------------------------------------------------------------- /fixtures/troff/file2.6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.6 -------------------------------------------------------------------------------- /fixtures/troff/file2.7: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.7 -------------------------------------------------------------------------------- /fixtures/troff/file2.8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.8 -------------------------------------------------------------------------------- /fixtures/troff/file2.9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/troff/file2.9 -------------------------------------------------------------------------------- /fixtures/ttcn-cfg/file1.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn-cfg/file1.cfg -------------------------------------------------------------------------------- /fixtures/ttcn-cfg/file2.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn-cfg/file2.cfg -------------------------------------------------------------------------------- /fixtures/ttcn/file1.ttcn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file1.ttcn -------------------------------------------------------------------------------- /fixtures/ttcn/file1.ttcn3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file1.ttcn3 -------------------------------------------------------------------------------- /fixtures/ttcn/file1.ttcnpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file1.ttcnpp -------------------------------------------------------------------------------- /fixtures/ttcn/file2.ttcn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file2.ttcn -------------------------------------------------------------------------------- /fixtures/ttcn/file2.ttcn3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file2.ttcn3 -------------------------------------------------------------------------------- /fixtures/ttcn/file2.ttcnpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/ttcn/file2.ttcnpp -------------------------------------------------------------------------------- /fixtures/turtle/file1.ttl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/turtle/file1.ttl -------------------------------------------------------------------------------- /fixtures/turtle/file2.ttl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/turtle/file2.ttl -------------------------------------------------------------------------------- /fixtures/twig/file_1.twig: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %}The Page Title{% endblock %} 3 | {% block body %} 4 | <p>Hello World</p> 5 | <ul> 6 | {% for item in seq %} 7 | <li>${item|escape}</li> 8 | <li>${item|escape}</li> 9 | <li>${item|escape}</li> 10 | <li>${item|escape}</li> 11 | {% endfor %} 12 | </ul> 13 | <p>{% super %}</p> 14 | <div class="fromhelper"> 15 | {% include "helper.html" %} 16 | </div> 17 | <div class="fromhelper"> 18 | {% include "helper.html" %} 19 | </div> 20 | <div class="fromhelper"> 21 | {% include "helper.html" %} 22 | </div> 23 | <div class="fromhelper"> 24 | {% include "helper.html" %} 25 | </div> 26 | <div class="fromhelper"> 27 | {% include "helper.html" %} 28 | </div> 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /fixtures/twig/file_2.twig: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %}The Page Title{% endblock %} 3 | {% block body %} 4 | <p>Hello World</p> 5 | <ul> 6 | {% for item in seq %} 7 | <li>${item|escape}</li> 8 | <li>${item|escape}</li> 9 | <li>${item|escape}</li> 10 | <li>${item|escape}</li> 11 | {% endfor %} 12 | </ul> 13 | <p>{% super %}</p> 14 | <div class="fromhelper"> 15 | {% include "helper.html" %} 16 | </div> 17 | <div class="fromhelper"> 18 | {% include "helper.html" %} 19 | </div> 20 | <div class="fromhelper"> 21 | {% include "helper.html" %} 22 | </div> 23 | <div class="fromhelper"> 24 | {% include "helper.html" %} 25 | </div> 26 | <div class="fromhelper"> 27 | {% include "helper.html" %} 28 | </div> 29 | <div class="fromhelper"> 30 | {% include "helper.html" %} 31 | </div> 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /fixtures/vb/file1.vb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vb/file1.vb -------------------------------------------------------------------------------- /fixtures/vb/file2.vb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vb/file2.vb -------------------------------------------------------------------------------- /fixtures/vbscript/file1.vbs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vbscript/file1.vbs -------------------------------------------------------------------------------- /fixtures/vbscript/file2.vbs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vbscript/file2.vbs -------------------------------------------------------------------------------- /fixtures/velocity/file1.vtl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/velocity/file1.vtl -------------------------------------------------------------------------------- /fixtures/velocity/file2.vtl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/velocity/file2.vtl -------------------------------------------------------------------------------- /fixtures/verilog/file1.v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/verilog/file1.v -------------------------------------------------------------------------------- /fixtures/verilog/file2.v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/verilog/file2.v -------------------------------------------------------------------------------- /fixtures/vhdl/file1.vhd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vhdl/file1.vhd -------------------------------------------------------------------------------- /fixtures/vhdl/file1.vhdl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vhdl/file1.vhdl -------------------------------------------------------------------------------- /fixtures/vhdl/file2.vhd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vhdl/file2.vhd -------------------------------------------------------------------------------- /fixtures/vhdl/file2.vhdl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/vhdl/file2.vhdl -------------------------------------------------------------------------------- /fixtures/webidl/file1.webidl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/webidl/file1.webidl -------------------------------------------------------------------------------- /fixtures/webidl/file2.webidl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/webidl/file2.webidl -------------------------------------------------------------------------------- /fixtures/xml/file1.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xml/file1.xml -------------------------------------------------------------------------------- /fixtures/xml/file1.xsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xml/file1.xsd -------------------------------------------------------------------------------- /fixtures/xml/file2.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xml/file2.xml -------------------------------------------------------------------------------- /fixtures/xml/file2.xsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xml/file2.xsd -------------------------------------------------------------------------------- /fixtures/xquery/file1.xquery: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xquery/file1.xquery -------------------------------------------------------------------------------- /fixtures/xquery/file1.xy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xquery/file1.xy -------------------------------------------------------------------------------- /fixtures/xquery/file2.xquery: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xquery/file2.xquery -------------------------------------------------------------------------------- /fixtures/xquery/file2.xy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/xquery/file2.xy -------------------------------------------------------------------------------- /fixtures/yacas/file1.ys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/yacas/file1.ys -------------------------------------------------------------------------------- /fixtures/yacas/file2.ys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/yacas/file2.ys -------------------------------------------------------------------------------- /fixtures/yaml/file1.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/yaml/file1.yaml -------------------------------------------------------------------------------- /fixtures/yaml/file1.yml: -------------------------------------------------------------------------------- 1 | auth-source-ldap: 2 | - name: ldap-is-not-web-scale 3 | host: 10.11.12.13 4 | port: 389 5 | account: uid=binduser,cn=users,dc=test,dc=example,dc=com 6 | account-password: 123qwe 7 | base-dn: dc=test,dc=example,dc=com 8 | attr-login: uid 9 | attr-firstname: firstName 10 | attr-lastname: lastName 11 | attr-mail: mail 12 | attr-photo: picture 13 | onthefly-register: false 14 | usergroup-sync: false 15 | tls: false 16 | groups-base: cn=groups,dc=test,dc=example,dc=com 17 | ldap-filter: 18 | server-type: posix 19 | usergroup-sync1: false 20 | tls2: false 21 | groups-base3: cn=groups,dc=test,dc=example,dc=com 22 | ldap-filter4: 23 | server-type5: posix 24 | -------------------------------------------------------------------------------- /fixtures/yaml/file2.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kucherenko/jscpd/e8381ad59d3b0b8d8699b3c3e63df8f5ba56161e/fixtures/yaml/file2.yaml -------------------------------------------------------------------------------- /fixtures/yaml/file2.yml: -------------------------------------------------------------------------------- 1 | auth-source-ldap: 2 | - name: ldap-is-not-web-scale 3 | host: 10.11.12.13 4 | port: 389 5 | account: uid=binduser,cn=users,dc=test,dc=example,dc=com 6 | account-password: 123qwe 7 | base-dn: dc=test,dc=example,dc=com 8 | attr-login: uid 9 | attr-firstname: firstName 10 | attr-lastname: lastName 11 | attr-mail: mail 12 | attr-photo: picture 13 | onthefly-register: false 14 | usergroup-sync: false 15 | tls: false 16 | groups-base: cn=groups,dc=test,dc=example,dc=com 17 | ldap-filter: 18 | server-type: posix 19 | -------------------------------------------------------------------------------- /fixtures/z80/file1.z80: -------------------------------------------------------------------------------- 1 | #include "ti83plus.inc" 2 | #define progStart $9D95 3 | .org progStart-2 4 | .db $BB,$6D 5 | 6 | bcall(_ClrLCDFull) 7 | ld hl,0 8 | ld (CurCol),hl 9 | ld hl,Message 10 | bcall(_PutS) ; Displays the string 11 | bcall(_NewLine) 12 | ret 13 | Message: 14 | .db "Hello world!",0 -------------------------------------------------------------------------------- /fixtures/z80/file2.z80: -------------------------------------------------------------------------------- 1 | #include "ti83plus.inc" 2 | #define progStart $9D95 3 | .org progStart-2 4 | .db $BB,$6D 5 | 6 | bcall(_ClrLCDFull) 7 | ld hl,0 8 | ld (CurCol),hl 9 | ld hl,Message 10 | bcall(_PutS) ; Displays the string 11 | bcall(_NewLine) 12 | ret 13 | Message: 14 | .db "Hello world!",0 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jscpd-monorepo", 3 | "private": true, 4 | "npmClient": "yarn", 5 | "useWorkspaces": true, 6 | "version": "4.0.0-rc.0", 7 | "scripts": { 8 | "build": "turbo run build", 9 | "commit": "cz", 10 | "generate": "turbo run generate", 11 | "dev": "turbo run dev --parallel", 12 | "lint": "turbo run lint", 13 | "lint:fix": "turbo run lint:fix", 14 | "test": "turbo run test", 15 | "cleanup": "turbo run cleanup", 16 | "typecheck": "turbo run typecheck", 17 | "publish-packages": "changeset version && changeset publish" 18 | }, 19 | "devDependencies": { 20 | "@changesets/cli": "^2.27.7", 21 | "commitizen": "^4.3.0", 22 | "cz-conventional-changelog": "^3.3.0", 23 | "turbo": "^1.13.3" 24 | }, 25 | "config": { 26 | "commitizen": { 27 | "path": "cz-conventional-changelog" 28 | } 29 | }, 30 | "readmeFilename": "README.md", 31 | "dependencies": { 32 | "@vitest/coverage-v8": "^2.0.5" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /packages/badge-reporter/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @jscpd/badge-reporter 2 | 3 | ## 4.0.1 4 | 5 | ### Patch Changes 6 | 7 | - f50a42d: publish first public version in v4 8 | 9 | ## 4.0.0 10 | 11 | ### Major Changes 12 | 13 | - aac6f4e: make great refactoring of the code, update versions of packages (typescript, pug, etc), change builder - use tsup, change test runner to vitest, move monorepo from lerna to turborepo, add changeset as tool for releases 14 | -------------------------------------------------------------------------------- /packages/badge-reporter/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/badge-reporter/README.md: -------------------------------------------------------------------------------- 1 | # `@jscpd/badge-reporter` 2 | 3 | > The badge reporter for [jscpd](https://github.com/kucherenko/jscpd). 4 | 5 | Generate badges like that: 6 | 7 |  8 | 9 | ## Getting started 10 | 11 | ### Install 12 | 13 | ```bash 14 | npm install @jscpd/badge-reporter 15 | ``` 16 | 17 | ### Usage 18 | 19 | ```bash 20 | jscpd [...options] --reporters badge /path/to/source 21 | ``` 22 | 23 | ### Options 24 | 25 | ```typescript 26 | 27 | interface IBadgeOptions { 28 | color?: string, // color of badge, if threshold > current - green, if threshold < current - red, no threshold provided - grey 29 | subject?: string, // label of the badge, default "Copy/Paste" 30 | style?: string, // "flat" of undefined, default - undefined 31 | icon?: string, // 'data:image/svg+xml;base64,...' icon 32 | iconWidth?: number, // width of the icon 33 | path?: string, // path to badge, default is 'jscpd-badge.svg' in output folder 34 | } 35 | 36 | ``` 37 | 38 | [MIT](LICENSE) © Andrey Kucherenko 39 | -------------------------------------------------------------------------------- /packages/badge-reporter/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/badge-reporter/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/badge-reporter/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/core/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /packages/core/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/core/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './interfaces'; 2 | export * from './detector'; 3 | export * from './mode'; 4 | export * from './options'; 5 | export * from './statistic'; 6 | export * from './store/memory'; 7 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/blamed-lines.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IBlamedLines { 2 | [line: string]: { 3 | rev: string; 4 | author: string; 5 | date: string; 6 | line: string; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/clone-validator.interface.ts: -------------------------------------------------------------------------------- 1 | import {IClone, IOptions, IValidationResult} from '..'; 2 | 3 | export interface ICloneValidator { 4 | validate(clone: IClone, options: IOptions): IValidationResult; 5 | } 6 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/clone.interface.ts: -------------------------------------------------------------------------------- 1 | import {IBlamedLines, ITokenLocation} from '..'; 2 | 3 | export interface IClone { 4 | format: string; 5 | isNew?: boolean; 6 | foundDate?: number; 7 | duplicationA: { 8 | sourceId: string; 9 | start: ITokenLocation; 10 | end: ITokenLocation; 11 | range: [number, number]; 12 | fragment?: string; 13 | blame?: IBlamedLines; 14 | }; 15 | duplicationB: { 16 | sourceId: string; 17 | start: ITokenLocation; 18 | end: ITokenLocation; 19 | range: [number, number]; 20 | fragment?: string; 21 | blame?: IBlamedLines; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './clone.interface'; 2 | export * from './options.interface'; 3 | export * from './statistic.interface'; 4 | export * from './subscriber.interface'; 5 | export * from './store.interface'; 6 | export * from './blamed-lines.interface'; 7 | export * from './clone-validator.interface'; 8 | export * from './validation-result.interface'; 9 | export * from './token.interface'; 10 | export * from './token-location.interface'; 11 | export * from './map-frame.interface'; 12 | export * from './tokens-map.interface'; 13 | export * from './tokenizer.interface'; 14 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/map-frame.interface.ts: -------------------------------------------------------------------------------- 1 | import {IToken} from '.'; 2 | 3 | export interface IMapFrame { 4 | id: string; 5 | sourceId: string; 6 | start: IToken; 7 | end: IToken; 8 | isClone?: boolean; 9 | localDuplicate?: boolean; 10 | } 11 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/options.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IOptions { 2 | executionId?: string; 3 | minLines?: number; 4 | maxLines?: number; 5 | maxSize?: string; 6 | minTokens?: number; 7 | threshold?: number; 8 | formatsExts?: Record<string, string[]>; 9 | output?: string; 10 | path?: string[]; 11 | pattern?: string; 12 | ignorePattern?: string[]; 13 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 14 | mode?: any; 15 | config?: string; 16 | ignore?: string[]; 17 | format?: string[]; 18 | store?: string; 19 | reporters?: string[]; 20 | listeners?: string[]; 21 | blame?: boolean; 22 | cache?: boolean; 23 | silent?: boolean; 24 | debug?: boolean; 25 | verbose?: boolean; 26 | list?: boolean; 27 | absolute?: boolean; 28 | noSymlinks?: boolean; 29 | skipLocal?: boolean; 30 | ignoreCase?: boolean; 31 | gitignore?: boolean; 32 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 33 | reportersOptions?: Record<string, any>; 34 | tokensToSkip?: string[]; 35 | hashFunction?: (value: string) => string; 36 | exitCode?: number; 37 | } 38 | 39 | export type TOption = keyof IOptions; 40 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/source-validator.interface.ts: -------------------------------------------------------------------------------- 1 | import {IClone} from '..'; 2 | 3 | export interface ISourceValidator { 4 | validate(clone: IClone): boolean; 5 | } 6 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/statistic.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IStatisticRow { 2 | lines: number; 3 | tokens: number; 4 | sources: number; 5 | duplicatedLines: number; 6 | duplicatedTokens: number; 7 | clones: number; 8 | percentage: number; 9 | percentageTokens: number; 10 | newDuplicatedLines: number; 11 | newClones: number; 12 | } 13 | 14 | export interface IStatisticFormat { 15 | sources: Record<string, IStatisticRow>; 16 | total: IStatisticRow; 17 | } 18 | 19 | export interface IStatistic { 20 | total: IStatisticRow; 21 | detectionDate: string; 22 | formats: Record<string, IStatisticFormat>; 23 | } 24 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/store.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IStore<TValue> { 2 | 3 | namespace(name: string): void; 4 | 5 | get(key: string): Promise<TValue>; 6 | 7 | set(key: string, value: TValue): Promise<TValue>; 8 | 9 | close(): void; 10 | } 11 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/subscriber.interface.ts: -------------------------------------------------------------------------------- 1 | import {DetectorEvents, IClone, ITokensMap, IValidationResult} from '..'; 2 | 3 | export interface ISubscriber { 4 | subscribe(): Partial<Record<DetectorEvents, IHandler>>; 5 | } 6 | 7 | export interface IHandler { 8 | (payload: IEventPayload): void; 9 | } 10 | 11 | export interface IEventPayload { 12 | clone?: IClone; 13 | source?: ITokensMap; 14 | validation?: IValidationResult; 15 | } 16 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/token-location.interface.ts: -------------------------------------------------------------------------------- 1 | export interface ITokenLocation { 2 | line: number; 3 | column?: number; 4 | position?: number; 5 | } 6 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/token.interface.ts: -------------------------------------------------------------------------------- 1 | import {ITokenLocation} from '.'; 2 | 3 | export interface IToken { 4 | type: string; 5 | value: string; 6 | length: number; 7 | format: string; 8 | range: [number, number]; 9 | loc?: { 10 | start: ITokenLocation; 11 | end: ITokenLocation; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/tokenizer.interface.ts: -------------------------------------------------------------------------------- 1 | import {IOptions, ITokensMap} from '.'; 2 | 3 | export interface ITokenizer { 4 | generateMaps(id: string, data: string, format: string, options: Partial<IOptions>): ITokensMap[]; 5 | } 6 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/tokens-map.interface.ts: -------------------------------------------------------------------------------- 1 | import {IMapFrame} from '.'; 2 | 3 | export interface ITokensMap { 4 | 5 | getFormat(): string; 6 | 7 | getLinesCount(): number; 8 | 9 | getTokensCount(): number; 10 | 11 | getId(): string; 12 | 13 | next(): IteratorResult<IMapFrame | boolean>; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /packages/core/src/interfaces/validation-result.interface.ts: -------------------------------------------------------------------------------- 1 | import {IClone} from '..'; 2 | 3 | export interface IValidationResult { 4 | status: boolean; 5 | message?: string[]; 6 | clone?: IClone; 7 | } 8 | -------------------------------------------------------------------------------- /packages/core/src/mode.ts: -------------------------------------------------------------------------------- 1 | import {IOptions, IToken} from './interfaces'; 2 | 3 | export type IMode = (token: IToken, options?: IOptions) => boolean; 4 | 5 | export function strict(token: IToken): boolean { 6 | return token.type !== 'ignore'; 7 | } 8 | 9 | export function mild(token: IToken): boolean { 10 | return strict(token) && token.type !== 'empty' && token.type !== 'new_line'; 11 | } 12 | 13 | export function weak(token: IToken): boolean { 14 | return mild(token) 15 | && token.format !== 'comment' 16 | && token.type !== 'comment' 17 | && token.type !== 'block-comment'; 18 | } 19 | 20 | const MODES: { [name: string]: IMode } = { 21 | mild, 22 | strict, 23 | weak, 24 | }; 25 | 26 | export function getModeByName(name: string): IMode { 27 | if (name in MODES) { 28 | return MODES[name] as IMode; 29 | } 30 | throw new Error(`Mode ${name} does not supported yet.`); 31 | } 32 | 33 | export function getModeHandler(mode: string | IMode): IMode { 34 | return typeof mode === 'string' ? getModeByName(mode) : mode; 35 | } 36 | -------------------------------------------------------------------------------- /packages/core/src/options.ts: -------------------------------------------------------------------------------- 1 | import {IOptions, TOption} from './interfaces'; 2 | import {getModeHandler} from "./mode"; 3 | 4 | 5 | export function getDefaultOptions(): IOptions { 6 | return { 7 | executionId: new Date().toISOString(), 8 | path: [process.cwd()], 9 | mode: getModeHandler('mild'), 10 | minLines: 5, 11 | maxLines: 1000, 12 | maxSize: '100kb', 13 | minTokens: 50, 14 | output: './report', 15 | reporters: ['console'], 16 | ignore: [], 17 | threshold: undefined, 18 | formatsExts: {}, 19 | debug: false, 20 | silent: false, 21 | blame: false, 22 | cache: true, 23 | absolute: false, 24 | noSymlinks: false, 25 | skipLocal: false, 26 | ignoreCase: false, 27 | gitignore: false, 28 | reportersOptions: {}, 29 | exitCode: 0, 30 | }; 31 | } 32 | 33 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 34 | export function getOption(name: TOption, options?: IOptions): any { 35 | const defaultOptions = getDefaultOptions(); 36 | return options ? options[name] || defaultOptions[name] : defaultOptions[name]; 37 | } 38 | -------------------------------------------------------------------------------- /packages/core/src/store/memory.ts: -------------------------------------------------------------------------------- 1 | import {IStore} from '..'; 2 | 3 | export class MemoryStore<IMapFrame> implements IStore<IMapFrame> { 4 | private _namespace: string = ''; 5 | 6 | protected values: Record<string, Record<string, IMapFrame>> = {}; 7 | 8 | public namespace(namespace: string): void { 9 | this._namespace = namespace; 10 | this.values[namespace] = this.values[namespace] || {}; 11 | } 12 | 13 | public get(key: string): Promise<IMapFrame> { 14 | return new Promise((resolve, reject) => { 15 | // @ts-ignore 16 | if (key in this.values[this._namespace]) { 17 | // @ts-ignore 18 | resolve(this.values[this._namespace][key]); 19 | } else { 20 | reject(new Error('not found')); 21 | } 22 | }); 23 | } 24 | 25 | public set(key: string, value: IMapFrame): Promise<IMapFrame> { 26 | // @ts-ignore 27 | this.values[this._namespace][key] = value; 28 | return Promise.resolve(value); 29 | } 30 | 31 | close(): void { 32 | this.values = {}; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /packages/core/src/validators/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lines-length-clone.validator'; 2 | export * from './validator'; 3 | 4 | -------------------------------------------------------------------------------- /packages/core/src/validators/lines-length-clone.validator.ts: -------------------------------------------------------------------------------- 1 | import {IClone, ICloneValidator, IOptions, IValidationResult} from '..'; 2 | 3 | export class LinesLengthCloneValidator implements ICloneValidator { 4 | 5 | validate(clone: IClone, options: IOptions): IValidationResult { 6 | const lines = clone.duplicationA.end.line - clone.duplicationA.start.line; 7 | const status = lines >= Number(options?.minLines); 8 | 9 | return { 10 | status, 11 | message: status ? ['ok'] : [`Lines of code less than limit (${lines} < ${options.minLines})`], 12 | }; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /packages/core/src/validators/validator.ts: -------------------------------------------------------------------------------- 1 | import {IClone, ICloneValidator, IOptions, IValidationResult} from '..'; 2 | 3 | export function runCloneValidators(clone: IClone, options: IOptions, validators: ICloneValidator[]): IValidationResult { 4 | return validators.reduce((acc: IValidationResult, validator: ICloneValidator): IValidationResult => { 5 | const res = validator.validate(clone, options); 6 | return { 7 | ...acc, 8 | status: res.status && acc.status, 9 | message: res.message ? [...(acc.message as any), ...res.message] : acc.message, 10 | }; 11 | 12 | }, {status: true, message: [], clone}) 13 | } 14 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/core/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/finder/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /packages/finder/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/finder/__tests__/in-files-detector.test.ts: -------------------------------------------------------------------------------- 1 | import {expect, describe, it} from 'vitest' 2 | import {Tokenizer} from "@jscpd/tokenizer"; 3 | import {MemoryStore, Statistic} from "@jscpd/core"; 4 | import {InFilesDetector} from "../src"; 5 | 6 | describe('jscpd finder: in-files-detector', () => { 7 | it('should not detect for empty files list', async () => { 8 | const detector = new InFilesDetector(new Tokenizer(), new MemoryStore(), new Statistic(), {}); 9 | const detected = await detector.detect([]); 10 | expect(detected).to.deep.equal([]); 11 | }); 12 | }) 13 | -------------------------------------------------------------------------------- /packages/finder/__tests__/utils.test.ts: -------------------------------------------------------------------------------- 1 | import {describe, it, expect} from 'vitest'; 2 | import {compareDates, escapeXml} from "../src/utils/reports"; 3 | 4 | describe('jscpd finder: utils', () => { 5 | describe('escapeXml', () => { 6 | it('should replace unsafe symbols', () => { 7 | expect(escapeXml(`<>&'"`)).to.eq('<>&'"') 8 | }); 9 | }); 10 | 11 | describe('compareDates', () => { 12 | it('should show left arrow', () => { 13 | expect(compareDates('2020-11-09T15:32:02.397Z', '2018-11-09T15:32:02.397Z')).to.eq('<='); 14 | }); 15 | it('should show right arrow', () => { 16 | expect(compareDates('2019-11-09T15:32:02.397Z', '2019-11-10T15:32:02.397Z')).to.eq('=>'); 17 | }); 18 | }); 19 | }) 20 | -------------------------------------------------------------------------------- /packages/finder/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/finder/src/hooks/fragment.ts: -------------------------------------------------------------------------------- 1 | import {IClone} from '@jscpd/core'; 2 | import {readFileSync} from "fs"; 3 | import {IHook} from '..'; 4 | 5 | export class FragmentsHook implements IHook { 6 | 7 | process(clones: IClone[]): Promise<IClone[]> { 8 | return Promise.all( 9 | clones.map((clone: IClone) => FragmentsHook.addFragments(clone)), 10 | ); 11 | } 12 | 13 | static addFragments(clone: IClone): IClone { 14 | const codeA = readFileSync(clone.duplicationA.sourceId).toString(); 15 | const codeB = readFileSync(clone.duplicationB.sourceId).toString(); 16 | clone.duplicationA.fragment = codeA.substring(clone.duplicationA.range[0], clone.duplicationA.range[1]); 17 | clone.duplicationB.fragment = codeB.substring(clone.duplicationB.range[0], clone.duplicationB.range[1]); 18 | return clone; 19 | } 20 | 21 | } 22 | 23 | -------------------------------------------------------------------------------- /packages/finder/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './blamer'; 2 | export * from './fragment'; 3 | -------------------------------------------------------------------------------- /packages/finder/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './in-files-detector'; 2 | export * from './files'; 3 | export * from './hooks'; 4 | export * from './subscribers'; 5 | export * from './reporters'; 6 | export * from './validators'; 7 | export * from './interfaces'; 8 | export * from './utils/options'; 9 | -------------------------------------------------------------------------------- /packages/finder/src/interfaces/entry-with-content.interface.ts: -------------------------------------------------------------------------------- 1 | import {Entry} from 'fast-glob'; 2 | 3 | export interface EntryWithContent extends Entry { 4 | content: string; 5 | } 6 | -------------------------------------------------------------------------------- /packages/finder/src/interfaces/hook.interface.ts: -------------------------------------------------------------------------------- 1 | import {IClone} from '@jscpd/core'; 2 | 3 | export interface IHook { 4 | process(clones: IClone[]): Promise<IClone[]>; 5 | } 6 | -------------------------------------------------------------------------------- /packages/finder/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './entry-with-content.interface'; 2 | export * from './hook.interface'; 3 | export * from './reporter.interface'; 4 | 5 | -------------------------------------------------------------------------------- /packages/finder/src/interfaces/reporter.interface.ts: -------------------------------------------------------------------------------- 1 | import {IClone, IStatistic} from '@jscpd/core'; 2 | 3 | export interface IReporter { 4 | report(clones: IClone[], statistic: IStatistic | undefined): void; 5 | } 6 | -------------------------------------------------------------------------------- /packages/finder/src/reporters/index.ts: -------------------------------------------------------------------------------- 1 | export * from './console'; 2 | export * from './console-full'; 3 | export * from './json'; 4 | export * from './csv'; 5 | export * from './markdown'; 6 | export * from './xml'; 7 | export * from './silent'; 8 | export * from './threshold'; 9 | export * from './xcode' 10 | -------------------------------------------------------------------------------- /packages/finder/src/reporters/silent.ts: -------------------------------------------------------------------------------- 1 | import {bold} from 'colors/safe'; 2 | import {IClone, IStatistic} from '@jscpd/core'; 3 | import {IReporter} from '..'; 4 | 5 | export class SilentReporter implements IReporter { 6 | 7 | public report(clones: IClone[], statistic: IStatistic): void { 8 | if (statistic) { 9 | console.log( 10 | `Duplications detection: Found ${bold(clones.length.toString())} ` + 11 | `exact clones with ${bold(statistic.total.duplicatedLines.toString())}(${statistic.total.percentage}%) ` + 12 | `duplicated lines in ${bold(statistic.total.sources.toString())} ` + 13 | `(${Object.keys(statistic.formats).length} formats) files.`, 14 | ); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/finder/src/reporters/threshold.ts: -------------------------------------------------------------------------------- 1 | import {red} from 'colors/safe'; 2 | import {IClone, IOptions, IStatistic} from '@jscpd/core'; 3 | import {IReporter} from '..'; 4 | 5 | export class ThresholdReporter implements IReporter { 6 | constructor(private options: IOptions) { 7 | } 8 | 9 | // @ts-ignore 10 | public report(clones: IClone[], statistic: IStatistic | undefined): void { 11 | if (statistic && this.options.threshold !== undefined && this.options.threshold < statistic.total.percentage) { 12 | const message = `ERROR: jscpd found too many duplicates (${statistic.total.percentage}%) over threshold (${this.options.threshold}%)`; 13 | console.error(red(message)); 14 | throw new Error(message); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/finder/src/reporters/xcode.ts: -------------------------------------------------------------------------------- 1 | import {IClone, IOptions} from '@jscpd/core'; 2 | import {IReporter} from '..'; 3 | import {getPath} from '../utils/reports'; 4 | 5 | export class XcodeReporter implements IReporter { 6 | constructor(private readonly options: IOptions) { 7 | } 8 | 9 | public report(clones: IClone[]): void { 10 | clones.forEach((clone: IClone) => { 11 | this.cloneFound(clone); 12 | }); 13 | console.log(`Found ${clones.length} clones.`); 14 | } 15 | 16 | private cloneFound(clone: IClone): void { 17 | const pathA = getPath(clone.duplicationA.sourceId, {...this.options, absolute: true}); 18 | const pathB = getPath(clone.duplicationB.sourceId, this.options); 19 | const startLineA = clone.duplicationA.start.line; 20 | const characterA = clone.duplicationA.start.column; 21 | const endLineA = clone.duplicationA.end.line; 22 | const startLineB = clone.duplicationB.start.line; 23 | const endLineB = clone.duplicationB.end.line; 24 | console.log(`${pathA}:${startLineA}:${characterA}: warning: Found ${endLineA - startLineA} lines (${startLineA}-${endLineA}) duplicated on file ${pathB} (${startLineB}-${endLineB})`); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/finder/src/subscribers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './progress'; 2 | export * from './verbose'; 3 | -------------------------------------------------------------------------------- /packages/finder/src/subscribers/progress.ts: -------------------------------------------------------------------------------- 1 | import {DetectorEvents, IClone, IEventPayload, IHandler, IOptions, ISubscriber} from '@jscpd/core'; 2 | import {cloneFound} from '../utils/clone-found'; 3 | 4 | export class ProgressSubscriber implements ISubscriber { 5 | 6 | constructor(private readonly options: IOptions) { 7 | } 8 | 9 | subscribe(): Partial<Record<DetectorEvents, IHandler>> { 10 | return { 11 | CLONE_FOUND: (payload: IEventPayload): void => cloneFound(payload.clone as IClone, this.options), 12 | }; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/finder/src/utils/clone-found.ts: -------------------------------------------------------------------------------- 1 | import {IClone, IOptions} from '@jscpd/core'; 2 | import {red} from 'colors/safe'; 3 | import {getPathConsoleString, getSourceLocation} from './reports'; 4 | 5 | export function cloneFound(clone: IClone, options: IOptions): void { 6 | const {duplicationA, duplicationB, format, isNew} = clone; 7 | console.log('Clone found (' + format + '):' + (isNew ? red('*') : '')); 8 | console.log( 9 | ` - ${getPathConsoleString(duplicationA.sourceId, options)} [${getSourceLocation( 10 | duplicationA.start, 11 | duplicationA.end, 12 | )}] (${duplicationA.end.line - duplicationA.start.line} lines${duplicationA.end.position ? ', ' + (duplicationA.end.position - (duplicationA.start.position as number)) + ' tokens' : ''})`, 13 | ); 14 | console.log( 15 | ` ${getPathConsoleString(duplicationB.sourceId, options)} [${getSourceLocation( 16 | duplicationB.start, 17 | duplicationB.end, 18 | )}]`, 19 | ); 20 | console.log(''); 21 | } 22 | -------------------------------------------------------------------------------- /packages/finder/src/utils/options.ts: -------------------------------------------------------------------------------- 1 | export function parseFormatsExtensions(extensions = ''): { [key: string]: string[] } | undefined { 2 | const result: { [key: string]: string[] } = {}; 3 | 4 | if (!extensions) { 5 | return undefined; 6 | } 7 | 8 | extensions.split(';').forEach((format: string) => { 9 | const pair = format.split(':'); 10 | // @ts-ignore 11 | result[pair[0]] = pair[1].split(','); 12 | }); 13 | 14 | return result; 15 | } 16 | -------------------------------------------------------------------------------- /packages/finder/src/validators/index.ts: -------------------------------------------------------------------------------- 1 | export * from './skip-local.validator'; 2 | -------------------------------------------------------------------------------- /packages/finder/src/validators/skip-local.validator.ts: -------------------------------------------------------------------------------- 1 | import {getOption, IClone, ICloneValidator, IOptions, IValidationResult} from '@jscpd/core'; 2 | import {isAbsolute, relative} from "path"; 3 | 4 | export class SkipLocalValidator implements ICloneValidator { 5 | 6 | validate(clone: IClone, options: IOptions): IValidationResult { 7 | const status = !this.shouldSkipClone(clone, options); 8 | return { 9 | status, 10 | clone, 11 | message: [ 12 | `Sources of duplication located in same local folder (${clone.duplicationA.sourceId}, ${clone.duplicationB.sourceId})` 13 | ] 14 | }; 15 | } 16 | 17 | public shouldSkipClone(clone: IClone, options: IOptions): boolean { 18 | const path: string[] = getOption('path', options); 19 | return path.some( 20 | (dir) => SkipLocalValidator.isRelative(clone.duplicationA.sourceId, dir) && SkipLocalValidator.isRelative(clone.duplicationB.sourceId, dir) 21 | ); 22 | } 23 | 24 | private static isRelative(file: string, path: string): boolean { 25 | const rel = relative(path, file); 26 | return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /packages/finder/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/finder/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/html-reporter/.gitignore: -------------------------------------------------------------------------------- 1 | html 2 | -------------------------------------------------------------------------------- /packages/html-reporter/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | mockups 4 | tsconfig.json 5 | tsconfig.build.json 6 | -------------------------------------------------------------------------------- /packages/html-reporter/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @jscpd/html-reporter 2 | 3 | ## 4.0.1 4 | 5 | ### Patch Changes 6 | 7 | - f50a42d: publish first public version in v4 8 | 9 | ## 4.0.0 10 | 11 | ### Major Changes 12 | 13 | - aac6f4e: make great refactoring of the code, update versions of packages (typescript, pug, etc), change builder - use tsup, change test runner to vitest, move monorepo from lerna to turborepo, add changeset as tool for releases 14 | 15 | ### Patch Changes 16 | 17 | - Updated dependencies [aac6f4e] 18 | - @jscpd/finder@4.0.0 19 | -------------------------------------------------------------------------------- /packages/html-reporter/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/html-reporter/README.md: -------------------------------------------------------------------------------- 1 | # `html-reporter` 2 | 3 | > TODO: description 4 | 5 | ## Usage 6 | 7 | ``` 8 | const htmlReporter = require('html-reporter'); 9 | 10 | // TODO: DEMONSTRATE API 11 | ``` 12 | -------------------------------------------------------------------------------- /packages/html-reporter/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/html-reporter/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/html-reporter/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: false, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'], 9 | shims: true, 10 | }) 11 | -------------------------------------------------------------------------------- /packages/leveldb-store/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /packages/leveldb-store/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/leveldb-store/README.md: -------------------------------------------------------------------------------- 1 | # `@jscpd/leveldb-store` 2 | 3 | > store for jscpd, used for large repositories 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm install @jscpd/leveldb-store --save 9 | ``` 10 | 11 | ## Usage 12 | 13 | ``` 14 | import {Tokenizer} from '@jscpd/tokenizer'; 15 | import { 16 | Detector, 17 | IOptions, 18 | IClone, 19 | IStore, 20 | ITokenizer 21 | } from '@jscpd/core'; 22 | import LeveldbStore from '@jscpd/leveldb-store'; 23 | 24 | const options: IOptions = { 25 | minLines: 5, 26 | maxLines: 500, 27 | } 28 | 29 | const tokenizer: ITokenizer = new Tokenizer(); 30 | 31 | const store: IStore = new LeveldbStore(); 32 | 33 | const detector = new Detector(tokenizer, store, [], options); 34 | 35 | ``` 36 | 37 |  38 | 39 | ## License 40 | 41 | [MIT](LICENSE) © Andrey Kucherenko 42 | -------------------------------------------------------------------------------- /packages/leveldb-store/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/leveldb-store/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/leveldb-store/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/redis-store/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /packages/redis-store/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 3.3.0-rc.3 (2020-05-04) 2 | 3 | ## 4.0.1 4 | 5 | ### Patch Changes 6 | 7 | - f50a42d: publish first public version in v4 8 | - Updated dependencies [f50a42d] 9 | - @jscpd/tokenizer@4.0.1 10 | - @jscpd/core@4.0.1 11 | 12 | ## 4.0.0 13 | 14 | ### Major Changes 15 | 16 | - aac6f4e: make great refactoring of the code, update versions of packages (typescript, pug, etc), change builder - use tsup, change test runner to vitest, move monorepo from lerna to turborepo, add changeset as tool for releases 17 | 18 | ### Patch Changes 19 | 20 | - Updated dependencies [aac6f4e] 21 | - @jscpd/tokenizer@4.0.0 22 | - @jscpd/core@4.0.0 23 | 24 | * feat: 🎸 add redis store ([2e33bfe](https://github.com/kucherenko/jscpd/commit/2e33bfe)) 25 | 26 | ## 3.3.0-rc.3 (2020-05-02) 27 | 28 | - v3.3.0-rc.3 ([9f388ff](https://github.com/kucherenko/jscpd/commit/9f388ff)) 29 | - docs: ✏️ update README for the packages ([76492e6](https://github.com/kucherenko/jscpd/commit/76492e6)) 30 | - feat: 🎸 start redis store development ([c0a1584](https://github.com/kucherenko/jscpd/commit/c0a1584)) 31 | -------------------------------------------------------------------------------- /packages/redis-store/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/redis-store/README.md: -------------------------------------------------------------------------------- 1 | # `@jscpd/leveldb-store` 2 | 3 | **!NOT implemented yet** 4 | 5 | > store for jscpd, used [redis](https://redis.io/) data store for hashes 6 | 7 | ## Installation 8 | 9 | ``` 10 | npm install @jscpd/redis-store --save 11 | ``` 12 | 13 | ## Usage 14 | 15 | ``` 16 | import {Tokenizer} from '@jscpd/tokenizer'; 17 | import { 18 | Detector, 19 | IOptions, 20 | IClone, 21 | IStore, 22 | ITokenizer 23 | } from '@jscpd/core'; 24 | import RedisdbStore from '@jscpd/redis-store'; 25 | 26 | const options: IOptions = { 27 | minLines: 5, 28 | maxLines: 500, 29 | } 30 | 31 | const tokenizer: ITokenizer = new Tokenizer(); 32 | 33 | const store: IStore = new RedisdbStore(); 34 | 35 | const detector = new Detector(tokenizer, store, [], options); 36 | 37 | ``` 38 | 39 |  40 | 41 | ## License 42 | 43 | [MIT](LICENSE) © Andrey Kucherenko 44 | -------------------------------------------------------------------------------- /packages/redis-store/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/redis-store/src/index.ts: -------------------------------------------------------------------------------- 1 | import {IMapFrame, IStore} from '@jscpd/core'; 2 | import Redis from "ioredis"; 3 | 4 | export default class RedisStore implements IStore<IMapFrame> { 5 | private name: string = ''; 6 | private redis 7 | 8 | constructor() { 9 | this.redis = new Redis(); 10 | } 11 | 12 | close(): void { 13 | this.redis.disconnect(); 14 | } 15 | 16 | get(key: string): Promise<IMapFrame> { 17 | return this.redis.get(this.name + ':' + key).then(value => { 18 | if (!value) { 19 | throw new Error('not found') 20 | } 21 | return JSON.parse(value) 22 | }); 23 | } 24 | 25 | namespace(name: string): void { 26 | this.name = name; 27 | } 28 | 29 | async set(key: string, value: IMapFrame): Promise<IMapFrame> { 30 | await this.redis.set(this.name + ':' + key, JSON.stringify(value)); 31 | return value 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /packages/redis-store/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redis-store/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/sarif-reporter/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # jscpd-sarif-reporter 2 | 3 | ## 4.0.3 4 | 5 | ### Patch Changes 6 | 7 | - fix issue with packages 8 | -------------------------------------------------------------------------------- /packages/sarif-reporter/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2024 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/sarif-reporter/README.md: -------------------------------------------------------------------------------- 1 | # `@jscpd/sarif-reporter` 2 | 3 | > The sarif reporter for [jscpd](https://github.com/kucherenko/jscpd). 4 | 5 | Generate report in sarif format for jscpd. 6 | 7 | ## Getting started 8 | 9 | ### Install 10 | 11 | ```bash 12 | npm install @jscpd/sarif-reporter 13 | ``` 14 | 15 | ### Usage 16 | 17 | ```bash 18 | jscpd [...options] --reporters sarif /path/to/source 19 | ``` 20 | 21 | 22 | [MIT](LICENSE) © Andrey Kucherenko 23 | -------------------------------------------------------------------------------- /packages/sarif-reporter/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/sarif-reporter/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.build.json", 3 | 4 | "compilerOptions": { 5 | "outDir": "./dist" 6 | }, 7 | 8 | "include": [ 9 | "src/**/*" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /packages/sarif-reporter/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/sarif-reporter/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: false, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'], 9 | shims: true, 10 | }) 11 | -------------------------------------------------------------------------------- /packages/tokenizer/.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | __tests__ 3 | tsconfig.json 4 | tsconfig.build.json 5 | -------------------------------------------------------------------------------- /packages/tokenizer/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Andrey Kucherenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /packages/tokenizer/README.md: -------------------------------------------------------------------------------- 1 | # `@jscpd/tokenizer` 2 | 3 | > tokenizer is package from @jscpd used for convert programming code to list of tokens 4 | 5 | 6 | ## Installation 7 | 8 | ``` 9 | npm install @jscpd/tokenizer --save 10 | ``` 11 | 12 | ## Usage 13 | 14 | ``` 15 | import {IOptions, ITokensMap} from '@jscpd/core'; 16 | import {Tokenizer} from '@jscpd/tokenizer'; 17 | 18 | const tokenizer = new Tokenizer(); 19 | const options: IOptions = {}; 20 | 21 | const maps: ITokensMap[] = tokenizer.generateMaps('source_id', 'let a = "11"', 'javascript', options); 22 | 23 | ``` 24 | 25 |  26 | 27 | ## License 28 | 29 | [MIT](LICENSE) © Andrey Kucherenko 30 | -------------------------------------------------------------------------------- /packages/tokenizer/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/nodemon.json", 3 | "watch": ["./src/**"], 4 | "ignoreRoot": [], 5 | "ext": "ts,js", 6 | "exec": "pnpm build" 7 | } 8 | -------------------------------------------------------------------------------- /packages/tokenizer/src/hash.ts: -------------------------------------------------------------------------------- 1 | import SparkMD5 from "spark-md5"; 2 | 3 | export function hash(value: string): string { 4 | return SparkMD5.hash(value); 5 | } 6 | -------------------------------------------------------------------------------- /packages/tokenizer/src/index.ts: -------------------------------------------------------------------------------- 1 | import {IOptions, ITokenizer, ITokensMap} from '@jscpd/core'; 2 | import {createTokenMapBasedOnCode} from './tokenize'; 3 | 4 | export * from './interfaces'; 5 | export * from './tokenize'; 6 | export * from './token-map'; 7 | export * from './formats'; 8 | 9 | export class Tokenizer implements ITokenizer { 10 | generateMaps(id: string, data: string, format: string, options: Partial<IOptions>): ITokensMap[] { 11 | return createTokenMapBasedOnCode(id, data, format, options); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/tokenizer/src/interfaces/format-meta.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IFormatMeta { 2 | exts: string[]; 3 | parent?: string; 4 | } 5 | -------------------------------------------------------------------------------- /packages/tokenizer/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './format-meta.interface'; 2 | export * from './source-options.interface'; 3 | -------------------------------------------------------------------------------- /packages/tokenizer/src/interfaces/source-options.interface.ts: -------------------------------------------------------------------------------- 1 | export interface ISourceOptions { 2 | id: string; 3 | format: string; 4 | source?: string; 5 | isNew?: boolean; 6 | detectionDate?: number; 7 | lastUpdateDate?: number; 8 | lines?: number; 9 | range?: number[]; 10 | } 11 | -------------------------------------------------------------------------------- /packages/tokenizer/src/languages/tap.ts: -------------------------------------------------------------------------------- 1 | const grammar = { 2 | language: 'tap', 3 | init(Prism: any) { 4 | Prism.languages.tap = { 5 | fail: /not ok[^#{\n\r]*/, 6 | pass: /ok[^#{\n\r]*/, 7 | pragma: /pragma [+-][a-z]+/, 8 | bailout: /bail out!.*/i, 9 | version: /TAP version \d+/i, 10 | plan: /\d+\.\.\d+(?: +#.*)?/, 11 | subtest: { 12 | pattern: /# Subtest(?:: .*)?/, 13 | greedy: true 14 | }, 15 | punctuation: /[{}]/, 16 | directive: /#.*/, 17 | yamlish: { 18 | pattern: /(^[ \t]*)---[\s\S]*?[\r\n][ \t]*\.\.\.$/m, 19 | lookbehind: true, 20 | inside: Prism.languages.yaml, 21 | alias: 'language-yaml' 22 | } 23 | }; 24 | }, 25 | } 26 | export default grammar; 27 | -------------------------------------------------------------------------------- /packages/tokenizer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@jscpd/tsconfig/pkg.json", 3 | "compilerOptions": { 4 | "outDir": "build", 5 | "baseUrl": "." 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "bundle", "node_modules"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/tokenizer/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | splitting: true, 6 | sourcemap: true, 7 | clean: true, 8 | format: ['esm', 'cjs'] 9 | }) 10 | -------------------------------------------------------------------------------- /packages/tsconfig/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @jscpd/tsconfig 2 | 3 | ## 5.0.1 4 | 5 | ### Patch Changes 6 | 7 | - f50a42d: publish first public version in v4 8 | 9 | ## 5.0.0 10 | 11 | ### Major Changes 12 | 13 | - aac6f4e: make great refactoring of the code, update versions of packages (typescript, pug, etc), change builder - use tsup, change test runner to vitest, move monorepo from lerna to turborepo, add changeset as tool for releases 14 | -------------------------------------------------------------------------------- /packages/tsconfig/README.md: -------------------------------------------------------------------------------- 1 | # `tsconfig` 2 | 3 | These are base shared `tsconfig.json`s from which all other `tsconfig.json`'s inherit from. 4 | -------------------------------------------------------------------------------- /packages/tsconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jscpd/tsconfig", 3 | "version": "5.0.1", 4 | "private": true, 5 | "files": [ 6 | "pkg.json" 7 | ], 8 | "dependencies": { 9 | "@tsconfig/node20": "^20.1.4" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/tsconfig/pkg.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node20/tsconfig.json", 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "moduleResolution": "bundler", 6 | "allowUnusedLabels": false, 7 | "allowUnreachableCode": false, 8 | "noFallthroughCasesInSwitch": true, 9 | "noUncheckedIndexedAccess": true, 10 | "noUnusedLocals": true, 11 | "noUnusedParameters": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "declaration": true, 14 | "sourceMap": true, 15 | "resolveJsonModule": true, 16 | "types": ["vitest/globals"] 17 | }, 18 | "ts-node": { 19 | "compilerOptions": { 20 | "module": "commonjs" 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "apps/*" 3 | - "packages/*" 4 | --------------------------------------------------------------------------------