| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package source |
| |
| import ( |
| "fmt" |
| "path/filepath" |
| "strings" |
| |
| "golang.org/x/tools/internal/lsp/protocol" |
| ) |
| |
| const fileSchemePrefix = "file://" |
| |
| // FromURI gets the file path for a given URI. |
| // It will return an error if the uri is not valid, or if the URI was not |
| // a file URI |
| func FromURI(uri protocol.DocumentURI) (string, error) { |
| s := string(uri) |
| if !strings.HasPrefix(s, fileSchemePrefix) { |
| return "", fmt.Errorf("only file URI's are supported, got %v", uri) |
| } |
| return filepath.FromSlash(s[len(fileSchemePrefix):]), nil |
| } |
| |
| // ToURI returns a protocol URI for the supplied path. |
| // It will always have the file scheme. |
| func ToURI(path string) protocol.DocumentURI { |
| return protocol.DocumentURI(fileSchemePrefix + filepath.ToSlash(path)) |
| } |