Skip to content

Commit 475064d

Browse files
committed
Baseline signature compute
1 parent 9e4d633 commit 475064d

17 files changed

+160
-12
lines changed

internal/execute/testsys_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ func (s *testSys) baselineProgram(baseline *strings.Builder, program *incrementa
175175
}
176176

177177
baseline.WriteString("\nSemanticDiagnostics::\n")
178-
semanticDiagnostics, diagnosticsFromOldProgram := program.GetTestingData(program.GetProgram())
178+
semanticDiagnostics, diagnosticsFromOldProgram, updatedSignatureKinds := program.GetTestingData(program.GetProgram())
179179
for _, file := range program.GetProgram().GetSourceFiles() {
180180
if diagnostics, ok := semanticDiagnostics[file.Path()]; ok {
181181
if oldDiagnostics, ok := diagnosticsFromOldProgram[file.Path()]; !ok || oldDiagnostics != diagnostics {
@@ -187,6 +187,19 @@ func (s *testSys) baselineProgram(baseline *strings.Builder, program *incrementa
187187
}
188188

189189
// Write signature updates
190+
baseline.WriteString("\nSignatures::\n")
191+
for _, file := range program.GetProgram().GetSourceFiles() {
192+
if kind, loaded := updatedSignatureKinds.Load(file.Path()); loaded {
193+
switch kind {
194+
case incremental.SignatureUpdateKindComputedDts:
195+
baseline.WriteString("(computed .d.ts) " + file.FileName() + "\n")
196+
case incremental.SignatureUpdateKindStoredAtEmit:
197+
baseline.WriteString("(stored at emit) " + file.FileName() + "\n")
198+
case incremental.SignatureUpdateKindUsedVersion:
199+
baseline.WriteString("(used version) " + file.FileName() + "\n")
200+
}
201+
}
202+
}
190203
}
191204

192205
func (s *testSys) serializeState(baseline *strings.Builder) {

internal/incremental/affectedfileshandler.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"crypto/sha256"
66
"fmt"
77
"maps"
8-
"os"
98
"slices"
109
"strings"
1110
"sync"
@@ -30,6 +29,7 @@ type affectedFilesHandler struct {
3029
program *Program
3130
hasAllFilesExcludingDefaultLibraryFile atomic.Bool
3231
updatedSignatures collections.SyncMap[tspath.Path, string]
32+
updatedSignatureKinds *collections.SyncMap[tspath.Path, SignatureUpdateKind]
3333
dtsMayChange []dtsMayChange
3434
filesToRemoveDiagnostics collections.SyncSet[tspath.Path]
3535
cleanedDiagnosticsOfLibFiles sync.Once
@@ -87,14 +87,19 @@ func (h *affectedFilesHandler) updateShapeSignature(file *ast.SourceFile, useFil
8787
info := h.program.snapshot.fileInfos[file.Path()]
8888
prevSignature := info.signature
8989
var latestSignature string
90+
var updateKind SignatureUpdateKind
9091
if !file.IsDeclarationFile && !useFileVersionAsSignature {
9192
latestSignature = h.computeDtsSignature(file)
9293
}
9394
// Default is to use file version as signature
9495
if latestSignature == "" {
9596
latestSignature = info.version
97+
updateKind = SignatureUpdateKindUsedVersion
9698
}
9799
h.updatedSignatures.Store(file.Path(), latestSignature)
100+
if h.updatedSignatureKinds != nil {
101+
h.updatedSignatureKinds.Store(file.Path(), updateKind)
102+
}
98103
return latestSignature != prevSignature
99104
}
100105

@@ -328,12 +333,16 @@ func (h *affectedFilesHandler) updateSnapshot() {
328333
if h.ctx.Err() != nil {
329334
return
330335
}
331-
h.program.program.Host().Trace(fmt.Sprintf("testMode : %v\n", isTestMode()))
332-
333336
h.updatedSignatures.Range(func(filePath tspath.Path, signature string) bool {
334337
h.program.snapshot.fileInfos[filePath].signature = signature
335338
return true
336339
})
340+
if h.updatedSignatureKinds != nil {
341+
h.updatedSignatureKinds.Range(func(filePath tspath.Path, kind SignatureUpdateKind) bool {
342+
h.program.updatedSignatureKinds.Store(filePath, kind)
343+
return true
344+
})
345+
}
337346
h.filesToRemoveDiagnostics.Range(func(file tspath.Path) bool {
338347
delete(h.program.snapshot.semanticDiagnosticsPerFile, file)
339348
return true
@@ -347,16 +356,12 @@ func (h *affectedFilesHandler) updateSnapshot() {
347356
h.program.snapshot.buildInfoEmitPending = true
348357
}
349358

350-
func isTestMode() bool {
351-
return os.Getenv("APP_ENV") == "test"
352-
}
353-
354359
func collectAllAffectedFiles(ctx context.Context, program *Program) {
355360
if program.snapshot.changedFilesSet.Len() == 0 {
356361
return
357362
}
358363

359-
handler := affectedFilesHandler{ctx: ctx, program: program}
364+
handler := affectedFilesHandler{ctx: ctx, program: program, updatedSignatureKinds: core.IfElse(program.updatedSignatureKinds == nil, nil, &collections.SyncMap[tspath.Path, SignatureUpdateKind]{})}
360365
wg := core.NewWorkGroup(handler.program.program.SingleThreaded())
361366
var result collections.SyncSet[*ast.SourceFile]
362367
for file := range program.snapshot.changedFilesSet.Keys() {

internal/incremental/emitfileshandler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ func (h *emitFilesHandler) updateSnapshot() []*compiler.EmitResult {
217217
h.signatures.Range(func(file tspath.Path, signature string) bool {
218218
info := h.program.snapshot.fileInfos[file]
219219
info.signature = signature
220+
if h.program.updatedSignatureKinds != nil {
221+
h.program.updatedSignatureKinds.Store(file, SignatureUpdateKindStoredAtEmit)
222+
}
220223
h.program.snapshot.buildInfoEmitPending = true
221224
return true
222225
})

internal/incremental/program.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,27 @@ import (
88
"slices"
99

1010
"github.com/microsoft/typescript-go/internal/ast"
11+
"github.com/microsoft/typescript-go/internal/collections"
1112
"github.com/microsoft/typescript-go/internal/compiler"
1213
"github.com/microsoft/typescript-go/internal/core"
1314
"github.com/microsoft/typescript-go/internal/diagnostics"
1415
"github.com/microsoft/typescript-go/internal/outputpaths"
1516
"github.com/microsoft/typescript-go/internal/tspath"
1617
)
1718

19+
type SignatureUpdateKind byte
20+
21+
const (
22+
SignatureUpdateKindComputedDts SignatureUpdateKind = iota
23+
SignatureUpdateKindStoredAtEmit
24+
SignatureUpdateKindUsedVersion
25+
)
26+
1827
type Program struct {
1928
snapshot *snapshot
2029
program *compiler.Program
2130
semanticDiagnosticsPerFile map[tspath.Path]*diagnosticsOrBuildInfoDiagnosticsWithFileName
31+
updatedSignatureKinds *collections.SyncMap[tspath.Path, SignatureUpdateKind]
2232
}
2333

2434
var _ compiler.AnyProgram = (*Program)(nil)
@@ -31,13 +41,13 @@ func NewProgram(program *compiler.Program, oldProgram *Program, testing bool) *P
3141

3242
if testing {
3343
incrementalProgram.semanticDiagnosticsPerFile = maps.Clone(incrementalProgram.snapshot.semanticDiagnosticsPerFile)
34-
// !! signatures
44+
incrementalProgram.updatedSignatureKinds = &collections.SyncMap[tspath.Path, SignatureUpdateKind]{}
3545
}
3646
return incrementalProgram
3747
}
3848

39-
func (h *Program) GetTestingData(program *compiler.Program) (map[tspath.Path]*diagnosticsOrBuildInfoDiagnosticsWithFileName, map[tspath.Path]*diagnosticsOrBuildInfoDiagnosticsWithFileName) {
40-
return h.snapshot.semanticDiagnosticsPerFile, h.semanticDiagnosticsPerFile
49+
func (h *Program) GetTestingData(program *compiler.Program) (map[tspath.Path]*diagnosticsOrBuildInfoDiagnosticsWithFileName, map[tspath.Path]*diagnosticsOrBuildInfoDiagnosticsWithFileName, *collections.SyncMap[tspath.Path, SignatureUpdateKind]) {
50+
return h.snapshot.semanticDiagnosticsPerFile, h.semanticDiagnosticsPerFile, h.updatedSignatureKinds
4151
}
4252

4353
func (h *Program) panicIfNoProgram(method string) {

testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field-with-declaration-emit-enabled.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,7 @@ SemanticDiagnostics::
147147
*refresh* /home/src/tslibs/TS/Lib/lib.d.ts
148148
*refresh* /home/src/workspaces/project/MessageablePerson.ts
149149
*refresh* /home/src/workspaces/project/main.ts
150+
151+
Signatures::
152+
(stored at emit) /home/src/workspaces/project/MessageablePerson.ts
153+
(stored at emit) /home/src/workspaces/project/main.ts

testdata/baselines/reference/tsc/incremental/change-to-modifier-of-class-expression-field.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,5 @@ SemanticDiagnostics::
124124
*refresh* /home/src/tslibs/TS/Lib/lib.d.ts
125125
*refresh* /home/src/workspaces/project/MessageablePerson.ts
126126
*refresh* /home/src/workspaces/project/main.ts
127+
128+
Signatures::

testdata/baselines/reference/tsc/incremental/serializing-composite-project.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,7 @@ SemanticDiagnostics::
114114
*refresh* /home/src/tslibs/TS/Lib/lib.d.ts
115115
*refresh* /home/src/workspaces/project/index.tsx
116116
*refresh* /home/src/workspaces/project/other.ts
117+
118+
Signatures::
119+
(stored at emit) /home/src/workspaces/project/index.tsx
120+
(stored at emit) /home/src/workspaces/project/other.ts

testdata/baselines/reference/tsc/incremental/serializing-error-chain.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,5 @@ declare const console: { log(msg: any): void; };
179179
SemanticDiagnostics::
180180
*refresh* /home/src/tslibs/TS/Lib/lib.d.ts
181181
*refresh* /home/src/workspaces/project/index.tsx
182+
183+
Signatures::

testdata/baselines/reference/tsc/noEmit/when-project-has-strict-true.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,5 @@ declare const console: { log(msg: any): void; };
8787
SemanticDiagnostics::
8888
*refresh* /home/src/tslibs/TS/Lib/lib.d.ts
8989
*refresh* /home/src/workspaces/project/class1.ts
90+
91+
Signatures::

testdata/baselines/reference/tsc/projectReferences/rewriteRelativeImportExtensionsProjectReferences2.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,6 @@ SemanticDiagnostics::
137137
*refresh* /home/src/tslibs/TS/Lib/lib.esnext.full.d.ts
138138
*refresh* /home/src/workspaces/solution/dist/compiler/parser.d.ts
139139
*refresh* /home/src/workspaces/solution/src/services/services.ts
140+
141+
Signatures::
142+
(stored at emit) /home/src/workspaces/solution/src/services/services.ts

0 commit comments

Comments
 (0)