Skip to content

Commit 6db61a3

Browse files
authored
Enable the noCheck emit consistency test (microsoft#1297)
1 parent 6cac4ab commit 6db61a3

File tree

10 files changed

+51
-61
lines changed

10 files changed

+51
-61
lines changed

internal/checker/checker.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30565,18 +30565,11 @@ func (c *Checker) GetTypeAtLocation(node *ast.Node) *Type {
3056530565
return c.getTypeOfNode(node)
3056630566
}
3056730567

30568-
func (c *Checker) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) *emitResolver {
30568+
func (c *Checker) GetEmitResolver(file *ast.SourceFile) *emitResolver {
3056930569
c.emitResolverOnce.Do(func() {
3057030570
c.emitResolver = &emitResolver{checker: c}
3057130571
})
3057230572

30573-
if !skipDiagnostics {
30574-
// Ensure we have all the type information in place for this file so that all the
30575-
// emitter questions of this resolver will return the right information.
30576-
c.emitResolver.checkerMu.Lock()
30577-
defer c.emitResolver.checkerMu.Unlock()
30578-
c.checkSourceFile(context.Background(), file)
30579-
}
3058030573
return c.emitResolver
3058130574
}
3058230575

internal/checker/nodebuilderimpl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,7 +1450,7 @@ func (b *nodeBuilderImpl) symbolToParameterDeclaration(parameterSymbol *ast.Symb
14501450
}
14511451
name := b.parameterToParameterDeclarationName(parameterSymbol, parameterDeclaration)
14521452
// TODO: isOptionalParameter on emit resolver here is silly - hoist to checker and reexpose on emit resolver?
1453-
isOptional := parameterDeclaration != nil && b.ch.GetEmitResolver(nil, true).isOptionalParameter(parameterDeclaration) || parameterSymbol.CheckFlags&ast.CheckFlagsOptionalParameter != 0
1453+
isOptional := parameterDeclaration != nil && b.ch.GetEmitResolver(nil).isOptionalParameter(parameterDeclaration) || parameterSymbol.CheckFlags&ast.CheckFlagsOptionalParameter != 0
14541454
var questionToken *ast.Node
14551455
if isOptional {
14561456
questionToken = b.f.NewToken(ast.KindQuestionToken)
@@ -1887,7 +1887,7 @@ func (b *nodeBuilderImpl) serializeTypeForDeclaration(declaration *ast.Declarati
18871887
}
18881888
}
18891889
// !!! TODO: JSDoc, getEmitResolver call is unfortunate layering for the helper - hoist it into checker
1890-
addUndefinedForParameter := declaration != nil && (ast.IsParameter(declaration) /*|| ast.IsJSDocParameterTag(declaration)*/) && b.ch.GetEmitResolver(nil, true).requiresAddingImplicitUndefined(declaration, symbol, b.ctx.enclosingDeclaration)
1890+
addUndefinedForParameter := declaration != nil && (ast.IsParameter(declaration) /*|| ast.IsJSDocParameterTag(declaration)*/) && b.ch.GetEmitResolver(nil).requiresAddingImplicitUndefined(declaration, symbol, b.ctx.enclosingDeclaration)
18911891
if addUndefinedForParameter {
18921892
t = b.ch.getOptionalType(t, false)
18931893
}

internal/checker/symbolaccessibility.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (ch *Checker) IsAnySymbolAccessible(symbols []*ast.Symbol, enclosingDeclara
3838
if len(accessibleSymbolChain) > 0 {
3939
hadAccessibleChain = symbol
4040
// TODO: going through emit resolver here is weird. Relayer these APIs.
41-
hasAccessibleDeclarations := ch.GetEmitResolver(nil, true).hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible)
41+
hasAccessibleDeclarations := ch.GetEmitResolver(nil).hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible)
4242
if hasAccessibleDeclarations != nil {
4343
return hasAccessibleDeclarations
4444
}

internal/compiler/emitHost.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type EmitHost interface {
3232
GetCurrentDirectory() string
3333
CommonSourceDirectory() string
3434
IsEmitBlocked(file string) bool
35-
GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver
35+
GetEmitResolver(file *ast.SourceFile) printer.EmitResolver
3636
}
3737

3838
var _ EmitHost = (*emitHost)(nil)
@@ -83,7 +83,7 @@ func (host *emitHost) GetRedirectTargets(path tspath.Path) []string {
8383
}
8484

8585
func (host *emitHost) GetEffectiveDeclarationFlags(node *ast.Node, flags ast.ModifierFlags) ast.ModifierFlags {
86-
return host.GetEmitResolver(ast.GetSourceFileOfNode(node), true).GetEffectiveDeclarationFlags(node, flags)
86+
return host.GetEmitResolver(ast.GetSourceFileOfNode(node)).GetEffectiveDeclarationFlags(node, flags)
8787
}
8888

8989
func (host *emitHost) GetOutputPathsFor(file *ast.SourceFile, forceDtsPaths bool) declarations.OutputPaths {
@@ -92,7 +92,7 @@ func (host *emitHost) GetOutputPathsFor(file *ast.SourceFile, forceDtsPaths bool
9292
}
9393

9494
func (host *emitHost) GetResolutionModeOverride(node *ast.Node) core.ResolutionMode {
95-
return host.GetEmitResolver(ast.GetSourceFileOfNode(node), true).GetResolutionModeOverride(node)
95+
return host.GetEmitResolver(ast.GetSourceFileOfNode(node)).GetResolutionModeOverride(node)
9696
}
9797

9898
func (host *emitHost) GetSourceFileFromReference(origin *ast.SourceFile, ref *ast.FileReference) *ast.SourceFile {
@@ -116,13 +116,13 @@ func (host *emitHost) WriteFile(fileName string, text string, writeByteOrderMark
116116
return host.program.Host().FS().WriteFile(fileName, text, writeByteOrderMark)
117117
}
118118

119-
func (host *emitHost) GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) printer.EmitResolver {
119+
func (host *emitHost) GetEmitResolver(file *ast.SourceFile) printer.EmitResolver {
120120
// The context and done function don't matter in tsc, currently the only caller of this function.
121121
// But if this ever gets used by LSP code, we'll need to thread the context properly and pass the
122122
// done function to the caller to ensure resources are cleaned up at the end of the request.
123123
checker, done := host.program.GetTypeCheckerForFile(context.TODO(), file)
124124
defer done()
125-
return checker.GetEmitResolver(file, skipDiagnostics)
125+
return checker.GetEmitResolver(file)
126126
}
127127

128128
func (host *emitHost) IsSourceFileFromExternalLibrary(file *ast.SourceFile) bool {

internal/compiler/emitter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (e *emitter) emit() {
5050
}
5151

5252
func (e *emitter) getDeclarationTransformers(emitContext *printer.EmitContext, sourceFile *ast.SourceFile, declarationFilePath string, declarationMapPath string) []*declarations.DeclarationTransformer {
53-
emitResolver := e.host.GetEmitResolver(sourceFile, false /*skipDiagnostics*/) // !!! conditionally skip diagnostics
53+
emitResolver := e.host.GetEmitResolver(sourceFile)
5454
transform := declarations.NewDeclarationTransformer(e.host, emitResolver, emitContext, e.host.Options(), declarationFilePath, declarationMapPath)
5555
return []*declarations.DeclarationTransformer{transform}
5656
}
@@ -86,7 +86,7 @@ func getScriptTransformers(emitContext *printer.EmitContext, host printer.EmitHo
8686
var emitResolver printer.EmitResolver
8787
var referenceResolver binder.ReferenceResolver
8888
if importElisionEnabled || options.GetJSXTransformEnabled() {
89-
emitResolver = host.GetEmitResolver(sourceFile, false /*skipDiagnostics*/) // !!! conditionally skip diagnostics
89+
emitResolver = host.GetEmitResolver(sourceFile)
9090
emitResolver.MarkLinkedReferencesRecursively(sourceFile)
9191
referenceResolver = emitResolver
9292
} else {

internal/compiler/program.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ func (p *Program) getDeclarationDiagnosticsForFile(_ctx context.Context, sourceF
459459
}
460460

461461
host := &emitHost{program: p}
462-
diagnostics := getDeclarationDiagnostics(host, host.GetEmitResolver(sourceFile, true), sourceFile)
462+
diagnostics := getDeclarationDiagnostics(host, host.GetEmitResolver(sourceFile), sourceFile)
463463
diagnostics, _ = p.declarationDiagnosticCache.LoadOrStore(sourceFile, diagnostics)
464464
return diagnostics
465465
}

internal/printer/emithost.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type EmitHost interface {
2525
IsEmitBlocked(file string) bool
2626
WriteFile(fileName string, text string, writeByteOrderMark bool, relatedSourceFiles []*ast.SourceFile, data *WriteFileData) error
2727
GetEmitModuleFormatOfFile(file ast.HasFileName) core.ModuleKind
28-
GetEmitResolver(file *ast.SourceFile, skipDiagnostics bool) EmitResolver
28+
GetEmitResolver(file *ast.SourceFile) EmitResolver
2929
GetOutputAndProjectReference(path tspath.Path) *tsoptions.OutputDtsAndProjectReference
3030
IsSourceFileFromExternalLibrary(file *ast.SourceFile) bool
3131
}

internal/testutil/baseline/baseline.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func readFileOrNoContent(fileName string) string {
104104
return string(content)
105105
}
106106

107-
func diffText(oldName string, newName string, expected string, actual string) string {
107+
func DiffText(oldName string, newName string, expected string, actual string) string {
108108
lines := patience.Diff(stringutil.SplitLines(expected), stringutil.SplitLines(actual))
109109
return patience.UnifiedDiffTextWithOptions(lines, patience.UnifiedDiffOptions{
110110
Precontext: 3,
@@ -121,7 +121,7 @@ func getBaselineDiff(t *testing.T, actual string, expected string, fileName stri
121121
if actual == expected {
122122
return NoContent
123123
}
124-
s := diffText("old."+fileName, "new."+fileName, expected, actual)
124+
s := DiffText("old."+fileName, "new."+fileName, expected, actual)
125125

126126
// Remove line numbers from unified diff headers; this avoids adding/deleting
127127
// lines in our baselines from causing knock-on header changes later in the diff.

internal/testutil/tsbaseline/js_emit_baseline.go

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/microsoft/typescript-go/internal/ast"
9+
"github.com/microsoft/typescript-go/internal/collections"
910
"github.com/microsoft/typescript-go/internal/core"
1011
"github.com/microsoft/typescript-go/internal/parser"
1112
"github.com/microsoft/typescript-go/internal/testutil/baseline"
@@ -98,44 +99,40 @@ func DoJSEmitBaseline(
9899
))
99100
}
100101

101-
// !!! Enable the following once noCheck is more comprehensive
102-
////if !options.NoCheck.IsTrue() && !options.NoEmit.IsTrue() {
103-
//// testConfig := make(map[string]string)
104-
//// testConfig["noCheck"] = "true"
105-
//// withoutChecking := result.Repeat(testConfig)
106-
//// compareResultFileSets := func(a collections.OrderedMap[string, *harnessutil.TestFile], b collections.OrderedMap[string, *harnessutil.TestFile]) {
107-
//// for key, doc := range a.Entries() {
108-
//// original := b.GetOrZero(key)
109-
//// if original == nil {
110-
//// jsCode.WriteString("\r\n\r\n!!!! File ")
111-
//// jsCode.WriteString(removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/))
112-
//// jsCode.WriteString(" missing from original emit, but present in noCheck emit\r\n")
113-
//// jsCode.WriteString(fileOutput(doc, harnessSettings))
114-
//// } else if original.Content != doc.Content {
115-
//// jsCode.WriteString("\r\n\r\n!!!! File ")
116-
//// jsCode.WriteString(removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/))
117-
//// jsCode.WriteString(" differs from original emit in noCheck emit\r\n")
118-
//// var fileName string
119-
//// if harnessSettings.FullEmitPaths {
120-
//// fileName = removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/)
121-
//// } else {
122-
//// fileName = tspath.GetBaseFileName(doc.UnitName)
123-
//// }
124-
//// jsCode.WriteString("//// [")
125-
//// jsCode.WriteString(fileName)
126-
//// jsCode.WriteString("]\r\n")
127-
//// expected := original.Content
128-
//// actual := doc.Content
129-
//// err := diff.Text("Expected\tThe full check baseline", "Actual\twith noCheck set", expected, actual, &jsCode)
130-
//// if err != nil {
131-
//// t.Fatal(err)
132-
//// }
133-
//// }
134-
//// }
135-
//// }
136-
//// compareResultFileSets(withoutChecking.DTS, result.DTS)
137-
//// compareResultFileSets(withoutChecking.JS, result.JS)
138-
////}
102+
if !options.NoCheck.IsTrue() && !options.NoEmit.IsTrue() {
103+
testConfig := make(map[string]string)
104+
testConfig["noCheck"] = "true"
105+
withoutChecking := result.Repeat(testConfig)
106+
compareResultFileSets := func(a *collections.OrderedMap[string, *harnessutil.TestFile], b *collections.OrderedMap[string, *harnessutil.TestFile]) {
107+
for key, doc := range a.Entries() {
108+
original := b.GetOrZero(key)
109+
if original == nil {
110+
jsCode.WriteString("\r\n\r\n!!!! File ")
111+
jsCode.WriteString(removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/))
112+
jsCode.WriteString(" missing from original emit, but present in noCheck emit\r\n")
113+
jsCode.WriteString(fileOutput(doc, harnessSettings))
114+
} else if original.Content != doc.Content {
115+
jsCode.WriteString("\r\n\r\n!!!! File ")
116+
jsCode.WriteString(removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/))
117+
jsCode.WriteString(" differs from original emit in noCheck emit\r\n")
118+
var fileName string
119+
if harnessSettings.FullEmitPaths {
120+
fileName = removeTestPathPrefixes(doc.UnitName, false /*retainTrailingDirectorySeparator*/)
121+
} else {
122+
fileName = tspath.GetBaseFileName(doc.UnitName)
123+
}
124+
jsCode.WriteString("//// [")
125+
jsCode.WriteString(fileName)
126+
jsCode.WriteString("]\r\n")
127+
expected := original.Content
128+
actual := doc.Content
129+
jsCode.WriteString(baseline.DiffText("Expected\tThe full check baseline", "Actual\twith noCheck set", expected, actual))
130+
}
131+
}
132+
}
133+
compareResultFileSets(&withoutChecking.DTS, &result.DTS)
134+
compareResultFileSets(&withoutChecking.JS, &result.JS)
135+
}
139136

140137
if tspath.FileExtensionIsOneOf(baselinePath, []string{tspath.ExtensionTs, tspath.ExtensionTsx}) {
141138
baselinePath = tspath.ChangeExtension(baselinePath, tspath.ExtensionJs)

internal/transformers/tstransforms/importelision_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ func TestImportElision(t *testing.T) {
241241
},
242242
})
243243

244-
emitResolver := c.GetEmitResolver(file, false /*skipDiagnostics*/)
244+
emitResolver := c.GetEmitResolver(file)
245245
emitResolver.MarkLinkedReferencesRecursively(file)
246246

247247
emitContext := printer.NewEmitContext()

0 commit comments

Comments
 (0)