Feature #19011
openImprove LSP support in CRuby development itself
Description
I would like to add a new configure option for improve working with language servers inside CRuby itself.
The summary is like this:
$ ./autogen.sh
$ ./configure --enable-compile-commands
$ make -j compile_commands.json
# Now use LSP
clangd
uses compile_commands.json
to understand how to compile files inside CRuby. We can use clang
itself to generate this file, but we have to pass special compile options to clang. Unfortunately the compile options generate many small JSON files, so we also need a way to concatenate them in to compile_commands.json
.
Ideally I would like make miniruby
to build miniruby
and compile_commands.json
, but I don't know how to do that yet. 😅
I've send a patch here
Updated by kjtsanaktsidis (KJ Tsanaktsidis) about 2 years ago
I've been using Bear https://github.com/rizsotto/Bear for this - running bear -- make
generates a passable compile_commands.json file that sort-of works. It doesn't handle some of the trickier things though, e.g. files like vm_insnhelper.c which are not themselves compiled as a translation unit, but rather #include
'd in vm.c. So having some better built-in support for this in the cruby development toolchain would be ace.
Updated by eightbitraptor (Matt V-H) about 2 years ago
kjtsanaktsidis (KJ Tsanaktsidis) wrote in #note-1:
I've been using Bear https://github.com/rizsotto/Bear for this - running
bear -- make
generates a passable compile_commands.json file that sort-of works. It doesn't handle some of the trickier things though, e.g. files like vm_insnhelper.c which are not themselves compiled as a translation unit, but rather#include
'd in vm.c. So having some better built-in support for this in the cruby development toolchain would be ace.
I've also been using bear
to do this, but then running the resultant compilation db through compdb with
compdb -p . list > compile_commands2.json && mv compile_commands2.json compile_commands.json
(assuming .
is the directory that contains compile_commands.json
)
This parses the original compilation database and produces a new one with headers included.
I Appreciate it's another step to take, but hopefully useful until we can provide a better experience.