我有一個基於sql模式的自定義高亮模式的ACE編輯器,並且所有工作都正常,但我用大寫定義關鍵字,當autocompleter顯示可用選項時,所有他們是小寫的。大寫ACE編輯器自動完成關鍵字
我檢查了舊的sql模式(在我的修改之前)和行爲是完全一樣的。
是否有任何方法將此選項轉換爲大寫?
我已閱讀此question,但我一直無法找到解決方法。 我也嘗試刪除所有toLowerCase()
功能到ext-language-tools.js
,但仍顯示小寫的選項。
謝謝!
我有一個基於sql模式的自定義高亮模式的ACE編輯器,並且所有工作都正常,但我用大寫定義關鍵字,當autocompleter顯示可用選項時,所有他們是小寫的。大寫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;
最後我做了另一個解決方法,在控制器中創建一個自定義完成器,使用這個解決方案不需要修改'ext-language_tools.js'。如果你願意,我可以分享完整的代碼。無論如何,您的解決方案工作正常,所以我將其標記爲可接受的答案。 – hmartos
感謝您的更新,自定義完成者是另一種前進方向,我同意。我選擇了離開語言文件提供的關鍵字併爲表和列創建自定義完成者,但當然有多種方法可以解決此問題 – YuvalHerziger
您可以與自定義完成者共享代碼嗎? –
下面是一個使用乾淨的解決方案一個自定義完成者:
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,
];
這看起來像一個在ace中的bug,try op在github上引發一個問題。 –