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.

cpplite

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.

cnd-small - Objectives

The objectives of the proposal are:

Proposed plan

The proposed plan is as follows:

cnd-small/1 - Recover some of the funcionalities of the cnd cluster in a new  "cnd-small" branch

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: COMPLETEThis stage completed in 2022/01/06 https://github.com/apache/netbeans/commit/9feca6f8a5fd873751e6ff0ffe3db4e3c1a02840

cnd-small/2 - Import latest enhancements from master

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: COMPLETEThis 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

cnd-small/3 - Integrate cnd-small with cpplite

STATUS: ONGOINGAs 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".

cnd-small/4 - Release and future enhancements

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: PENDINGPending on the results of previous phases.