Skip to content

Commit

Permalink
[Clangd] Support Authority-less URIs
Browse files Browse the repository at this point in the history
Clangd strips URIs by removing the file:// part but some clients can send file:
which is also valid according to RFC 3896. For example, if a client sends
file:///home/user, it gets converted to /home/user but if a client sends
file:/home/user, it is left untouched and problems arise.

Patch by Marc-Andre Laperle!

Differential Revision: https://reviews.llvm.org/D32234

llvm-svn: 300990
  • Loading branch information
d0k committed Apr 21, 2017
1 parent 337d4d9 commit 8c3ba63
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
2 changes: 2 additions & 0 deletions clang-tools-extra/clangd/Protocol.cpp
Expand Up @@ -25,6 +25,8 @@ URI URI::fromUri(llvm::StringRef uri) {
URI Result;
Result.uri = uri;
uri.consume_front("file://");
// Also trim authority-less URIs
uri.consume_front("file:");
// For Windows paths e.g. /X:
if (uri.size() > 2 && uri[0] == '/' && uri[2] == ':')
uri.consume_front("/");
Expand Down
10 changes: 10 additions & 0 deletions clang-tools-extra/test/clangd/completion.test
Expand Up @@ -20,6 +20,16 @@ Content-Length: 148
# CHECK-DAG: {"label":"bb","kind":5}
# CHECK-DAG: {"label":"ccc","kind":5}
# CHECK: ]}
Content-Length: 146

{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"file:/main.cpp"},"position":{"line":3,"character":5}}}
# Test authority-less URI
#
# CHECK: {"jsonrpc":"2.0","id":1,"result":[
# CHECK-DAG: {"label":"a","kind":5}
# CHECK-DAG: {"label":"bb","kind":5}
# CHECK-DAG: {"label":"ccc","kind":5}
# CHECK: ]}
Content-Length: 44

{"jsonrpc":"2.0","id":3,"method":"shutdown"}

0 comments on commit 8c3ba63

Please sign in to comment.