State of persistent refactoring server (clangd?), or refactoring tools in general

Hi all,

In looking for C++ refactoring tools recently I came across some slides by Manuel Klimek from 2012 about “clangd”, a persistent refactoring server based on clang. It was in the “design phase” back then, but I can’t find any references to it since. Does anyone know what happened with this project?

More generally, what is the state of clang-based refactoring tools? I see that there are things like clang-rename and clang-modernize; are these the state of the art, or are they more like how-to examples? If they are just examples, where can I find the real action?

I have experience writing refactoring servers in the spirit of clangd for Python, and I’d love to see something like that for C++. So, is something like this available or in the works? I probably have some time that I could devote to such a project; I’m new to llvm/clang, but I’m an old hand at C++ and emacs so I could probably be useful.

Austin

Hi all,

In looking for C++ refactoring tools recently I came across some slides by Manuel Klimek from 2012 about “clangd”, a persistent refactoring server based on clang. It was in the “design phase” back then, but I can’t find any references to it since. Does anyone know what happened with this project?

The closest that exists is ycmd (https://github.com/Valloric/ycmd)

More generally, what is the state of clang-based refactoring tools?

Still early stages. We have many “one-shot” tools that solve a specific use case, but so far not a lot of progress towards the Fowler-refactorings.

I see that there are things like clang-rename and clang-modernize; are these the state of the art, or are they more like how-to examples? If they are just examples, where can I find the real action?

clang-rename just landed last week and is very early stages. I’ve not been using clang-modernize a lot, perhaps others have experience how well it works.

I have experience writing refactoring servers in the spirit of clangd for Python, and I’d love to see something like that for C++. So, is something like this available or in the works? I probably have some time that I could devote to such a project; I’m new to llvm/clang, but I’m an old hand at C++ and emacs so I could probably be useful.

I think the general plan would be:

  1. develop the refactoring tools in tools-extra (like clang-rename), make them integratable as library
  2. once mature, put them into libclang (or generate a similarly C-interfaced refactoring library for clang)
  3. integrate into ycmd

Contributions are of course welcome :slight_smile:

Cheers,
/Manuel