[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