大写的 ACE 编辑器自动完成关键字
ACE editor autocompletion keywords in upper case
我有一个基于 sql 模式的自定义突出显示模式的 ACE 编辑器,一切正常,但我以大写形式定义关键字,当自动完成器显示可用选项时,所有它们是小写的。
我检查了旧的 sql 模式(在我修改之前),行为完全相同。
有什么方法可以将此选项转换为大写吗?
我已经查看了此 question,但我一直无法找到执行此操作的方法。
我还尝试将所有 toLowerCase()
函数删除到 ext-language-tools.js
,但仍然以小写字母显示选项。
谢谢!
这是一个非常肮脏的解决方法,但您可以尝试通过添加以下内容来调整 ext-language_tools.js
。
代码的位置:
this.filterCompletions = function(items, needle) {
var results = [];
var upper = needle.toUpperCase();
var lower = needle.toLowerCase();
loop: for (var i = 0, item; item = items[i]; i++) {
var caption = item.value || item.caption || item.snippet;
if (!caption) continue;
更改为以下内容,其中 'keyword'
和 'builtinFunctions'
是您要大写的完成组:
this.filterCompletions = function(items, needle) {
var results = [];
var upper = needle.toUpperCase();
var lower = needle.toLowerCase();
loop: for (var i = 0, item; item = items[i]; i++) {
if (item.meta === 'keyword' || item.meta === 'builtinFunctions'){
items[i].name = items[i].name.toUpperCase();
items[i].value = items[i].value.toUpperCase();
}
var caption = item.value || item.caption || item.snippet;
if (!caption) continue;
这是一个使用自定义完成器的干净解决方案:
const customKeyWordCompleter = {
getCompletions(editor, session, pos, prefix, callback) {
if (session.$mode.completer) {
return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);
}
const state = editor.session.getState(pos.row);
let keywordCompletions;
if (prefix === prefix.toUpperCase()) {
keywordCompletions = session.$mode.getCompletions(state, session, pos, prefix);
keywordCompletions = keywordCompletions.map((obj) => {
const copy = obj;
copy.value = obj.value.toUpperCase();
return copy;
});
} else {
keywordCompletions = session.$mode.getCompletions(state, session, pos, prefix);
}
return callback(null, keywordCompletions);
},
};
this.editor.completers = [
customKeyWordCompleter,
customCompleter,
];
我有一个基于 sql 模式的自定义突出显示模式的 ACE 编辑器,一切正常,但我以大写形式定义关键字,当自动完成器显示可用选项时,所有它们是小写的。
我检查了旧的 sql 模式(在我修改之前),行为完全相同。
有什么方法可以将此选项转换为大写吗?
我已经查看了此 question,但我一直无法找到执行此操作的方法。
我还尝试将所有 toLowerCase()
函数删除到 ext-language-tools.js
,但仍然以小写字母显示选项。
谢谢!
这是一个非常肮脏的解决方法,但您可以尝试通过添加以下内容来调整 ext-language_tools.js
。
代码的位置:
this.filterCompletions = function(items, needle) {
var results = [];
var upper = needle.toUpperCase();
var lower = needle.toLowerCase();
loop: for (var i = 0, item; item = items[i]; i++) {
var caption = item.value || item.caption || item.snippet;
if (!caption) continue;
更改为以下内容,其中 'keyword'
和 'builtinFunctions'
是您要大写的完成组:
this.filterCompletions = function(items, needle) {
var results = [];
var upper = needle.toUpperCase();
var lower = needle.toLowerCase();
loop: for (var i = 0, item; item = items[i]; i++) {
if (item.meta === 'keyword' || item.meta === 'builtinFunctions'){
items[i].name = items[i].name.toUpperCase();
items[i].value = items[i].value.toUpperCase();
}
var caption = item.value || item.caption || item.snippet;
if (!caption) continue;
这是一个使用自定义完成器的干净解决方案:
const customKeyWordCompleter = {
getCompletions(editor, session, pos, prefix, callback) {
if (session.$mode.completer) {
return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);
}
const state = editor.session.getState(pos.row);
let keywordCompletions;
if (prefix === prefix.toUpperCase()) {
keywordCompletions = session.$mode.getCompletions(state, session, pos, prefix);
keywordCompletions = keywordCompletions.map((obj) => {
const copy = obj;
copy.value = obj.value.toUpperCase();
return copy;
});
} else {
keywordCompletions = session.$mode.getCompletions(state, session, pos, prefix);
}
return callback(null, keywordCompletions);
},
};
this.editor.completers = [
customKeyWordCompleter,
customCompleter,
];