如何解决如何让 Sublime Text 插件覆盖用户的默认“auto_complete_selector”设置?
这样做的基本原理是构建一个 ESLint 规则自动完成插件,但当然,我不希望在我的评论之外建议 ESLint 规则自动完成,而且我也不想启用评论中的所有建议.
我正在尝试复制行为 like in this VSCode plugin for the same purpose.
我也不完全确定这种行为是否需要自动完成、片段或两者兼而有之?
对于那些不了解 ESLint 的注释语法的人来说,它是这样的:
var a = 1; // eslint-disable-line RULE_NAME
解决方法
鉴于您正在设置的条件,即
- 补全应仅出现在评论中。
- 补全应仅出现在特定单词(在本例中为
eslint-disable
和 family)之后。
您需要编写一个自定义插件来提供补全并跟踪补全的显示位置。
以下是实现此目的的插件(它模仿了 VS Code 对应物)
import sublime
import sublime_plugin
class ESLintListener(sublime_plugin.EventListener):
eslint_completions = ["camelcase","default-case","func-names","global-require","import/prefer-default-export","indent","max-len","new-cap","no-alert","no-cond-assign","no-confusing","no-console","no-extend-native","no-mixed-operators","no-new","no-param-reassign","no-shadow","no-undef","no-unused-vars","prefer-arrow-callback","prefer-rest-params","react/prop-types","wrap-iife"]
def on_query_completions(self,view,prefix,locations):
if not view.match_selector(locations[0] - 1,"source.js comment"):
return
if (
view.substr(sublime.Region(locations[0] - 16,locations[0] - 2)) == "eslint-disable" or
view.substr(sublime.Region(locations[0] - 21,locations[0] - 2)) == "eslint-disable-line" or
view.substr(sublime.Region(locations[0] - 26,locations[0] - 2)) == "eslint-disable-next-line"
):
return [
sublime.CompletionItem(
trigger=item,annotation=item,details="Eslint rule",kind=(sublime.KIND_ID_FUNCTION,"E","Eslint")
)
for item in self.eslint_completions
]
return None
第一个 if
条件检查条件 (1),第二个条件检查条件 (2),如果匹配也返回所需的完成。
请注意,这不会自动补全 eslint
相关词,而只会补全其后的规则名称。
我使用了一些新的 ST4 功能只是为了增加一点趣味(并且还提供了关于补全的更多细节)。
为了使其正常工作,您需要在 source.js comment
中包含 auto_complete_selector
,因为默认情况下在评论中禁用补全。
编辑(基于评论):
为了避免单词和显式完成,我们使用两个标志,如下所示。这应该会在一定程度上缓解 AC 中显示的其他完成情况。
import sublime
import sublime_plugin
class ESLintListener(sublime_plugin.EventListener):
eslint_completions = ["camelcase",locations[0] - 2)) == "eslint-disable-next-line"
):
return (
[
sublime.CompletionItem(
trigger=item,"Eslint")
)
for item in self.eslint_completions
],sublime.INHIBIT_WORD_COMPLETIONS | sublime.INHIBIT_EXPLICIT_COMPLETIONS
)
return None
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。