GoPLS Viewer

Home|gopls/godoc/vfs/fs.go
1// Copyright 2021 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build go1.16
6// +build go1.16
7
8package vfs
9
10import (
11    "io/fs"
12    "os"
13    "path"
14    "strings"
15)
16
17// FromFS converts an fs.FS to the FileSystem interface.
18func FromFS(fsys fs.FSFileSystem {
19    return &fsysToFileSystem{fsys}
20}
21
22type fsysToFileSystem struct {
23    fsys fs.FS
24}
25
26func (f *fsysToFileSystemfsPath(name stringstring {
27    name = path.Clean(name)
28    if name == "/" {
29        return "."
30    }
31    return strings.TrimPrefix(name"/")
32}
33
34func (f *fsysToFileSystemOpen(name string) (ReadSeekClosererror) {
35    fileerr := f.fsys.Open(f.fsPath(name))
36    if err != nil {
37        return nilerr
38    }
39    if rscok := file.(ReadSeekCloser); ok {
40        return rscnil
41    }
42    return &noSeekFile{f.fsPath(name), file}, nil
43}
44
45func (f *fsysToFileSystemLstat(name string) (os.FileInfoerror) {
46    return fs.Stat(f.fsysf.fsPath(name))
47}
48
49func (f *fsysToFileSystemStat(name string) (os.FileInfoerror) {
50    return fs.Stat(f.fsysf.fsPath(name))
51}
52
53func (f *fsysToFileSystemRootType(name stringRootType { return "" }
54
55func (f *fsysToFileSystemReadDir(name string) ([]os.FileInfoerror) {
56    dirserr := fs.ReadDir(f.fsysf.fsPath(name))
57    var infos []os.FileInfo
58    for _d := range dirs {
59        infoerr1 := d.Info()
60        if err1 != nil {
61            if err == nil {
62                err = err1
63            }
64            continue
65        }
66        infos = append(infosinfo)
67    }
68    return infoserr
69}
70
71func (f *fsysToFileSystemString() string { return "io/fs" }
72
73type noSeekFile struct {
74    path string
75    fs.File
76}
77
78func (f *noSeekFileSeek(offset int64whence int) (int64error) {
79    return 0, &fs.PathError{Op"seek"Pathf.pathErrfs.ErrInvalid}
80}
81
MembersX
fsysToFileSystem.String
strings
fsysToFileSystem.Open.name
fsysToFileSystem.Lstat
noSeekFile.Seek.f
fsysToFileSystem.Open.file
fsysToFileSystem.ReadDir
fsysToFileSystem.String.f
FromFS
fsysToFileSystem.Stat.name
fsysToFileSystem.Stat
fsysToFileSystem.ReadDir.name
fsysToFileSystem.ReadDir.RangeStmt_1296.BlockStmt.info
fsysToFileSystem.ReadDir.RangeStmt_1296.BlockStmt.err1
noSeekFile
FromFS.fsys
fsysToFileSystem
fsysToFileSystem.Lstat.name
noSeekFile.Seek.offset
fsysToFileSystem.RootType
fsysToFileSystem.RootType.name
fsysToFileSystem.ReadDir.RangeStmt_1296.d
noSeekFile.Seek.whence
fsysToFileSystem.fsys
fsysToFileSystem.fsPath.name
fsysToFileSystem.Open
noSeekFile.Seek
path
fsysToFileSystem.Open.err
fsysToFileSystem.ReadDir.f
fsysToFileSystem.Stat.f
fsysToFileSystem.ReadDir.dirs
fsysToFileSystem.fsPath.f
fsysToFileSystem.fsPath
fsysToFileSystem.Lstat.f
fsysToFileSystem.ReadDir.err
fsysToFileSystem.ReadDir.infos
noSeekFile.path
fs
fsysToFileSystem.Open.f
fsysToFileSystem.RootType.f
Members
X