UNPKG

jscpd

Version:

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

101 lines 10.4 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); var events_1 = require("../events"); var jscpd_1 = require("../jscpd"); var models_1 = require("../stores/models"); var options_1 = require("../utils/options"); var StatisticListener = /** @class */ (function () { function StatisticListener(options) { this.options = options; this.statistic = { detectionDate: new Date().toISOString(), formats: {}, total: StatisticListener.getDefaultStatistic() }; this.statistic.threshold = this.options.threshold; } StatisticListener.getDefaultStatistic = function () { return { lines: 0, sources: 0, clones: 0, duplicatedLines: 0, percentage: 0, newDuplicatedLines: 0, newClones: 0 }; }; StatisticListener.prototype.attach = function (eventEmitter) { eventEmitter.on(events_1.MATCH_SOURCE_EVENT, this.matchSource.bind(this)); eventEmitter.on(events_1.CLONE_FOUND_EVENT, this.cloneFound.bind(this)); }; StatisticListener.prototype.cloneFound = function (clone) { var id = clone.duplicationA.sourceId; var id2 = clone.duplicationB.sourceId; var linesCount = clone.duplicationA.end.line - clone.duplicationA.start.line; this.statistic.total.clones++; this.statistic.total.duplicatedLines += linesCount; this.statistic.formats[clone.format].total.clones++; this.statistic.formats[clone.format].total.duplicatedLines += linesCount; this.statistic.formats[clone.format].sources[id].clones++; this.statistic.formats[clone.format].sources[id].duplicatedLines += linesCount; this.statistic.formats[clone.format].sources[id2].clones++; this.statistic.formats[clone.format].sources[id2].duplicatedLines += linesCount; this.updatePercentage(clone.format); this.saveStatistic(); }; StatisticListener.prototype.matchSource = function (source) { source.format = source.format || 'javascript'; if (!this.statistic.formats.hasOwnProperty(source.format)) { this.statistic.formats[source.format] = { sources: {}, total: StatisticListener.getDefaultStatistic() }; } this.statistic.total.sources++; this.statistic.total.lines += source.lines; this.statistic.formats[source.format].total.sources++; this.statistic.formats[source.format].total.lines += source.lines; this.statistic.formats[source.format].sources[source.id] = this.statistic.formats[source.format].sources[source.id] || StatisticListener.getDefaultStatistic(); this.statistic.formats[source.format].sources[source.id].sources = 1; this.statistic.formats[source.format].sources[source.id].lines += source.lines; this.updatePercentage(source.format); this.saveStatistic(); }; StatisticListener.prototype.saveStatistic = function () { var statisticStore = jscpd_1.getStoreManager().getStore(models_1.STATISTIC_DB); statisticStore.set(options_1.getOption('executionId', this.options), this.statistic); }; StatisticListener.prototype.updatePercentage = function (format) { var _this = this; this.statistic.total.percentage = this.calculatePercentage(this.statistic.total.lines, this.statistic.total.duplicatedLines); this.statistic.formats[format].total.percentage = this.calculatePercentage(this.statistic.formats[format].total.lines, this.statistic.formats[format].total.duplicatedLines); Object.entries(this.statistic.formats[format].sources).forEach(function (_a) { var _b = __read(_a, 2), id = _b[0], stat = _b[1]; _this.statistic.formats[format].sources[id].percentage = _this.calculatePercentage(stat.lines, stat.duplicatedLines); }); }; StatisticListener.prototype.calculatePercentage = function (totalLines, clonedLines) { return totalLines ? Math.round((10000 * clonedLines) / totalLines) / 100 : 0.0; }; return StatisticListener; }()); exports.StatisticListener = StatisticListener; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGlzdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpc3RlbmVycy9zdGF0aXN0aWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esb0NBQXFGO0FBS3JGLGtDQUEyQztBQUMzQywyQ0FBZ0Q7QUFDaEQsNENBQTZDO0FBRTdDO0lBbUJFLDJCQUFvQixPQUFpQjtRQUFqQixZQUFPLEdBQVAsT0FBTyxDQUFVO1FBTjdCLGNBQVMsR0FBZTtZQUM5QixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUU7U0FDL0MsQ0FBQztRQUdBLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFwQmMscUNBQW1CLEdBQWxDO1FBQ0UsT0FBTztZQUNMLEtBQUssRUFBRSxDQUFDO1lBQ1IsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsQ0FBQztZQUNULGVBQWUsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsRUFBRSxDQUFDO1lBQ2Isa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUM7SUFDSixDQUFDO0lBWU0sa0NBQU0sR0FBYixVQUFjLFlBQStCO1FBQzNDLFlBQVksQ0FBQyxFQUFFLENBQUMsMkJBQWtCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRSxZQUFZLENBQUMsRUFBRSxDQUFDLDBCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLHNDQUFVLEdBQWxCLFVBQW1CLEtBQWE7UUFDOUIsSUFBTSxFQUFF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