#language-server #lsp #shell #reference #ion #error #ion-shell

bin+lib ion_shell_lsp_server

为 ion shell 脚本语言提供 LSP 服务器

1 个不稳定版本

0.2.0 2024 年 4 月 7 日

#210文本编辑器

MIT 许可证

415KB
11K SLoC

为 ion shell 脚本语言提供 LSP 服务器

功能

以下功能可通过此语言服务器提供给 ion shell 编辑器。这些功能通过 LSP 协议 提供。

此 LSP 服务器提供以下语言功能

  • 诊断:显示 ion shell 脚本语法中的错误。目前不支持语义错误,如引用未定义的变量。
  • 转到定义
    • 变量引用:从变量的引用跳转到同一文件中的声明。
    • 函数引用:从调用跳转到同一文件中的声明。
  • 查找引用
    • 变量引用:列出当前文件及其所有子作用域内对变量名称的所有引用和重新声明
    • 函数引用:列出所有声明的函数调用
  • 文档符号:显示脚本中声明的所有变量和函数
  • 悬停信息:在悬停于函数调用或变量引用时显示以下声明信息。
    • 声明类型(变量或函数)
    • 声明名称(变量或函数名称)
    • 声明行
    • 所有注释
      • 之间没有空行
      • 在声明之前
      • 不是另一个声明的一部分。
    • 行内注释,从声明到行尾
    • 特定于函数
      • 带有可选类型注解的参数。
      • 如果是函数声明,则提供文档字符串
    • 特定于变量
      • 如果变量名称有类型注解,则提供类型注解。

注意:此 LSP 服务器当前独立解析每个文件,不考虑其他文件的来源。这一事实有以下后果

  • 诊断仅在编辑器中打开的文件中显示。
  • 转到定义只能跳转到所选引用的同一文件中的声明。
  • 查找引用仅在同一个文件中查找所有引用。

完全考虑实现其他文件来源的分析

这些限制可以部分解决。这里的“部分”是指只能使用静态源来分析文件,以完全分析其他文件。静态源仅使用在运行时之前可解析的路径,即在脚本执行之前。一旦遇到动态源声明,就可能会出现诸如使用未定义变量之类的语义错误,这可能会导致误报。另一个问题是,文件可能会相互引用,从而导致循环。

这代表着需要克服的以下挑战

  • 检测源是静态的还是动态的。
  • 如何处理动态源。只有当使用静态源时才提供完整的功能,或者获取更多静态部分的分析结果,而不是动态部分。
  • 如何检测循环源,以及在LSP分析中如何处理它。

如何安装LSP服务器

通过git

cargo install --git https://gitlab.redox-os.org/redox-os/ion_lsp ion_shell_lsp_server

Nvim

将以下内容放入您的init.lua文件

vim.api.nvim_create_autocmd('FileType', {
  pattern = 'ion',
  callback = function()
    vim.lsp.start({
      name = 'ion_shell_lsp_server',
      cmd = { 'ion_shell_lsp_server' },
    })
  end,
})

此示例假设LSP服务器可以在PATH变量中找到,名称为"ion_shell_lsp_server"。

变更日志

请参阅变更日志

贡献

请参阅以下指南

许可证

本项目、所有工作空间成员以及Visual Code扩展均受MIT许可证许可。

依赖

~7–17MB
~230K SLoC