【问题标题】:Variable name autocomplete for VSCode Language Extension (GameMaker / GML files)?VSCode 语言扩展(GameMaker / GML 文件)的变量名自动完成?
【发布时间】:2021-09-21 14:35:03
【问题描述】:

我正在 VSCode 中编辑 GML 文件 (GameMaker Studio)。有一个很棒的插件,GML Support,它为内置的 GML 函数和实例变量添加了自动完成功能以及其他一些很酷的东西。

但是,VSCode 似乎无法识别 GML 中的局部变量(请参阅下面的屏幕截图。点表示法可以正常工作)

我查看了 VSCode's Programmatic Language Extension 的变量名自动完成功能,但仍然不明白如何使用 VSCode 的语言服务器注册变量声明(即 var fooBar = 23;)。

理想情况下,我希望语言服务器尊重 GML 文件的变量范围:

  1. 全局变量 - script 文件夹下的文件的任何 var 声明
  2. 任何局部变量声明 - 周围 {...} 中的所有 var 声明

如上所述添加变量名称完成的最简单方法是什么?

提前致谢!


编辑:查看vscode-python 以了解如何使用registerCompletionItemProvider(基于VSCode Language Extension doco)。不幸的是,我仍然不清楚 vscode-python 似乎依赖 Jedi 来提供符号?

所以任何点都表示赞赏!

【问题讨论】:

  • 根据github.com/gml-support/gml-support/blob/master/src/gml/…,GML 的完成要么使用硬编码名称(用于全局函数或内置内容),要么使用非常基本的函数名称解析。我猜你需要为变量名添加类似的东西,但尊重范围会更加困难,你可能需要一个语言服务器来处理这种事情。
  • 谢谢@holt。可以使 VSCode 仅搜索当前文件中使用的 words - 这适用于当前文件中的局部变量。我可以对全局文件使用特定的命名约定。现在,VSCode 能够 ctrl-space 建议我之前在 plaintext 文件中输入的单词,但是加载了 GML Support 扩展名后,该功能似乎已被关闭?

标签: visual-studio-code vscode-extensions game-maker-studio-2 game-maker-language


【解决方案1】:

如果您想启用简单的自动完成,您可以将以下内容添加到您的settings.json(命令面板➜打开设置(JSON)):

  "[gml-gms81]": { "editor.quickSuggestions": true },
  "[gml-gms1]": { "editor.quickSuggestions": true },
  "[gml-gms2]": { "editor.quickSuggestions": true },

适用于解决方法:


对于正确的解决方案,您需要使用registerCompletionItemProvider 并按需或随时索引文件。

official example 演示使用。

对于处理 GML 语法的复杂性,您可以在我制作的基于 Ace 的外部编辑器中查看code。处理变量定义特别需要您以相对的置信度跳过字符串、cmets 和循环值 (var name[=value][, name2[=value2]])(这可以通过平衡解析器完成)。

【讨论】:

  • 感谢@yellowAfterLife。不幸的是,一旦文件类型更改为由gml-support 扩展名添加的 GML2,editor 设置将不起作用。我确实找到了marketplace.visualstudio.com/…,它有时似乎有效——自动完成有时会与gml-support 发生冲突,但它会起作用。 GMEdit 看起来很酷。做得好!我试了一下,但由于 git 集成,最终又回到了 vscode。另外我太依赖 Vim 和 VSCode / Sublime 快捷方式:p
  • 进一步测试,似乎quickSuggestions 只会在常规自动完成菜单没有更多项目可提供时才会弹出,这要么是错误,要么是不幸的行为。至于 GMEdit,您可以更改键绑定,并且代码编辑器设置中有预定义的选项,但与 VSC 相比肯定存在功能差距。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多