vendor tsgo
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package autoimport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/microsoft/typescript-go/internal/ast"
|
||||
"github.com/microsoft/typescript-go/internal/binder"
|
||||
"github.com/microsoft/typescript-go/internal/checker"
|
||||
"github.com/microsoft/typescript-go/internal/compiler"
|
||||
"github.com/microsoft/typescript-go/internal/core"
|
||||
"github.com/microsoft/typescript-go/internal/module"
|
||||
"github.com/microsoft/typescript-go/internal/packagejson"
|
||||
"github.com/microsoft/typescript-go/internal/parser"
|
||||
"github.com/microsoft/typescript-go/internal/tspath"
|
||||
"github.com/microsoft/typescript-go/internal/vfs"
|
||||
"github.com/microsoft/typescript-go/internal/vfs/vfstest"
|
||||
)
|
||||
|
||||
type fakeCloneHost struct {
|
||||
fs vfs.FS
|
||||
}
|
||||
|
||||
func (h *fakeCloneHost) FS() vfs.FS { return h.fs }
|
||||
func (h *fakeCloneHost) GetCurrentDirectory() string { return "/" }
|
||||
func (h *fakeCloneHost) GetDefaultProject(path tspath.Path) (tspath.Path, *compiler.Program) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (h *fakeCloneHost) GetProgramForProject(projectPath tspath.Path) *compiler.Program { return nil }
|
||||
|
||||
func (h *fakeCloneHost) GetPackageJson(fileName string) *packagejson.InfoCacheEntry { return nil }
|
||||
|
||||
func (h *fakeCloneHost) GetSourceFile(fileName string, path tspath.Path) *ast.SourceFile { return nil }
|
||||
func (h *fakeCloneHost) Dispose() {}
|
||||
|
||||
var _ RegistryCloneHost = (*fakeCloneHost)(nil)
|
||||
|
||||
// Regression test for microsoft/typescript-go#4322.
|
||||
//
|
||||
// During auto-import export extraction, the checker is built on top of an
|
||||
// aliasResolver standing in for a real program. This file has a type error, and
|
||||
// extracting exports should still complete without crashing.
|
||||
func TestAliasResolverGetDiagnosticsDoesNotPanic(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
const fileName = "/pkg/index.ts"
|
||||
text := "declare function f(arg: { a: string }): () => void;\nexport const x = f({ a: 1 });\n"
|
||||
|
||||
fs := vfstest.FromMap(map[string]string{fileName: text}, true /*useCaseSensitiveFileNames*/)
|
||||
host := &fakeCloneHost{fs: fs}
|
||||
|
||||
sourceFile := parser.ParseSourceFile(ast.SourceFileParseOptions{
|
||||
FileName: fileName,
|
||||
Path: tspath.Path(fileName),
|
||||
}, text, core.ScriptKindTS)
|
||||
binder.BindSourceFile(sourceFile)
|
||||
|
||||
resolver := module.NewResolver(host, core.EmptyCompilerOptions, "", "")
|
||||
r := newAliasResolver(
|
||||
[]*ast.SourceFile{sourceFile},
|
||||
nil,
|
||||
host,
|
||||
resolver,
|
||||
func(f string) tspath.Path { return tspath.Path(f) },
|
||||
func(ast.HasFileName, string) {},
|
||||
)
|
||||
|
||||
ch, _ := checker.NewChecker(r, nil)
|
||||
|
||||
// Type-checking this file's diagnostics must not panic.
|
||||
ch.GetDiagnostics(context.Background(), sourceFile)
|
||||
}
|
||||
Reference in New Issue
Block a user