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 util = require("./autocomplete/util");
|
||||||
var event = require("./lib/event");
|
var event = require("./lib/event");
|
||||||
var lang = require("./lib/lang");
|
var lang = require("./lib/lang");
|
||||||
|
var snippetManager = require("./snippets").snippetManager;
|
||||||
|
|
||||||
var Autocomplete = function() {
|
var Autocomplete = function() {
|
||||||
this.keyboardHandler = new HashHandler();
|
this.keyboardHandler = new HashHandler();
|
||||||
|
|
@ -136,14 +137,15 @@ var Autocomplete = function() {
|
||||||
if (data.completer && data.completer.insertMatch) {
|
if (data.completer && data.completer.insertMatch) {
|
||||||
data.completer.insertMatch(this.editor);
|
data.completer.insertMatch(this.editor);
|
||||||
} else {
|
} else {
|
||||||
if (data.value)
|
|
||||||
data = data.value;
|
|
||||||
if (this.completions.filterText) {
|
if (this.completions.filterText) {
|
||||||
var range = this.editor.selection.getRange();
|
var range = this.editor.selection.getRange();
|
||||||
range.start.column -= this.completions.filterText.length;
|
range.start.column -= this.completions.filterText.length;
|
||||||
this.editor.session.remove(range);
|
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 = [];
|
var matches = [];
|
||||||
util.parForEach(editor.completers, function(completer, next) {
|
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)
|
if (!err)
|
||||||
matches = matches.concat(results);
|
matches = matches.concat(results);
|
||||||
next();
|
next();
|
||||||
|
|
|
||||||
|
|
@ -128,11 +128,13 @@ var AcePopup = function(parentNode) {
|
||||||
return tokens;
|
return tokens;
|
||||||
if (typeof data == "string")
|
if (typeof data == "string")
|
||||||
data = {value: data};
|
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) {
|
if (data.meta) {
|
||||||
var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;
|
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});
|
tokens.push({type: "rightAlignedText", value: data.meta});
|
||||||
}
|
}
|
||||||
return tokens;
|
return tokens;
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ define(function(require, exports, module) {
|
||||||
return wordScores;
|
return wordScores;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getCompletions = function(session, pos, prefix, callback) {
|
exports.getCompletions = function(editor, session, pos, prefix, callback) {
|
||||||
var wordScore = wordDistance(session, pos, prefix);
|
var wordScore = wordDistance(session, pos, prefix);
|
||||||
var wordList = filterPrefix(prefix, Object.keys(wordScore));
|
var wordList = filterPrefix(prefix, Object.keys(wordScore));
|
||||||
callback(null, wordList.map(function(word) {
|
callback(null, wordList.map(function(word) {
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ var config = require("../config");
|
||||||
|
|
||||||
var textCompleter = require("../autocomplete/text_completer");
|
var textCompleter = require("../autocomplete/text_completer");
|
||||||
var keyWordCompleter = {
|
var keyWordCompleter = {
|
||||||
getCompletions: function(session, pos, prefix, callback) {
|
getCompletions: function(editor, session, pos, prefix, callback) {
|
||||||
var keywords = session.$mode.$keywordList || [];
|
var keywords = session.$mode.$keywordList || [];
|
||||||
keywords = keywords.filter(function(w) {
|
keywords = keywords.filter(function(w) {
|
||||||
return w.lastIndexOf(prefix, 0) == 0;
|
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) {
|
exports.addCompleter = function(completer) {
|
||||||
completers.push(completer);
|
completers.push(completer);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue