tsserver - examples_test.go
1 package tsserver_test
2
3 import (
4 "fmt"
5 "io"
6 "io/fs"
7 "os"
8 "strings"
9 "time"
10
11 "vimagination.zapto.org/tsserver"
12 )
13
14 type memFS map[string]string
15
16 func (m memFS) Open(path string) (fs.File, error) {
17 if str, ok := m[path]; ok {
18 return &memFile{
19 name: path,
20 Reader: strings.NewReader(str),
21 size: len(str),
22 }, nil
23 }
24
25 return nil, fs.ErrNotExist
26 }
27
28 type memFile struct {
29 name string
30 *strings.Reader
31 size int
32 }
33
34 func (m *memFile) Stat() (fs.FileInfo, error) { return m, nil }
35 func (m *memFile) Close() error { return nil }
36 func (m *memFile) Name() string { return m.name }
37 func (m *memFile) Size() int64 { return int64(m.size) }
38 func (m *memFile) Mode() fs.FileMode { return fs.ModePerm }
39 func (m *memFile) ModTime() time.Time { return time.Now() }
40 func (m *memFile) IsDir() bool { return false }
41 func (m *memFile) Sys() any { return m }
42
43 func Example() {
44 files := tsserver.WrapFS(memFS{
45 "main.ts": "function hello(name: string) {console.log('Hello ' + name);}\n\nhello('Bob');",
46 })
47
48 file, err := files.Open("main.js")
49 if err != nil {
50 fmt.Println(err)
51
52 return
53 }
54 defer file.Close()
55
56 io.Copy(os.Stdout, file)
57
58 // Output:
59 // function hello(name) {
60 // console.log('Hello ' + name);
61 // }
62 //
63 // hello('Bob');
64 }
65