我尝试编写一个插件来获取当前文件夹中的所有类来进行自动完成注入。
以下代码在我的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输出,但实际上找到了一个类名列表。
任何人都可以帮我解决这个问题吗?谢谢!
答案 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