Merge pull request #1494 from danyaPostfactum/snippetcompleter
Show snippets in suggestion list
This commit is contained in:
commit
6a87d9782b
4 changed files with 34 additions and 9 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue