Project

General

Profile

Actions

Feature #19011

open

Improve LSP support in CRuby development itself

Added by tenderlovemaking (Aaron Patterson) 3 months ago. Updated 26 days ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:109957]

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) 26 days 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 (Matthew Valentine-House) 26 days 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0