@@ -7,16 +7,20 @@ import (
77
88 "github.com/microsoft/typescript-go/internal/core"
99 "github.com/microsoft/typescript-go/internal/diagnostics"
10+ "github.com/microsoft/typescript-go/internal/locale"
1011)
1112
1213// Diagnostic
1314
1415type Diagnostic struct {
15- file * SourceFile
16- loc core.TextRange
17- code int32
18- category diagnostics.Category
19- message string
16+ file * SourceFile
17+ loc core.TextRange
18+ code int32
19+ category diagnostics.Category
20+ // Original message; may be nil.
21+ message * diagnostics.Message
22+ messageKey diagnostics.Key
23+ messageArgs []string
2024 messageChain []* Diagnostic
2125 relatedInformation []* Diagnostic
2226 reportsUnnecessary bool
@@ -31,7 +35,8 @@ func (d *Diagnostic) Len() int { return d.loc.Len() }
3135func (d * Diagnostic ) Loc () core.TextRange { return d .loc }
3236func (d * Diagnostic ) Code () int32 { return d .code }
3337func (d * Diagnostic ) Category () diagnostics.Category { return d .category }
34- func (d * Diagnostic ) Message () string { return d .message }
38+ func (d * Diagnostic ) MessageKey () diagnostics.Key { return d .messageKey }
39+ func (d * Diagnostic ) MessageArgs () []string { return d .messageArgs }
3540func (d * Diagnostic ) MessageChain () []* Diagnostic { return d .messageChain }
3641func (d * Diagnostic ) RelatedInformation () []* Diagnostic { return d .relatedInformation }
3742func (d * Diagnostic ) ReportsUnnecessary () bool { return d .reportsUnnecessary }
@@ -72,12 +77,22 @@ func (d *Diagnostic) Clone() *Diagnostic {
7277 return & result
7378}
7479
75- func NewDiagnosticWith (
80+ func (d * Diagnostic ) Localize (locale locale.Locale ) string {
81+ return diagnostics .Localize (locale , d .message , d .messageKey , d .messageArgs ... )
82+ }
83+
84+ // For debugging only.
85+ func (d * Diagnostic ) String () string {
86+ return diagnostics .Localize (locale .Default , d .message , d .messageKey , d .messageArgs ... )
87+ }
88+
89+ func NewDiagnosticFromSerialized (
7690 file * SourceFile ,
7791 loc core.TextRange ,
7892 code int32 ,
7993 category diagnostics.Category ,
80- message string ,
94+ messageKey diagnostics.Key ,
95+ messageArgs []string ,
8196 messageChain []* Diagnostic ,
8297 relatedInformation []* Diagnostic ,
8398 reportsUnnecessary bool ,
@@ -89,7 +104,8 @@ func NewDiagnosticWith(
89104 loc : loc ,
90105 code : code ,
91106 category : category ,
92- message : message ,
107+ messageKey : messageKey ,
108+ messageArgs : messageArgs ,
93109 messageChain : messageChain ,
94110 relatedInformation : relatedInformation ,
95111 reportsUnnecessary : reportsUnnecessary ,
@@ -104,7 +120,9 @@ func NewDiagnostic(file *SourceFile, loc core.TextRange, message *diagnostics.Me
104120 loc : loc ,
105121 code : message .Code (),
106122 category : message .Category (),
107- message : message .Format (args ... ),
123+ message : message ,
124+ messageKey : message .Key (),
125+ messageArgs : diagnostics .StringifyArgs (args ),
108126 reportsUnnecessary : message .ReportsUnnecessary (),
109127 reportsDeprecated : message .ReportsDeprecated (),
110128 }
@@ -185,13 +203,13 @@ func EqualDiagnosticsNoRelatedInfo(d1, d2 *Diagnostic) bool {
185203 return getDiagnosticPath (d1 ) == getDiagnosticPath (d2 ) &&
186204 d1 .Loc () == d2 .Loc () &&
187205 d1 .Code () == d2 .Code () &&
188- d1 .Message () == d2 .Message ( ) &&
206+ slices . Equal ( d1 .MessageArgs (), d2 .MessageArgs () ) &&
189207 slices .EqualFunc (d1 .MessageChain (), d2 .MessageChain (), equalMessageChain )
190208}
191209
192210func equalMessageChain (c1 , c2 * Diagnostic ) bool {
193211 return c1 .Code () == c2 .Code () &&
194- c1 .Message () == c2 .Message ( ) &&
212+ slices . Equal ( c1 .MessageArgs (), c2 .MessageArgs () ) &&
195213 slices .EqualFunc (c1 .MessageChain (), c2 .MessageChain (), equalMessageChain )
196214}
197215
@@ -211,7 +229,7 @@ func compareMessageChainSize(c1, c2 []*Diagnostic) int {
211229
212230func compareMessageChainContent (c1 , c2 []* Diagnostic ) int {
213231 for i := range c1 {
214- c := strings .Compare (c1 [i ].Message (), c2 [i ].Message ())
232+ c := slices .Compare (c1 [i ].MessageArgs (), c2 [i ].MessageArgs ())
215233 if c != 0 {
216234 return c
217235 }
@@ -256,7 +274,7 @@ func CompareDiagnostics(d1, d2 *Diagnostic) int {
256274 if c != 0 {
257275 return c
258276 }
259- c = strings .Compare (d1 .Message (), d2 .Message ())
277+ c = slices .Compare (d1 .MessageArgs (), d2 .MessageArgs ())
260278 if c != 0 {
261279 return c
262280 }
0 commit comments