[cfe-dev] clangd outputting relative/non-canonical URIs
Simon Marchi via cfe-dev
cfe-dev at lists.llvm.org
Sat Jan 27 18:11:29 PST 2018
Hi,
I have a question regarding how clangd returns URIs. Let's say I have a file compiled
with a relative path like this (something that can easily happen when you build
outside the source directory)
clang++ -c ../src/repro.cpp -o repro.o -g3 -O0
The compile_commands.json (as generated with Bear) will contain this:
"directory": "/home/simark/src/repro/build",
"file": "../src/repro.cpp"
If I make some "goto definition" requests, clangd may return a relative URI or a non-canonical
URI:
<-- {"id":124,"jsonrpc":"2.0","method":"textDocument/definition","params":{"position":{"character":3,"line":9},"textDocument":{"uri":"file:///home/simark/src/repro/src/repro.cpp"}}}
--> {"id":124,"jsonrpc":"2.0","result":[{"range":{"end":{"character":1,"line":5},"start":{"character":0,"line":2}},"uri":"file://../src/repro.cpp"}]}
<-- {"id":125,"jsonrpc":"2.0","method":"textDocument/definition","params":{"position":{"character":3,"line":4},"textDocument":{"uri":"file:///home/simark/src/repro/src/repro.cpp"}}}
--> {"id":125,"jsonrpc":"2.0","result":[{"range":{"end":{"character":5,"line":1},"start":{"character":0,"line":0}},"uri":"file:///home/simark/src/repro/build/../src/repro.h"}]}
In the first case, is it expected for clangd to return the URI "file://../src/repro.cpp"?
First, is it even allowed to have relative URIs? If so, what is it relative to? There was
a discussion here about relative/absolute URIs, the conclusion seems to be that absolute
URIs are the way to go:
https://github.com/Microsoft/language-server-protocol/issues/27
In the second case, the returned URI is not normalized. Should clangd make sure to return
only normalized URIs, to avoid possibly referring to the same file using different paths?
I am attaching a simple reproducer with this message (hopefully the mailing list accepts it).
The instructions for building are in the README.
Thanks,
Simon
-------------- next part --------------
A non-text attachment was scrubbed...
Name: repro.tar.gz
Type: application/gzip
Size: 823 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180127/bef9b9f2/attachment.bin>
More information about the cfe-dev
mailing list