Merge pull request #1494 from danyaPostfactum/snippetcompleter

Show snippets in suggestion list
This commit is contained in:
Harutyun Amirjanyan 2013-06-30 10:07:24 -07:00
commit 6a87d9782b
4 changed files with 34 additions and 9 deletions

View file

@ -36,6 +36,7 @@ var AcePopup = require("./autocomplete/popup").AcePopup;
var util = require("./autocomplete/util");
var event = require("./lib/event");
var lang = require("./lib/lang");
var snippetManager = require("./snippets").snippetManager;
var Autocomplete = function() {
this.keyboardHandler = new HashHandler();
@ -136,14 +137,15 @@ var Autocomplete = function() {
if (data.completer && data.completer.insertMatch) {
data.completer.insertMatch(this.editor);
} else {
if (data.value)
data = data.value;
if (this.completions.filterText) {
var range = this.editor.selection.getRange();
range.start.column -= this.completions.filterText.length;
this.editor.session.remove(range);
}
this.editor.insert(data);
if (data.snippet)
snippetManager.insertSnippet(this.editor, data.snippet);
else
this.editor.insert(data.value || data);
}
};
@ -172,7 +174,7 @@ var Autocomplete = function() {
var matches = [];
util.parForEach(editor.completers, function(completer, next) {
completer.getCompletions(session, pos, prefix, function(err, results) {
completer.getCompletions(editor, session, pos, prefix, function(err, results) {
if (!err)
matches = matches.concat(results);
next();

View file

@ -128,11 +128,13 @@ var AcePopup = function(parentNode) {
return tokens;
if (typeof data == "string")
data = {value: data};
if (!data.caption)
data.caption = data.value;
tokens.push({type: data.className || "", value: data.value});
tokens.push({type: data.className || "", value: data.caption});
if (data.meta) {
var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;
if (data.meta.length + data.value.length < maxW - 2)
if (data.meta.length + data.caption.length < maxW - 2)
tokens.push({type: "rightAlignedText", value: data.meta});
}
return tokens;

View file

@ -74,7 +74,7 @@ define(function(require, exports, module) {
return wordScores;
}
exports.getCompletions = function(session, pos, prefix, callback) {
exports.getCompletions = function(editor, session, pos, prefix, callback) {
var wordScore = wordDistance(session, pos, prefix);
var wordList = filterPrefix(prefix, Object.keys(wordScore));
callback(null, wordList.map(function(word) {

View file

@ -37,7 +37,7 @@ var config = require("../config");
var textCompleter = require("../autocomplete/text_completer");
var keyWordCompleter = {
getCompletions: function(session, pos, prefix, callback) {
getCompletions: function(editor, session, pos, prefix, callback) {
var keywords = session.$mode.$keywordList || [];
keywords = keywords.filter(function(w) {
return w.lastIndexOf(prefix, 0) == 0;
@ -53,7 +53,28 @@ var keyWordCompleter = {
}
};
var completers = [textCompleter, keyWordCompleter]; // todo add snippets completer
var snippetCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
var scope = snippetManager.$getScope(editor);
var snippetMap = snippetManager.snippetMap;
var completions = [];
[scope, "_"].forEach(function(scope) {
var snippets = snippetMap[scope] || [];
for (var i = snippets.length; i--;) {
var s = snippets[i];
if (s.tabTrigger && s.tabTrigger.indexOf(prefix) === 0)
completions.push({
caption: s.tabTrigger,
snippet: s.content,
meta: "snippet"
});
}
}, this);
callback(null, completions);
}
};
var completers = [snippetCompleter, textCompleter, keyWordCompleter];
exports.addCompleter = function(completer) {
completers.push(completer);
};