Skip to content

Commit 84d07c8

Browse files
committed
More changes
1 parent ea85af3 commit 84d07c8

File tree

5 files changed

+239
-139
lines changed

5 files changed

+239
-139
lines changed

internal/incremental/buildInfo.go

Lines changed: 75 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/microsoft/typescript-go/internal/collections"
88
"github.com/microsoft/typescript-go/internal/core"
99
"github.com/microsoft/typescript-go/internal/diagnostics"
10+
"github.com/microsoft/typescript-go/internal/tsoptions"
1011
"github.com/microsoft/typescript-go/internal/tspath"
1112
)
1213

@@ -23,35 +24,35 @@ type (
2324
// * for non incremental program buildinfo
2425
// * - string that is the root file name
2526
// */
26-
// type buildInfoRoot struct {
27-
// incrementalStartEnd *[2]incrementalBuildInfoFileId
28-
// incrementalSingle incrementalBuildInfoFileId
27+
// type BuildInfoRoot struct {
28+
// StartEnd *[2]BuildInfoFileId
29+
// Single BuildInfoFileId
2930
// nonIncremental string
3031
// }
3132

32-
// func (o buildInfoRoot) MarshalJSON() ([]byte, error) {
33-
// if o.incrementalStartEnd != nil {
34-
// return json.Marshal(o.incrementalStartEnd)
33+
// func (o BuildInfoRoot) MarshalJSON() ([]byte, error) {
34+
// if o.StartEnd != nil {
35+
// return json.Marshal(o.StartEnd)
3536
// }
36-
// if o.incrementalSingle != 0 {
37-
// return json.Marshal(o.incrementalSingle)
37+
// if o.Single != 0 {
38+
// return json.Marshal(o.Single)
3839
// }
3940
// if o.nonIncremental != "" {
4041
// return json.Marshal(o.nonIncremental)
4142
// }
4243
// panic("unknown BuildInfoRoot type")
4344
// }
4445

45-
// func (o *buildInfoRoot) UnmarshalJSON(data []byte) error {
46-
// *o = buildInfoRoot{}
47-
// var vIncrementalStartEnd [2]incrementalBuildInfoFileId
48-
// if err := json.Unmarshal(data, &vIncrementalStartEnd); err == nil {
49-
// o.incrementalStartEnd = &vIncrementalStartEnd
46+
// func (o *BuildInfoRoot) UnmarshalJSON(data []byte) error {
47+
// *o = BuildInfoRoot{}
48+
// var vStartEnd [2]BuildInfoFileId
49+
// if err := json.Unmarshal(data, &vStartEnd); err == nil {
50+
// o.StartEnd = &vStartEnd
5051
// return nil
5152
// }
52-
// var vIncrementalSingle incrementalBuildInfoFileId
53-
// if err := json.Unmarshal(data, &vIncrementalSingle); err == nil {
54-
// o.incrementalSingle = vIncrementalSingle
53+
// var vSingle BuildInfoFileId
54+
// if err := json.Unmarshal(data, &vSingle); err == nil {
55+
// o.Single = vSingle
5556
// return nil
5657
// }
5758
// var vNonIncremental string
@@ -158,7 +159,7 @@ func (b *BuildInfoFileInfo) UnmarshalJSON(data []byte) error {
158159
}
159160
var fileInfo buildInfoFileInfoWithSignature
160161
if err := json.Unmarshal(data, &fileInfo); err != nil {
161-
return fmt.Errorf("invalid incrementalBuildInfoFileInfo: %s", data)
162+
return fmt.Errorf("invalid BuildInfoFileInfo: %s", data)
162163
}
163164
*b = BuildInfoFileInfo{fileInfo: &fileInfo}
164165
return nil
@@ -186,7 +187,7 @@ func (b *BuildInfoReferenceMapEntry) UnmarshalJSON(data []byte) error {
186187
}
187188

188189
type BuildInfoDiagnostic struct {
189-
// incrementalBuildInfoFileId if it is for a File thats other than its stored for
190+
// BuildInfoFileId if it is for a File thats other than its stored for
190191
File BuildInfoFileId `json:"file,omitzero"`
191192
NoFile bool `json:"noFile,omitzero"`
192193
Pos int `json:"pos,omitzero"`
@@ -273,77 +274,76 @@ func (b *BuildInfoSemanticDiagnostic) UnmarshalJSON(data []byte) error {
273274
* [fileId, emitKind] if any other type emit is pending
274275
*/
275276
type BuildInfoFilePendingEmit struct {
276-
fileId BuildInfoFileId
277-
emitKind fileEmitKind
277+
FileId BuildInfoFileId
278+
EmitKind FileEmitKind
278279
}
279280

280281
func (b *BuildInfoFilePendingEmit) MarshalJSON() ([]byte, error) {
281-
if b.emitKind == 0 {
282-
return json.Marshal(b.fileId)
282+
if b.EmitKind == 0 {
283+
return json.Marshal(b.FileId)
283284
}
284-
if b.emitKind == fileEmitKindDts {
285-
fileListIds := []BuildInfoFileId{b.fileId}
285+
if b.EmitKind == fileEmitKindDts {
286+
fileListIds := []BuildInfoFileId{b.FileId}
286287
return json.Marshal(fileListIds)
287288
}
288-
fileAndEmitKind := []int{int(b.fileId), int(b.emitKind)}
289+
fileAndEmitKind := []int{int(b.FileId), int(b.EmitKind)}
289290
return json.Marshal(fileAndEmitKind)
290291
}
291292

292293
func (b *BuildInfoFilePendingEmit) UnmarshalJSON(data []byte) error {
293294
var fileId BuildInfoFileId
294295
if err := json.Unmarshal(data, &fileId); err == nil {
295296
*b = BuildInfoFilePendingEmit{
296-
fileId: fileId,
297+
FileId: fileId,
297298
}
298299
return nil
299300
}
300301
var intTuple []int
301302
if err := json.Unmarshal(data, &intTuple); err == nil {
302303
if len(intTuple) == 1 {
303304
*b = BuildInfoFilePendingEmit{
304-
fileId: BuildInfoFileId(intTuple[0]),
305-
emitKind: fileEmitKindDts,
305+
FileId: BuildInfoFileId(intTuple[0]),
306+
EmitKind: fileEmitKindDts,
306307
}
307308
return nil
308309
} else if len(intTuple) == 2 {
309310
*b = BuildInfoFilePendingEmit{
310-
fileId: BuildInfoFileId(intTuple[0]),
311-
emitKind: fileEmitKind(intTuple[1]),
311+
FileId: BuildInfoFileId(intTuple[0]),
312+
EmitKind: FileEmitKind(intTuple[1]),
312313
}
313314
return nil
314315
}
315-
return fmt.Errorf("invalid incrementalBuildInfoFilePendingEmit: expected 1 or 2 integers, got %d", len(intTuple))
316+
return fmt.Errorf("invalid BuildInfoFilePendingEmit: expected 1 or 2 integers, got %d", len(intTuple))
316317
}
317-
return fmt.Errorf("invalid IncrementalBuildInfoDiagnostic: %s", data)
318+
return fmt.Errorf("invalid BuildInfoFilePendingEmit: %s", data)
318319
}
319320

320321
/**
321322
* [fileId, signature] if different from file's signature
322323
* fileId if file wasnt emitted
323324
*/
324325
type BuildInfoEmitSignature struct {
325-
fileId BuildInfoFileId
326-
// Signature if it is different from file's signature
327-
signature string
328-
differsOnlyInDtsMap bool // true if signature is different only in dtsMap value
329-
differsInOptions bool // true if signature is different in options used to emit file
326+
FileId BuildInfoFileId
327+
Signature string // Signature if it is different from file's Signature
328+
DiffersOnlyInDtsMap bool // true if signature is different only in dtsMap value
329+
DiffersInOptions bool // true if signature is different in options used to emit file
330330
}
331331

332332
func (b *BuildInfoEmitSignature) noEmitSignature() bool {
333-
return b.signature == "" && !b.differsOnlyInDtsMap && !b.differsInOptions
333+
return b.Signature == "" && !b.DiffersOnlyInDtsMap && !b.DiffersInOptions
334334
}
335335

336336
func (b *BuildInfoEmitSignature) toEmitSignature(path tspath.Path, emitSignatures map[tspath.Path]*emitSignature) *emitSignature {
337337
var signature string
338338
var signatureWithDifferentOptions []string
339-
if b.differsOnlyInDtsMap {
339+
if b.DiffersOnlyInDtsMap {
340340
signatureWithDifferentOptions = make([]string, 0, 1)
341341
signatureWithDifferentOptions = append(signatureWithDifferentOptions, emitSignatures[path].signature)
342-
} else if b.differsInOptions {
342+
} else if b.DiffersInOptions {
343343
signatureWithDifferentOptions = make([]string, 0, 1)
344-
signatureWithDifferentOptions = append(signatureWithDifferentOptions, b.signature)
344+
signatureWithDifferentOptions = append(signatureWithDifferentOptions, b.Signature)
345345
} else {
346-
signature = b.signature
346+
signature = b.Signature
347347
}
348348
return &emitSignature{
349349
signature: signature,
@@ -353,17 +353,17 @@ func (b *BuildInfoEmitSignature) toEmitSignature(path tspath.Path, emitSignature
353353

354354
func (b *BuildInfoEmitSignature) MarshalJSON() ([]byte, error) {
355355
if b.noEmitSignature() {
356-
return json.Marshal(b.fileId)
356+
return json.Marshal(b.FileId)
357357
}
358358
fileIdAndSignature := make([]any, 2)
359-
fileIdAndSignature[0] = b.fileId
359+
fileIdAndSignature[0] = b.FileId
360360
var signature any
361-
if b.differsOnlyInDtsMap {
361+
if b.DiffersOnlyInDtsMap {
362362
signature = []string{}
363-
} else if b.differsInOptions {
364-
signature = []string{b.signature}
363+
} else if b.DiffersInOptions {
364+
signature = []string{b.Signature}
365365
} else {
366-
signature = b.signature
366+
signature = b.Signature
367367
}
368368
fileIdAndSignature[1] = signature
369369
return json.Marshal(fileIdAndSignature)
@@ -373,7 +373,7 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
373373
var fileId BuildInfoFileId
374374
if err := json.Unmarshal(data, &fileId); err == nil {
375375
*b = BuildInfoEmitSignature{
376-
fileId: fileId,
376+
FileId: fileId,
377377
}
378378
return nil
379379
}
@@ -384,7 +384,7 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
384384
if id, ok := fileIdAndSignature[0].(float64); ok {
385385
fileId = BuildInfoFileId(id)
386386
} else {
387-
return fmt.Errorf("invalid fileId in incrementalBuildInfoEmitSignature: expected float64, got %T", fileIdAndSignature[0])
387+
return fmt.Errorf("invalid fileId in BuildInfoEmitSignature: expected float64, got %T", fileIdAndSignature[0])
388388
}
389389
var signature string
390390
var differsOnlyInDtsMap, differsInOptions bool
@@ -396,25 +396,25 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
396396
signature = signatureList[0]
397397
differsInOptions = true
398398
} else {
399-
return fmt.Errorf("invalid signature in incrementalBuildInfoEmitSignature: expected string or []string with 0 or 1 element, got %d elements", len(signatureList))
399+
return fmt.Errorf("invalid signature in BuildInfoEmitSignature: expected string or []string with 0 or 1 element, got %d elements", len(signatureList))
400400
}
401401
} else {
402-
return fmt.Errorf("invalid signature in incrementalBuildInfoEmitSignature: expected string or []string, got %T", fileIdAndSignature[1])
402+
return fmt.Errorf("invalid signature in BuildInfoEmitSignature: expected string or []string, got %T", fileIdAndSignature[1])
403403
}
404404
} else {
405405
signature = signatureV
406406
}
407407
*b = BuildInfoEmitSignature{
408-
fileId: fileId,
409-
signature: signature,
410-
differsOnlyInDtsMap: differsOnlyInDtsMap,
411-
differsInOptions: differsInOptions,
408+
FileId: fileId,
409+
Signature: signature,
410+
DiffersOnlyInDtsMap: differsOnlyInDtsMap,
411+
DiffersInOptions: differsInOptions,
412412
}
413413
return nil
414414
}
415-
return fmt.Errorf("invalid incrementalBuildInfoEmitSignature: expected 2 elements, got %d", len(fileIdAndSignature))
415+
return fmt.Errorf("invalid BuildInfoEmitSignature: expected 2 elements, got %d", len(fileIdAndSignature))
416416
}
417-
return fmt.Errorf("invalid IncrementalBuildInfoDiagnostic: %s", data)
417+
return fmt.Errorf("invalid BuildInfoEmitSignature: %s", data)
418418
}
419419

420420
type BuildInfo struct {
@@ -437,7 +437,7 @@ type BuildInfo struct {
437437
AffectedFilesPendingEmit []*BuildInfoFilePendingEmit `json:"affectedFilesPendingEmit,omitzero"`
438438
LatestChangedDtsFile string `json:"latestChangedDtsFile,omitzero"` // Because this is only output file in the program, we dont need fileId to deduplicate name
439439
EmitSignatures []*BuildInfoEmitSignature `json:"emitSignatures,omitzero"`
440-
// resolvedRoot: readonly IncrementalBuildInfoResolvedRoot[] | undefined;
440+
// resolvedRoot: readonly BuildInfoResolvedRoot[] | undefined;
441441
}
442442

443443
func (b *BuildInfo) IsValidVersion() bool {
@@ -447,3 +447,19 @@ func (b *BuildInfo) IsValidVersion() bool {
447447
func (b *BuildInfo) IsIncremental() bool {
448448
return b != nil && len(b.FileNames) != 0
449449
}
450+
451+
func (b *BuildInfo) GetCompilerOptions(buildInfoDirectory string) *core.CompilerOptions {
452+
options := &core.CompilerOptions{}
453+
for option, value := range b.Options.Entries() {
454+
if buildInfoDirectory != "" {
455+
result, ok := tsoptions.ConvertOptionToAbsolutePath(option, value, tsoptions.CommandLineCompilerOptionsMap, buildInfoDirectory)
456+
if ok {
457+
tsoptions.ParseCompilerOptions(option, result, options)
458+
continue
459+
}
460+
}
461+
tsoptions.ParseCompilerOptions(option, value, options)
462+
463+
}
464+
return options
465+
}

0 commit comments

Comments
 (0)