2016-02-03 45 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, 
];