Scheme-langserver 是基于 Chez Scheme 并兼容 scheme r6rs 的 language server protocol 实现。它最大的特点是基于未完成的代码做编程辅助,包括自动完成、定义跳转等。这些功能是基于对 r6rs 标准的 scheme 进行静态分析得到的。它被发布在 Akku 和 github。
Scheme-langserver 1.0.10版本修复了之前被废弃的1.0.9版本中的诸多bug,并形成了对Language Server Protocol的更深的理解:
1、LSP服务端处理客户端发送的请求不能像一般服务器一样,直接并行化:诸如文档更改同步之类的请求显然是要循序执行的;
2、索引的并行化颗粒度控制在文档层面上较好,而不能细化到代码层面。因为scheme语言的括号语法导致细微的改变都将极大影响AST的形状,进而产生大量代码差异比较和标识符捕捉同步相关代码。
3、由于LSP客户端实现的方式有较大区别,需要在下一个版本开发窥孔优化功能将客户端的请求进行一定的优化。