alm
Version:
The best IDE for TypeScript
57 lines (56 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var sw = require("../../utils/simpleWorker");
var contract = require("./lintContract");
var utils_1 = require("../../../common/utils");
var types_1 = require("../../../common/types");
/** This is were we push the errors */
var globalErrorCacheServer_1 = require("../../globalErrorCacheServer");
/** This is where we get the active project information from */
var activeProjectConfig = require("../../disk/activeProjectConfig");
var projectDataLoader = require("../../disk/projectDataLoader");
var fmc = require("../../disk/fileModelCache");
var flm = require("../fileListing/fileListingMaster");
var Master;
(function (Master) {
Master.receiveErrorCacheDelta = function (data) {
globalErrorCacheServer_1.errorsCache.applyDelta(data);
return utils_1.resolve({});
};
})(Master || (Master = {}));
// Ensure that the namespace follows the contract
var _checkTypes = Master;
// launch worker
exports.worker = sw.startWorker({
workerPath: __dirname + '/lintWorker',
workerContract: contract.worker,
masterImplementation: Master
}).worker;
function start() {
var lastProjectData = null;
activeProjectConfig.activeProjectConfigDetailsUpdated.on(function (activeProjectConfigDetails) {
var projectData = projectDataLoader.getProjectDataLoaded(activeProjectConfigDetails);
lastProjectData = projectData;
exports.worker.setProjectData(projectData);
});
// only saved ones as linter reads directly from disk and works on whole file contents
fmc.didStatusChange.on(function (update) { return update.saved && exports.worker.fileSaved({ filePath: update.filePath }); });
// We really want to clear errors if someone deletes some file
flm.fileListingDelta.on(function (delta) {
if (!lastProjectData)
return;
/**
* NOTE: it might be better if `activeProjectConfig` did this stuff and just asked us to sync
* using `acitveProjectConfigDetailsUpdated`
* PS: adding any file just works as its handled by `didStatusChange`
*/
var relevant = delta.removedFilePaths
.filter(function (x) { return x.type == types_1.FilePathType.File; })
.filter(function (x) { return x.filePath.endsWith('tslint.json') || x.filePath.endsWith('.ts'); })
.map(function (x) { return x.filePath; });
if (relevant.length) {
exports.worker.setProjectData(lastProjectData);
}
});
}
exports.start = start;