FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
TypeScript/scripts/processDiagnosticMessages.ts at master · phpnode/TypeScript · GitHub
phpnode
/
TypeScript
Public
forked from
microsoft/TypeScript
Notifications
You must be signed in to change notification settings
Fork
1
Star
1
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
TypeScript
/
scripts
/
processDiagnosticMessages.ts
Copy path
More file actions
More file actions
Latest commit
History
History
History
117 lines (93 loc) · 4.12 KB
Breadcrumbs
TypeScript
/
scripts
/
processDiagnosticMessages.ts
Copy path
File metadata and controls
117 lines (93 loc) · 4.12 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/// <reference path="../src/compiler/sys.ts" />
interface
DiagnosticDetails
{
category
:
string
;
code
:
number
;
isEarly
?:
boolean
;
}
type
InputDiagnosticMessageTable
=
ts
.
Map
<
DiagnosticDetails
>
;
function
main
(
)
:
void
{
var
sys
=
ts
.
sys
;
if
(
sys
.
args
.
length
<
1
)
{
sys
.
write
(
"Usage:"
+
sys
.
newLine
)
sys
.
write
(
"\tnode processDiagnosticMessages.js <diagnostic-json-input-file>"
+
sys
.
newLine
)
;
return
;
}
function
writeFile
(
fileName
:
string
,
contents
:
string
)
{
// TODO: Fix path joining
var
inputDirectory
=
inputFilePath
.
substr
(
0
,
inputFilePath
.
lastIndexOf
(
"/"
)
)
;
var
fileOutputPath
=
inputDirectory
+
"/"
+
fileName
;
sys
.
writeFile
(
fileOutputPath
,
contents
)
;
}
var
inputFilePath
=
sys
.
args
[
0
]
.
replace
(
/
\\
/
g
,
"/"
)
;
var
inputStr
=
sys
.
readFile
(
inputFilePath
)
;
var
diagnosticMessagesJson
:
{
[
key
:
string
]
:
DiagnosticDetails
}
=
JSON
.
parse
(
inputStr
)
;
// Check that there are no duplicates.
const
seenNames
=
ts
.
createMap
<
true
>
(
)
;
for
(
const
name
of
Object
.
keys
(
diagnosticMessagesJson
)
)
{
if
(
seenNames
.
has
(
name
)
)
throw
new
Error
(
`Name
${
name
}
appears twice`
)
;
seenNames
.
set
(
name
,
true
)
;
}
const
diagnosticMessages
:
InputDiagnosticMessageTable
=
ts
.
createMapFromTemplate
(
diagnosticMessagesJson
)
;
var
infoFileOutput
=
buildInfoFileOutput
(
diagnosticMessages
)
;
checkForUniqueCodes
(
diagnosticMessages
)
;
writeFile
(
"diagnosticInformationMap.generated.ts"
,
infoFileOutput
)
;
var
messageOutput
=
buildDiagnosticMessageOutput
(
diagnosticMessages
)
;
writeFile
(
"diagnosticMessages.generated.json"
,
messageOutput
)
;
}
function
checkForUniqueCodes
(
diagnosticTable
:
InputDiagnosticMessageTable
)
{
const
allCodes
:
{
[
key
:
number
]
:
true
|
undefined
}
=
[
]
;
diagnosticTable
.
forEach
(
(
{
code
}
)
=>
{
if
(
allCodes
[
code
]
)
throw
new
Error
(
`Diagnostic code
${
code
}
appears more than once.`
)
;
allCodes
[
code
]
=
true
;
}
)
;
}
function
buildInfoFileOutput
(
messageTable
:
InputDiagnosticMessageTable
)
:
string
{
var
result
=
'// <auto-generated />\r\n'
+
'/// <reference path="types.ts" />\r\n'
+
'/* @internal */\r\n'
+
'namespace ts {\r\n'
+
" function diag(code: number, category: DiagnosticCategory, key: string, message: string): DiagnosticMessage {\r\n"
+
" return { code, category, key, message };\r\n"
+
" }\r\n"
+
' export const Diagnostics = {\r\n'
;
messageTable
.
forEach
(
(
{
code
,
category
}
,
name
)
=>
{
const
propName
=
convertPropertyName
(
name
)
;
result
+=
`
${
propName
}
: diag(
${
code
}
, DiagnosticCategory.
${
category
}
, "
${
createKey
(
propName
,
code
)
}
",
${
JSON
.
stringify
(
name
)
}
),\r\n`
;
}
)
;
result
+=
' };\r\n}'
;
return
result
;
}
function
buildDiagnosticMessageOutput
(
messageTable
:
InputDiagnosticMessageTable
)
:
string
{
let
result
=
'{'
;
messageTable
.
forEach
(
(
{
code
}
,
name
)
=>
{
const
propName
=
convertPropertyName
(
name
)
;
result
+=
`\r\n "
${
createKey
(
propName
,
code
)
}
" : "
${
name
.
replace
(
/
[
\"
]
/
g
,
'\\"'
)
}
",`
;
}
)
;
// Shave trailing comma, then add newline and ending brace
result
=
result
.
slice
(
0
,
result
.
length
-
1
)
+
'\r\n}'
;
// Assert that we generated valid JSON
JSON
.
parse
(
result
)
;
return
result
;
}
function
createKey
(
name
:
string
,
code
:
number
)
:
string
{
return
name
.
slice
(
0
,
100
)
+
'_'
+
code
;
}
function
convertPropertyName
(
origName
:
string
)
:
string
{
var
result
=
origName
.
split
(
""
)
.
map
(
char
=>
{
if
(
char
===
'*'
)
{
return
"_Asterisk"
;
}
if
(
char
===
'/'
)
{
return
"_Slash"
;
}
if
(
char
===
':'
)
{
return
"_Colon"
;
}
return
/
\w
/
.
test
(
char
)
?
char
:
"_"
;
}
)
.
join
(
""
)
;
// get rid of all multi-underscores
result
=
result
.
replace
(
/
_
+
/
g
,
"_"
)
;
// remove any leading underscore, unless it is followed by a number.
result
=
result
.
replace
(
/
^
_
(
[
^
\d
]
)
/
,
"$1"
)
// get rid of all trailing underscores.
result
=
result
.
replace
(
/
_
$
/
,
""
)
;
return
result
;
}
main
(
)
;
Back
|
FazBrowse Home
|
New Git URL