jscpd
Version:
Copy/paste detector for programming code, support JavaScript, CoffeeScript, PHP, Ruby, Python, Less, Go, Java, Yaml, C#, C++, C, Puppet, Twig languages
74 lines • 5.11 kB
JavaScript
;
var __values = (this && this.__values) || function (o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
};
Object.defineProperty(exports, "__esModule", { value: true });
var clone_1 = require("./clone");
var events_1 = require("./events");
var models_1 = require("./stores/models");
var stores_manager_1 = require("./stores/stores-manager");
var options_1 = require("./utils/options");
var Detector = /** @class */ (function () {
function Detector(options, eventEmitter) {
this.options = options;
this.eventEmitter = eventEmitter;
}
Detector.prototype.detectByMap = function (tokenMap) {
var e_1, _a;
var clones = [];
if (tokenMap.getLength() >= options_1.getOption('minTokens', this.options)) {
var isClone = false;
var start = void 0;
var end = void 0;
var HashesStore = stores_manager_1.StoresManager.getStore(models_1.getHashDbName(tokenMap.getFormat()));
try {
for (var tokenMap_1 = __values(tokenMap), tokenMap_1_1 = tokenMap_1.next(); !tokenMap_1_1.done; tokenMap_1_1 = tokenMap_1.next()) {
var mapFrame = tokenMap_1_1.value;
if (HashesStore.has(mapFrame.id)) {
isClone = true;
if (!start) {
start = end = mapFrame;
}
else {
end = mapFrame;
}
}
else {
this._cloneFound(isClone, start, end, clones);
isClone = false;
start = undefined;
HashesStore.set(mapFrame.id, mapFrame);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (tokenMap_1_1 && !tokenMap_1_1.done && (_a = tokenMap_1.return)) _a.call(tokenMap_1);
}
finally { if (e_1) throw e_1.error; }
}
this._cloneFound(isClone, start, end, clones);
}
return clones;
};
Detector.prototype._cloneFound = function (isClone, start, end, clones) {
if (isClone && start && end) {
var clone = clone_1.createClone(start, end);
if (clone_1.isCloneLinesBiggerLimit(clone, options_1.getOption('minLines', this.options))) {
clones.push(clone);
this.eventEmitter.emit(events_1.CLONE_FOUND_EVENT, clone);
}
}
};
return Detector;
}());
exports.Detector = Detector;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsaUNBQStEO0FBQy9ELG1DQUE2QztBQUs3QywwQ0FBZ0Q7QUFDaEQsMERBQXdEO0FBRXhELDJDQUE0QztBQUU1QztJQUNFLGtCQUFvQixPQUFpQixFQUFVLFlBQTBCO1FBQXJELFlBQU8sR0FBUCxPQUFPLENBQVU7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFdEUsOEJBQVcsR0FBbEIsVUFBbUIsUUFBbUI7O1FBQ3BDLElBQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEUsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1lBQzdCLElBQUksS0FBSyxTQUF1QixDQUFDO1lBQ2pDLElBQUksR0FBRyxTQUF1QixDQUFDO1lBRS9CLElBQU0sV0FBVyxHQUFzQiw4QkFBYSxDQUFDLFFBQVEsQ0FBQyxzQkFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUVoRyxDQUFDOztnQkFFRixLQUF1QixJQUFBLGFBQUEsU0FBQSxRQUFRLENBQUEsa0NBQUEsd0RBQUU7b0JBQTVCLElBQU0sUUFBUSxxQkFBQTtvQkFDakIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsS0FBSyxFQUFFOzRCQUNWLEtBQUssR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO3lCQUN4Qjs2QkFBTTs0QkFDTCxHQUFHLEdBQUcsUUFBUSxDQUFDO3lCQUNoQjtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUM5QyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNoQixLQUFLLEdBQUcsU0FBUyxDQUFDO3dCQUNsQixXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQ3hDO2lCQUNGOzs7Ozs7Ozs7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDhCQUFXLEdBQW5CLFVBQW9CLE9BQWdCLEVBQUUsS0FBNEIsRUFBRSxHQUEwQixFQUFFLE1BQWdCO1FBQzlHLElBQUksT0FBTyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDM0IsSUFBTSxLQUFLLEdBQVcsbUJBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSwrQkFBdUIsQ0FBQyxLQUFLLEVBQUUsbUJBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7SUFDSCxDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUEzQ0QsSUEyQ0M7QUEzQ1ksNEJBQVEifQ==