As stated in 4th and 5th donations the "cnd" cluster as donated presents some issues that have to be resolved. This page presents a proposal to recover some of the functionality of the "cnd" cluster.
Work has progressed in the Apache NetBeans C/C++ front via the "cpplite" cluster, which provides integration with different C/C++ Language Server Protocol servers (LSP), including https://clangd.llvm.org/
These C/C++ LSP servers provide syntax highlighting, code completion, go-to definitions and more (see https://clangd.llvm.org/features for a detailed list of features), and are maintained by third parties.
The "cpplite" cluster offers a basic NetBeans project structure, that requires manual creation of the so-called "compilation database" https://clang.llvm.org/docs/JSONCompilationDatabase.html so that the LSP servers can work properly.
The objectives of the proposal are:
The proposed plan is as follows:
The proposed list of functionalities to recover is:
The idea is to move all the modules in cnd to the contrib directory, but the ones listed in the following build-time-only Dependency Structure Matrix:
(see attached cnd-small-cluster.xlsx for details)
The editor can also be included in the list by removing the dependency with jclank (used only formatting, which will be provided by the LSP servers instead) the resulting DSM would then be (after modifying "cnd.editor") like so:
NOTE: The DSMs above represent build-time module dependencies (not test dependencies nor runtime dependencies).
STATUS: COMPLETE | This stage completed in 2022/01/06 https://github.com/apache/netbeans/commit/9feca6f8a5fd873751e6ff0ffe3db4e3c1a02840 |
---|
Once these functionalities are in place the proposal is to merge master into "cnd-small", to integrate with the latest enhancements.
The objective is to pass the "ant commit-validation" checks, to make sure the cnd branch is ready to be merged in master.
STATUS: COMPLETE | This stage started in 2022/01/06 https://github.com/apache/netbeans/commit/f790d79d8f0d0ccee9de517854cf7b9a4b56a1ca and ended in 2022/01/15 https://github.com/apache/netbeans/commit/8fc91fa12c4c0e04c42bef9907604aeb1229cb6f |
---|
STATUS: ONGOING | As discussed on the dev mailing list on how to proceed with this integration: https://lists.apache.org/thread/n6cgbbpjmp04x76wmh6wlqlv4ophbprf |
---|
The objecives are:
The tasks required (to be done in the "cnd" branch) will be (no special order here):
The proposed plan of action is:
3.1.- Generate "compile_commands.json" automatically in Make based projects in a new module "cnd.lsp".
3.2.- Gradually integrate LSP support in cnd.lsp (and remove it from cpplite).
3.3.- Add debugging support in cnd.debugger (dropping cpplite.debugger).
3.4.- Get rid of "cnd/cnd.debugger/external/cpplite-mi-1.0-SNAPSHOT.jar" retrieving donated stuff from contrib/cnd.debugger as required
Steps 3.3 and 3.4 above merged in https://github.com/apache/netbeans/commit/9bdac2b8ed38528a3b196fbdd0424d34717f4e3a , we've recovered cnd.debugger.common2 and cnd.debugger.gdb from contrib).
3.5.- Migration path from "cpplite" projects to "Make based projects with existing sources.
NOTE: Cpplite "lsp" support does not currently register the LSP servers in the Options Dialog as "ide/lsp.client" does. We could explore the possibility to use "clangd", "ccls" (as cpplite does) or even Apple's sourcekit-lsp: https://github.com/apple/sourcekit-lsp and register them in the Options Dialog of "ide/lsp.client".
At this stage this small subset of the "cnd" cluster could hopefully be rolled-out to users.
After that there are some possible future enhancements:
STATUS: PENDING | Pending on the results of previous phases. |
---|