UNPKG

jscpd

Version:

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

92 lines (74 loc) 2.93 kB
// Generated by CoffeeScript 1.10.0 (function() { var Detector, Promise, Report, Strategy, debugPreprocessor, filesPreprocessor, jscpd, logger, optionsPreprocessor; logger = require('winston'); Detector = require('./detector').Detector; Strategy = require('./strategy').Strategy; Report = require('./report').Report; optionsPreprocessor = require('./preprocessors/options'); filesPreprocessor = require('./preprocessors/files'); debugPreprocessor = require('./preprocessors/debug'); Promise = require("bluebird"); jscpd = (function() { function jscpd() {} jscpd.prototype.preProcessors = [optionsPreprocessor, filesPreprocessor, debugPreprocessor]; jscpd.prototype.LANGUAGES = []; jscpd.prototype.execPreProcessors = function(list) { var i, len, preProcessor; logger.profile('Preprocessors running time:'); for (i = 0, len = list.length; i < len; i++) { preProcessor = list[i]; preProcessor(this); } return logger.profile('Preprocessors running time:'); }; jscpd.prototype.run = function(options) { var clone, codeMap, detector, generateReport, report, strategy; this.options = options; this.execPreProcessors(this.preProcessors); if (!this.options.debug) { logger.profile('Scanning for duplicates time:'); if (this.options.selectedFiles.length) { logger.info("Scanning " + this.options.selectedFiles.length + " files for duplicates..."); } strategy = new Strategy(this.options); detector = new Detector(strategy); report = new Report(this.options); codeMap = detector.start(this.options.selectedFiles, this.options['min-lines'], this.options['min-tokens']); logger.profile('Scanning for duplicates time:'); logger.info('Scanning... done!\n'); logger.profile('Generate report time:'); logger.info('Start report generation...\n'); generateReport = (function(_this) { return function() { var reportResult; reportResult = report.generate(codeMap); logger.profile('Generate report time:'); _this.report = reportResult; _this.map = codeMap; return { report: _this.report, map: _this.map }; }; })(this); if (this.options.blame) { return Promise.all((function() { var i, len, ref, results; ref = codeMap.clones; results = []; for (i = 0, len = ref.length; i < len; i++) { clone = ref[i]; results.push(clone.blame()); } return results; })()).then(generateReport).error(generateReport); } else { return generateReport(); } } }; return jscpd; })(); module.exports = jscpd; }).call(this);