Skip to content

Commit 303f813

Browse files
committed
pref: make linter asyc
refs #27
1 parent df110e7 commit 303f813

File tree

8 files changed

+48
-29
lines changed

8 files changed

+48
-29
lines changed

lib/linter.js

+11-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
var programManager = require('./main/lang/programManager');
2-
var utils = require('./main/lang/utils');
1+
var parent = require('./worker/parent');
32
var fs = require('fs');
43
var linterPath = atom.packages.getLoadedPackage("linter").path;
54
var Linter = require(linterPath + "/lib/linter");
@@ -18,9 +17,6 @@ var LinterTslint, __hasProp = {}.hasOwnProperty, __extends = function (child, pa
1817
child.__super__ = parent.prototype;
1918
return child;
2019
};
21-
var debouncedErrors = utils.debounce(function (callback, errors) {
22-
callback(errors);
23-
}, 1500);
2420
LinterTslint = (function (_super) {
2521
__extends(LinterTslint, _super);
2622
function LinterTslint() {
@@ -31,15 +27,16 @@ LinterTslint = (function (_super) {
3127
if (!this.editor.buffer.file || !this.editor.buffer.file.path || !fs.existsSync(this.editor.buffer.file.path))
3228
return callback([]);
3329
filePath = this.editor.buffer.file.path;
34-
var errors = programManager.getErrorsForFileFiltered(filePath);
35-
var linterErrors = errors.map(function (err) { return {
36-
message: err.message,
37-
line: err.startPos.line + 1,
38-
range: new Rng([err.startPos.line, err.startPos.ch], [err.endPos.line, err.endPos.ch]),
39-
level: 'error',
40-
linter: 'TypeScript'
41-
}; });
42-
return callback(linterErrors);
30+
parent.getErrorsForFile({ filePath: filePath }).then(function (resp) {
31+
var linterErrors = resp.errors.map(function (err) { return {
32+
message: err.message,
33+
line: err.startPos.line + 1,
34+
range: new Rng([err.startPos.line, err.startPos.ch], [err.endPos.line, err.endPos.ch]),
35+
level: 'error',
36+
linter: 'TypeScript'
37+
}; });
38+
return callback(linterErrors);
39+
});
4340
};
4441
return LinterTslint;
4542
})(Linter);

lib/linter.ts

+13-15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import programManager = require('./main/lang/programManager'); ///ts:import:generated
99
///ts:import=utils
1010
import utils = require('./main/lang/utils'); ///ts:import:generated
11+
///ts:import=parent
12+
import parent = require('./worker/parent'); ///ts:import:generated
1113

1214
import fs = require('fs');
1315

@@ -28,10 +30,6 @@ interface LinterError {
2830
linter: string; // linter name
2931
}
3032

31-
var debouncedErrors = utils.debounce((callback: Function, errors: LinterError[]) => {
32-
callback(errors);
33-
}, 1500);
34-
3533
LinterTslint = (function(_super) {
3634
__extends(LinterTslint, _super);
3735

@@ -41,25 +39,25 @@ LinterTslint = (function(_super) {
4139

4240
(<any>LinterTslint).syntax = ['source.ts'];
4341

44-
LinterTslint.prototype.lintFile = function(filePath, callback: (errors: LinterError[]) => any) {
42+
LinterTslint.prototype.lintFile = function(filePath:string, callback: (errors: LinterError[]) => any) {
4543
// We refuse to work on files that are not on disk.
4644
if (!this.editor.buffer.file
4745
|| !this.editor.buffer.file.path
4846
|| !fs.existsSync(this.editor.buffer.file.path)) return callback([]);
4947

5048
filePath = this.editor.buffer.file.path;
5149

52-
var errors = programManager.getErrorsForFileFiltered(filePath);
53-
var linterErrors: LinterError[] = errors.map((err) => <LinterError>{
54-
message: err.message,
55-
line: err.startPos.line + 1,
56-
range: new Rng([err.startPos.line, err.startPos.ch], [err.endPos.line, err.endPos.ch]),
57-
level: 'error',
58-
linter: 'TypeScript'
59-
});
50+
parent.getErrorsForFile({ filePath: filePath }).then((resp) => {
51+
var linterErrors: LinterError[] = resp.errors.map((err) => <LinterError>{
52+
message: err.message,
53+
line: err.startPos.line + 1,
54+
range: new Rng([err.startPos.line, err.startPos.ch], [err.endPos.line, err.endPos.ch]),
55+
level: 'error',
56+
linter: 'TypeScript'
57+
});
6058

61-
return callback(linterErrors);
62-
// return debouncedErrors(callback, linterErrors);
59+
return callback(linterErrors);
60+
});
6361
};
6462

6563
return LinterTslint;

lib/worker/messages.js

+1
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ exports.echo = 'echo';
4141
exports.updateText = 'updateText';
4242
exports.getErrorsForFile = 'getErrorsForFile';
4343
exports.getCompletionsAtPosition = 'getCompletionsAtPosition';
44+
exports.getErrorsForFileFiltered = 'getErrorsForFileFiltered';

lib/worker/messages.ts

+8
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,11 @@ export interface GetCompletionsAtPositionQuery {
9999
export interface GetCompletionsAtPositionResponse {
100100
completions: programManager.Completion[];
101101
}
102+
103+
export var getErrorsForFileFiltered = 'getErrorsForFileFiltered';
104+
export interface GetErrorsForFileFilteredQuery{
105+
filePath:string;
106+
}
107+
export interface GetErrorsForFileFilteredResponse{
108+
errors: programManager.TSError[];
109+
}

lib/worker/parent.js

+1
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,4 @@ exports.echo = function (data) { return query(messages.echo, data); };
102102
exports.updateText = function (data) { return query(messages.updateText, data); };
103103
exports.getErrorsForFile = function (data) { return query(messages.getErrorsForFile, data); };
104104
exports.getCompletionsAtPosition = function (data) { return query(messages.getCompletionsAtPosition, data); };
105+
exports.getErrorsForFileFiltered = function (data) { return query(messages.getErrorsForFileFiltered, data); };

lib/worker/parent.ts

+3
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,6 @@ export var getErrorsForFile: Exec<messages.GetErrorsForFileQuery, messages.GetEr
145145

146146
export var getCompletionsAtPosition: Exec<messages.GetCompletionsAtPositionQuery, messages.GetCompletionsAtPositionResponse>
147147
= (data) => query(messages.getCompletionsAtPosition, data);
148+
149+
export var getErrorsForFileFiltered: Exec<messages.GetErrorsForFileFilteredQuery, messages.GetErrorsForFileFilteredResponse>
150+
= (data) => query(messages.getErrorsForFileFiltered, data);

lib/worker/workerProcess.js

+5
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,8 @@ responders[messages.getCompletionsAtPosition] = function (data) {
4242
completions: programManager.getCompletionsAtPosition(data.filePath, data.position, data.prefix)
4343
};
4444
};
45+
responders[messages.getErrorsForFileFiltered] = function (data) {
46+
return {
47+
errors: programManager.getErrorsForFileFiltered(data.filePath)
48+
};
49+
};

lib/worker/workerProcess.ts

+6
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ responders[messages.getCompletionsAtPosition] = (data: messages.GetCompletionsAt
6161
completions: programManager.getCompletionsAtPosition(data.filePath,data.position,data.prefix)
6262
};
6363
}
64+
65+
responders[messages.getErrorsForFileFiltered] = (data: messages.GetErrorsForFileFilteredQuery): messages.GetErrorsForFileFilteredResponse => {
66+
return {
67+
errors: programManager.getErrorsForFileFiltered(data.filePath)
68+
};
69+
}

0 commit comments

Comments
 (0)