##// END OF EJS Templates
flush replies when entering an eventloop...
flush replies when entering an eventloop avoids possible hangs when the GUI eventloop prevents queued replies from being sent

File last commit:

r11033:fa36e98f
r15232:158d7616
Show More
contexthint.js
94 lines | 2.9 KiB | application/javascript | JavascriptLexer
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 // highly adapted for codemiror jshint
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 (function () {
Matthias BUSSONNIER
fix and retab javascript
r7133 "use strict";
Matthias BUSSONNIER
beautify context-hint.js
r7194
Matthias BUSSONNIER
fix and retab javascript
r7133 function forEach(arr, f) {
for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 }
Matthias BUSSONNIER
beautify context-hint.js
r7194
Matthias BUSSONNIER
fix and retab javascript
r7133 function arrayContains(arr, item) {
if (!Array.prototype.indexOf) {
var i = arr.length;
while (i--) {
Matthias BUSSONNIER
beautify context-hint.js
r7194 if (arr[i] === item) {
return true;
}
Matthias BUSSONNIER
fix and retab javascript
r7133 }
return false;
}
return arr.indexOf(item) != -1;
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 }
Matthias BUSSONNIER
beautify context-hint.js
r7194
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 CodeMirror.contextHint = function (editor) {
Matthias BUSSONNIER
fix and retab javascript
r7133 // Find the token at the cursor
Matthias BUSSONNIER
beautify context-hint.js
r7194 var cur = editor.getCursor(),
token = editor.getTokenAt(cur),
tprop = token;
Matthias BUSSONNIER
fix and retab javascript
r7133 // If it's not a 'word-style' token, ignore the token.
// If it is a property, find out what it is a property of.
var list = new Array();
Matthias BUSSONNIER
beautify context-hint.js
r7194 var clist = getCompletions(token, editor);
for (var i = 0; i < clist.length; i++) {
list.push({
str: clist[i],
type: "context",
from: {
line: cur.line,
ch: token.start
},
to: {
line: cur.line,
ch: token.end
}
})
Matthias BUSSONNIER
fix and retab javascript
r7133 }
return list;
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 }
Matthias BUSSONNIER
fix and retab javascript
r7133 // find all 'words' of current cell
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 var getAllTokens = function (editor) {
Matthias BUSSONNIER
beautify context-hint.js
r7194 var found = [];
// add to found if not already in it
Matthias BUSSONNIER
be smarter for context completion...
r7140
Matthias BUSSONNIER
beautify context-hint.js
r7194 function maybeAdd(str) {
if (!arrayContains(found, str)) found.push(str);
}
// loop through all token on all lines
var lineCount = editor.lineCount();
// loop on line
for (var l = 0; l < lineCount; l++) {
var line = editor.getLine(l);
//loop on char
for (var c = 1; c < line.length; c++) {
var tk = editor.getTokenAt({
line: l,
ch: c
});
// if token has a class, it has geat chances of beeing
// of interest. Add it to the list of possible completions.
// we could skip token of ClassName 'comment'
// or 'number' and 'operator'
if (tk.className != null) {
maybeAdd(tk.string);
}
// jump to char after end of current token
c = tk.end;
Matthias BUSSONNIER
be smarter for context completion...
r7140 }
}
Matthias BUSSONNIER
beautify context-hint.js
r7194 return found;
Matthias BUSSONNIER
fix and retab javascript
r7133 }
Matthias BUSSONNIER
implement the completer in a separate class...
r7131
Matthias BUSSONNIER
be smarter for context completion...
r7140
Matthias BUSSONNIER
beautify context-hint.js
r7194 function getCompletions(token, editor) {
Matthias BUSSONNIER
fix and retab javascript
r7133 var candidates = getAllTokens(editor);
// filter all token that have a common start (but nox exactly) the lenght of the current token
Matthias BUSSONNIER
space after function keyword in context-hint
r7195 var lambda = function (x) {
Matthias BUSSONNIER
beautify context-hint.js
r7194 return (x.indexOf(token.string) == 0 && x != token.string)
Matthias BUSSONNIER
fix and retab javascript
r7133 };
var filterd = candidates.filter(lambda);
return filterd;
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 }
})();