sublime text 3自动完成插件无法正常工作

时间:2015-02-23 13:01:23

标签: python sublimetext3 sublime-text-plugin

我尝试编写一个插件来获取当前文件夹中的所有类来进行自动完成注入。

以下代码在我的python文件中:

class FolderPathAutoComplete(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        folders = view.window().folders()
        results = get_path_classes(folders)
        all_text = ""
        for result in results:
            all_text += result + "\n"
        #sublime.error_message(all_text)
        return results


def get_path_classes(folders):
    classesList = []
    for folder in folders:
        for root, dirs, files in os.walk(folder):
            for filename in files:
                filepath = root +"/"+filename
                if filepath.endswith(".java"):
                    filepath = filepath.replace(".java","")
                    filepath = filepath[filepath.rfind("/"):]
                    filepath = filepath[1:]
                    classesList.append(filepath)
    return classesList

但不知何故,当我在一个名为“LandingController.java”的类的文件夹目录中工作并尝试获取结果时,自动完成功能根本无效。

但是,您可能已经注意到我输入了所有内容的error_message输出,但实际上找到了一个类名列表。

任何人都可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,sublime文本接受的实际格式是:[(word,word),...]

但感谢MattDMo指出文档,因为官方文档没有说明自动完成部分。

为了更好地理解自动完成注入api,您可以关注Zinggi的插件DictionaryAutoComplete,这是github link

所以对于标准解决方案:

class FolderPathAutoComplete(sublime_plugin.EventListener):

    def on_query_completions(self, view, prefix, locations):
        suggestlist = self.get_autocomplete_list(prefix)
        return suggestlist


    def get_autocomplete_list(self, word):
        global classesList

        autocomplete_list = []
        uniqueautocomplete = set()
        # filter relevant items:
        for w in classesList:
            try:
                if word.lower() in w.lower():
                    actual_class = parse_class_path_only_name(w)
                    if actual_class not in uniqueautocomplete:
                        uniqueautocomplete.add(actual_class)
                        autocomplete_list.append((actual_class, actual_class))
            except UnicodeDecodeError:
                print(actual_class)
                # autocomplete_list.append((w, w))
                continue

        return autocomplete_list