kbobyrev added a comment.

In D89529#2334475 <https://reviews.llvm.org/D89529#2334475>, @ArcsinX wrote:

> In D89529#2334407 <https://reviews.llvm.org/D89529#2334407>, @kbobyrev wrote:
>
>> Hi, thanks for flagging the issue! Could you please give more information 
>> where exactly the tests fail (e.g. logs with assertions)? This way I could 
>> understand where exactly the failure happens.
>
> With current implementation I could not pass Windows path (e.g. C:\a\b\c) to 
> `Marshaller` constructor because of  `assert(RemoteIndexRoot ==  
> llvm::sys::path::convert_to_slash(RemoteIndexRoot));`, because on Windows  
> `llvm::sys::path::convert_to_slash(RemoteIndexRoot)` converts C:\a\b\c to 
> C:/a/b/c

Yes, I mentioned it above. The solution would be to just convert to the POSIX 
path instead of asserting it.

> Another problem is that Windows URI paths are not supported without this 
> patch (e.g. URI=file:///X:/path => Body=/X:/path, and /X:/path does not start 
> with X:\path)

This is an interesting problem and I think this should be covered by the URI 
code that we have but I should check. This might have been triggered by a 
different issue.

> The third problem, that without conversion local Windows paths to native 
> slashes, mixed-slash paths appears at `path::append()` calls and we again 
> face the problem when some paths does not start with given prefix (but it 
> should)

Yes, I mentioned it above. This is not an actual problem if all the paths 
within marshalling are POSIX style. There is a problem with

>> I can understand what you're trying to do but the patch introduces the 
>> behaviour which is unintended as of right now. The convention is to use 
>> POSIX paths everywhere in the Marshalling code since the end result will be 
>> a URI anyway. The patch changes it to Windows slashes which is orthogonal to 
>> this direction.
>
> Idea is to use native slashes (Windows slashes on Windows) *for local paths 
> only* and UNIX slashes inside the wire.
>
> Just to clarify why I changed `llvm::sys::path::convert_to_slash(Result, 
> llvm::sys::path::Style::posix)` to `llvm::sys::path::convert_to_slash(Result, 
> llvm::sys::path::Style::windows)`:
>
> - `llvm::sys::path::convert_to_slash(Result, llvm::sys::path::Style::posix)` 
> no-op on any platform and does nothing with '\' in Windows paths.

Yeah you're right, I missed these `convert_to_slash` semantics and that should 
be changed.

> - `llvm::sys::path::convert_to_slash(Result, 
> llvm::sys::path::Style::windows)` replaces '\' with '/' on any platform.

We don't have actual filesystem paths anywhere outside `FuzzyFindRequest`, 
every other clangd struct stores URIs rather than paths. And when the URI is 
created it doesn't matter whether this path would be a Windows or POSIX, a URI 
is portable. Hence, the only place with native paths should be the 
`FuzzyFindRequest` translation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89529/new/

https://reviews.llvm.org/D89529

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to