From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: r.herdt@posteo.de Newsgroups: gmane.lisp.guile.user Subject: LSP Server for Scheme (and more ...) Date: Fri, 10 Jun 2022 22:05:12 +0000 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39180"; mail-complaints-to="usenet@ciao.gmane.io" To: guile-user Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Sat Jun 11 00:05:41 2022 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nzmlA-0009yW-LB for guile-user@m.gmane-mx.org; Sat, 11 Jun 2022 00:05:40 +0200 Original-Received: from localhost ([::1]:51676 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nzml9-0004ZY-Di for guile-user@m.gmane-mx.org; Fri, 10 Jun 2022 18:05:39 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzmkq-0004ZB-0O for guile-user@gnu.org; Fri, 10 Jun 2022 18:05:20 -0400 Original-Received: from mout01.posteo.de ([185.67.36.65]:40515) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nzmkn-0002nJ-S4 for guile-user@gnu.org; Fri, 10 Jun 2022 18:05:19 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id ED798240026 for ; Sat, 11 Jun 2022 00:05:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.de; s=2017; t=1654898714; bh=DSWI3Fhzue3+qsjVTkWfZ4OEAXPTC9/ZfNA+oVvKV8U=; h=Date:From:To:Subject:From; b=V8IXzSkZNxhTMh7LF2mHVszfB8QifHHWEWvjqDqw9bt6nc7BDMIhS2rB/eSBHm2An NyaH8eKSCL9ByNt9tu82ufPSGPYDF477JaHxLd70bb/MlPqqvCYmxe2vHJzc7Gv3oM Iy9go96tg8FZf78Ej2RoBPdU7SaidBtHRxfOPM9VHVd0t67HN4ybxopybmZEqq1j36 wVj5we7KuqZAGtpdwC2MGmDq76E1KjVat+5qwsrIKYNEP29AC96YmDkfnX7cQpSNG0 GWV2+lVonswcmQdc7/2FdmuK08mPoErZhWCcmduL+scSDrivjSCLxEuDlS8PWqrWKt j4/e/8d4RW/2A== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4LKZlF1v6Fz9rxD for ; Sat, 11 Jun 2022 00:05:12 +0200 (CEST) Received-SPF: pass client-ip=185.67.36.65; envelope-from=r.herdt@posteo.de; helo=mout01.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:18298 Archived-At: Hi Guilers! I want to share a couple of things I have being working on that you may find useful. 1) I developed an LSP Server for Scheme. For those that don't know the Language Server Protocol (LSP), it is meant for adding programming language support for IDEs and editors that implement the protocol (nowadays most of them support it). For now I am focusing on Guile 3 and CHICKEN 5. The idea is to write as much R7RS for common code as possible (like representing documents, fetching word under cursor etc.) and leave implementation specific code to dedicated files. So far I managed to implement auto-completion, fetch signature, fetch documentation and jump to definition. Repo: https://codeberg.org/rgherdt/scheme-lsp-server 2) An LSP server without a client is quite useless, so I'm also sharing an emacs-lsp client: Repo: https://codeberg.org/rgherdt/emacs-lsp-scheme I will create a PR to melpa for this. Until it is merged, you can clone the repo somewhere, 'load' it and follow the instructions in the README to activate it. Usage is based on interaction with the REPL, which is based on Emacs's built-in scheme inferior-mode. So you have to load the file (say by typing C-c C-l on a buffer) in order to get access to symbols imported from other modules. Note: for daily use you probably should stick to Geiser, since its Guile support is obviously much more mature. It can still become useful for other Schemes though, and is a good way to develop the LSP server without leaving Emacs ;) 3) The whole idea behind LSP is to improve language support across multiple IDEs/editors. So I started a proof of concept in VS Code: https://codeberg.org/rgherdt/vscode-scheme-lsp Since I don't use VS Code, I don't expect spending much time on it. I also don't know how a lispy LSP client should/could look like in VS Code. If you have ideas, or want to contribute/take over this, feel free to contact me. It is not documented nor published yet, but already works for the functionality mentioned (there are a couple of command to launch a REPL and load files on it). I will investigate how to automate installation of the LSP server before publishing it and let you know. Everything is on an early stage of development, and APIs may change. I tested it using following software: - Guile 3.0.8 - Emacs 27.1 and 28.1 - Debian Bullseye and Ubuntu 18.04 Any questions, suggestions, critics and contributions are more than welcome. We can also reach me on @libera's #guile, #chicken, #scheme channels by the name rgherdt. Have a nice weekend you all! Ricardo