This repository was archived by the owner on Oct 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck.js
64 lines (60 loc) · 1.96 KB
/
check.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var session = require("zed/session");
var config = require("zed/config");
var indexToPos = require("zed/util").indexToPos;
var dict = require("./dict.js");
var RE_WORD = /[A-Za-z]/;
return function(info, callback) {
config.getPreference("spellCheck", function(err, shouldSpellCheck) {
if(!shouldSpellCheck) {
return callback(null, []);
}
var path = info.path;
dict.loadDict(function(err, dict) {
session.getText(path, function(err, text) {
if(err) {
return callback("Error while spell checking: " + err);
}
var words = textToWordsWithPositions(text);
var errors = [];
words.forEach(function(word) {
if(!dict.check(word.word)) {
var startPos = indexToPos(text, word.start);
var endPos = indexToPos(text, word.end);
errors.push({
row: startPos.row,
column: startPos.column,
endColumn: endPos.column,
type: 'error',
text: "Misspelling: " + word.word,
word: word
});
}
});
callback(null, errors);
});
});
});
};
function textToWordsWithPositions(text) {
var word = '';
var words = [];
var wordStart = -1;
for (var i = 0; i < text.length; i++) {
var ch = text[i];
if (RE_WORD.exec(ch)) {
word += ch;
if (wordStart === -1) {
wordStart = i;
}
} else if (wordStart !== -1) {
words.push({
word: word,
start: wordStart,
end: i
});
wordStart = -1;
word = '';
}
}
return words;
}