[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