2016-02-03 78 views
1

我有一個基於sql模式的自定義高亮模式的ACE編輯器,並且所有工作都正常,但我用大寫定義關鍵字,當autocompleter顯示可用選項時,所有他們是小寫的。大寫ACE編輯器自動完成關鍵字

我檢查了舊的sql模式(在我的修改之前)和行爲是完全一樣的。

是否有任何方法將此選項轉換爲大寫?

我已閱讀此question,但我一直無法找到解決方法。 我也嘗試刪除所有toLowerCase()功能到ext-language-tools.js,但仍顯示小寫的選項。

謝謝!

+0

這看起來像一個在ace中的bug,try op在github上引發一個問題。 –

回答

1

這是一個非常骯髒的解決方法,但您可以嘗試通過添加以下內容來調整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; 
+1

最後我做了另一個解決方法,在控制器中創建一個自定義完成器,使用這個解決方案不需要修改'ext-language_tools.js'。如果你願意,我可以分享完整的代碼。無論如何,您的解決方案工作正常,所以我將其標記爲可接受的答案。 – hmartos

+0

感謝您的更新,自定義完成者是另一種前進方向,我同意。我選擇了離開語言文件提供的關鍵字併爲表和列創建自定義完成者,但當然有多種方法可以解決此問題 – YuvalHerziger

+0

您可以與自定義完成者共享代碼嗎? –

1

下面是一個使用乾淨的解決方案一個自定義完成者:

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, 
];