[clangd-dev] #line directives not considered in clangd

Benedikt Weiß via clangd-dev clangd-dev at lists.llvm.org
Wed Jan 26 00:49:52 PST 2022


Hello,

I am currently using the clangd for writing my own language server 
implementation for a new programming language, let's call it newlang.

In this new programming language, it is possible to write C++ source 
code in specific places, so it is possible to embed C++ code in specific 
syntax constructs. Afterwards the files are compiled to C++ to use the 
normal C++ toolchain.

As you can imagine, the embedded C++ from the original file is now also 
contained in the generated C++ file but in other places (at other line 
numbers etc because of additional generated C++ code). So, the embedded 
C++ source code which was at, for example, line 52 (in the original file 
of the new programming language) is now at line 132 in the generated C++ 
file.

To generate meaningful compiler messages, those places in the C++ file 
are annotated with #line directives which link back to the original file 
because you do not want to edit and analyze *generated* files but the 
original source file in the new programming language.

So, if I am using the standalone clang compiler, everything is correct 
and as expected:

benedikt at fedora:~$ clang /path/to/example_file.cxx
/path/to/example_file.newlang:39:9: warning: expression result unused 
[-Wunused-value]

because of something like

#line 22 "/path/to/example_file.newlang"

in the generated example_file.cxx. This is correct because the 
example_file.cxx is generated from the example_file.newlang and "links 
back" to the original location of the C++ source code, via those #line 
directives.

Now my question is: How can I get the *clangd* to recognize/consider 
#line directives? I could not get it to work. clangd seems to ignore 
them. clangd compiles the file correctly and generates 
"publishDiagnostics" with the same warning and error messages etc but 
without considering the #line directives, it only considers the line 
numbers from the C++ file (in this example_file.cxx it would be like 
line 132).

I also tried "-fuse-line-directives" but without success.


Thanks you for your time.




With kind regards,


Benedikt Weiß







More information about the clangd-dev mailing list