You may read my paper and cite like this
WANG, Z. (2025, May 12). Scheme-langserver: Treat Scheme Code Editing as the First-Class Concern. The 18th European Lisp Symposium (ELS`25), Zurich. https://doi.org/10.5281/zenodo.15384882
Due to GitHub may block Chinese IP addresses, I have to copy this repository to here and here. I will continually update all repositories but I can't guarrentee. I now also collaborate with XmacsLabs, you may also find a fork here.
default.mp4Now, VSCode can use scheme-langserver! Please refere HERE.
NOTE: There're many many bugs in scheme-langserver. I'm just fixing and appealing help from the community. Please be patient.
NOTE: you can find the auto generated type information here. It's now mainly used for next-stage-development (maybe include AKKU) and debugging.
Implementing support like autocomplete, goto definition, or documentation on hover is a significant effort for programming. However, comparing to other language like java, python, javascript and c, language server protocol implementation for lisp language are just made in a vacuum. Geiser, racket langserver and swish-lint etc., their works are all based on repl
(Read-Eval-Print Loop) or keyword tokenizer instead of programming. For example, if a programmer was coding on an unaccomplished project, in which the codes were not fully executable, Geiser or any others would only complete top-level binding identifiers listed by environment-symbols
procedure (for Chez), or complete symbols instead of identifiers. Which means for local bindings and unaccomplished codes, though making effort for programming is supposed of the importance mostly, Geiser and its counterparts help nothing on recognizing identifier's valid scope. Familiar cases occur with goto definition and many other functionalities.
A primary cause is, for scheme and other lisp dialects, their abundant data sets and flexible control structures raise program analysis a big challenge. Especially the macro, it seems like that scheme is mainly used for genius and meta/macro programming. But I say no. Scheme can make many interesting things if a better programming environment is provided. And now you may STARTUP HERE.
This package is a language server protocol implementation helping scheme programming. It provides completion, definition and type inference. These functionalities are established on static code analysis with r6rs standard and some obvious rules for unaccomplished codes. This package itself and related libraries are published or going to be published with Akku, which is a package manager for Scheme.
This package also has been tested with Chez Scheme versions 9.4 and 9.5. A detailed test on version 10.0.0 will be done after upgrading my laptop OS to a newer version.
I do this open source work just in my spare time and I can contribute many splendid ideas to the community like embedding data flow analysis into scheme-langserver or many other things. And I'm continuously asking for much more donation or funding. You can donate with this patreon page or 爱发电.
Compilation , Intallation & Configuration is HERE Debug or Issue Bugs, you may find THIS helpful.I'll keep fixing bugs, profiling the code, and collecting information for my giant book on homemade type inference system. This will take me about 1 years. Further developments including a VScode plugin and data flow analysis. But actually, I'm now setting this open source work a part-time job, and I can not guarantee a schedule.
2.0.0 Fix many bugs and switch between different top environments.
Previous releases please refer to this file.
scheme --script tests/protocol/apis/test-completion.sps
and the log file scheme-langserver.log
would contain results like this:send-message 2023 11 21 11 26 41 967266866 {"jsonrpc":"2.0","id":"3","result":[{"label":"length-a"},{"label":"length-b"},{"label":"lambda"},{"label":"latin-1-codec"},{"label":"lcm"},{"label":"least-fixnum"},{"label":"length"},{"label":"let"},{"label":"let*"},{"label":"let*-values"},{"label":"let-syntax"},{"label":"let-values"},{"label":"letrec"},{"label":"letrec*"},{"label":"letrec-syntax"},{"label":"lexical-violation?"},{"label":"list"},{"label":"list->string"},{"label":"list->vector"},{"label":"list-ref"},{"label":"list-sort"},{"label":"list-tail"},{"label":"list?"},{"label":"log"},{"label":"lookahead-char"},{"label":"lookahead-u8"}]}
Almost all key procedures and APIs are tested. My work is just so rough but useful, maybe you would like to find what I've done in tests
directory or just run following command in {scheme-langserver-root-directory}
Use Scheme-langserver for Other PurposeNOTE It's hard to do test with threaded environment. So, current tests focus on single thread.
Script-Fu is based on an interpreted language called Scheme, and works by using functions that interact with GIMP's internal functions. Taking this page's script as an example, you can apply scheme-langserver with script file with "SCM" extension.
Well, I'm also interested in OMN (Opusmodus Notation) and AutoLisp. But I still have many things to do.
find . -name "*.sls" ! -path "./.akku/*" |xargs wc -l
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4