Skip to content
This repository was archived by the owner on Aug 7, 2023. It is now read-only.

Commit

Permalink
Merge pull request #154 from AtomLinter/arcanemagus/reduce-activation…
Browse files Browse the repository at this point in the history
…-time

Reduce activation time
  • Loading branch information
Arcanemagus authored Apr 13, 2017
2 parents e855e41 + bf6cf8e commit 8093579
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions lib/main.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
'use babel';

/* eslint-disable import/extensions, import/no-extraneous-dependencies */
// eslint-disable-next-line import/extensions, import/no-extraneous-dependencies
import { CompositeDisposable } from 'atom';
/* eslint-enable import/extensions, import/no-extraneous-dependencies */
import path from 'path';
import fs from 'fs';
import requireResolve from 'resolve';

const TSLINT_MODULE_NAME = 'tslint';
const grammarScopes = ['source.ts', 'source.tsx'];
const editorClass = 'linter-tslint-compatible-editor';
const tslintCache = new Map();
let tslintDef = null;
let tslintDef;
let requireResolve;
const idleCallbacks = new Set();

/**
* Shim for TSLint v3 interoperability
Expand Down Expand Up @@ -42,9 +42,26 @@ function shim(Linter) {
return LinterShim;
}

function loadDefaultTSLint() {
if (!tslintDef) {
tslintDef = require('loophole').allowUnsafeNewFunction(() =>
// eslint-disable-next-line import/no-dynamic-require
require(TSLINT_MODULE_NAME).Linter);
}
}

export default {
activate() {
require('atom-package-deps').install('linter-tslint');
let depsCallbackID;
const lintertslintDeps = () => {
idleCallbacks.delete(depsCallbackID);
// Install package dependencies
require('atom-package-deps').install('linter-tslint');
// Initialize the default TSLint instance
loadDefaultTSLint();
};
depsCallbackID = window.requestIdleCallback(lintertslintDeps);
idleCallbacks.add(depsCallbackID);

this.subscriptions = new CompositeDisposable();

Expand Down Expand Up @@ -117,16 +134,20 @@ export default {
},

deactivate() {
idleCallbacks.forEach(callbackID => window.cancelIdleCallback(callbackID));
idleCallbacks.clear();
this.subscriptions.dispose();
},

async getLinter(filePath) {
const basedir = path.dirname(filePath);
const linter = tslintCache.get(basedir);
if (linter) {
return linter;
if (tslintCache.has(basedir)) {
return tslintCache.get(basedir);
}

// Initialize the default instance if it hasn't already been initialized
loadDefaultTSLint();

if (this.useLocalTslint) {
return this.getLocalLinter(basedir);
}
Expand All @@ -136,7 +157,10 @@ export default {
},

async getLocalLinter(basedir) {
return new Promise(resolve =>
return new Promise((resolve) => {
if (!requireResolve) {
requireResolve = require('resolve');
}
requireResolve(TSLINT_MODULE_NAME, { basedir },
(err, linterPath, pkg) => {
let linter;
Expand All @@ -154,14 +178,11 @@ export default {
tslintCache.set(basedir, linter);
return resolve(linter);
},
),
);
);
});
},

provideLinter() {
// eslint-disable-next-line import/no-dynamic-require
tslintDef = require('loophole').allowUnsafeNewFunction(() => require(TSLINT_MODULE_NAME).Linter);

return {
name: 'TSLint',
grammarScopes,
Expand Down

0 comments on commit 8093579

Please sign in to comment.