##// END OF EJS Templates
Toggle line numbers in menu...
Toggle line numbers in menu use 'Toggle' text, instead of switching between Show/Hide

File last commit:

r18280:80b3c9ff
r19320:98a32711
Show More
contexthint.js
98 lines | 3.0 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
MWE,...
r17200 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
Matthias BUSSONNIER
implement the completer in a separate class...
r7131 // highly adapted for codemiror jshint
Matthias BUSSONNIER
Update to codemirror 4...
r18280 define(['codemirror/lib/codemirror'], function(CodeMirror) {
Matthias BUSSONNIER
fix and retab javascript
r7133 "use strict";
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 var forEach = function(arr, f) {
Matthias BUSSONNIER
fix and retab javascript
r7133 for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
Jonathan Frederic
MWE,...
r17200 };
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 var arrayContains = function(arr, item) {
Matthias BUSSONNIER
fix and retab javascript
r7133 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;
Jonathan Frederic
MWE,...
r17200 };
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.
Jonathan Frederic
MWE,...
r17200 var list = [];
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
}
Jonathan Frederic
MWE,...
r17200 });
Matthias BUSSONNIER
fix and retab javascript
r7133 }
return list;
Jonathan Frederic
MWE,...
r17200 };
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) {
Jonathan Frederic
MWE,...
r17200 var found = [];
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 // add to found if not already in it
Matthias BUSSONNIER
be smarter for context completion...
r7140
Jonathan Frederic
MWE,...
r17200 function maybeAdd(str) {
if (!arrayContains(found, str)) found.push(str);
}
Matthias BUSSONNIER
beautify context-hint.js
r7194
Jonathan Frederic
MWE,...
r17200 // 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);
Matthias BUSSONNIER
be smarter for context completion...
r7140 }
Jonathan Frederic
MWE,...
r17200 // jump to char after end of current token
c = tk.end;
Matthias BUSSONNIER
be smarter for context completion...
r7140 }
Matthias BUSSONNIER
fix and retab javascript
r7133 }
Jonathan Frederic
MWE,...
r17200 return found;
};
Matthias BUSSONNIER
implement the completer in a separate class...
r7131
Jonathan Frederic
MWE,...
r17200 var getCompletions = function(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) {
Jonathan Frederic
MWE,...
r17200 return (x.indexOf(token.string) === 0 && x != token.string);
Matthias BUSSONNIER
fix and retab javascript
r7133 };
var filterd = candidates.filter(lambda);
return filterd;
Jonathan Frederic
MWE,...
r17200 };
Jonathan Frederic
Return dicts instead of classes,...
r17201 return {'contextHint': CodeMirror.contextHint};
Jonathan Frederic
MWE,...
r17200 });