Scheme-langserver is a language server protocol implementation based on Chez Scheme and compatible with scheme r6rs. Its biggest feature is programming assistance based on unfinished code, including auto-completion, definition jump, etc. These functions are obtained based on static analysis of the r6rs standard scheme. It is released on Akku and github.

Some auxiliary functions such as auto-completion, definition jump, mouse hovering to display documents, etc. are very helpful for programming. However, with other programming languages ​​such as java, python, javascript and c, the language server protocol implementation of the lisp system is almost blank. Geiser of emacs, racket langserver of Dr. Racket, swish-lint, etc., their work is basically based on repl (Read-Eval-Print Loop) or lexical analyzer, rather than on the general process of programming. For example, if the programmer is participating in an unfinished project, the code in it is not yet able to run, Geiser or other competing products can only provide auto-completion for top-level variables and identifiers, these identifiers in Chez Scheme is generally listed through the environment-symbols process. That is, Geiser, etc. will not help you with uncompleted code and local identifiers, local variables (which autocompletion is mostly completing in other languages). A similar thing happens with other functions such as definition jumps.

A fundamental reason is that for Scheme and other dialects of Lisp, their rich data structures and flexible control mechanisms make static analysis of code a great challenge. In fact, scheme doesn’t even have a general project management framework and corresponding file extension. Take .ss and .scm as an example. Most programmers assume that code using these two file extensions is used in a running environment and do not specify the library information required by the code. Although Akku and Snow encourage providing file information through .sls and .sld and constructing a stable library management framework, involve, load and many other processes make the library link dynamic, which is even less likely to get anything in the static analysis phase of the code information.

#Scheme #langserver #Homepage #Documentation #Download #LSP #Implementation #Scheme #Language #News Fast Delivery

Leave a Comment

Your email address will not be published. Required fields are marked *