diff --git a/scripts/processDiagnosticMessages.ts b/scripts/processDiagnosticMessages.ts index 1eead82d9fe..26632ba6bab 100644 --- a/scripts/processDiagnosticMessages.ts +++ b/scripts/processDiagnosticMessages.ts @@ -18,6 +18,13 @@ function main(): void { 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); @@ -28,11 +35,10 @@ function main(): void { var infoFileOutput = buildInfoFileOutput(diagnosticMessages, nameMap); checkForUniqueCodes(names, diagnosticMessages); + writeFile("diagnosticInformationMap.generated.ts", infoFileOutput); - // TODO: Fix path joining - var inputDirectory = inputFilePath.substr(0,inputFilePath.lastIndexOf("/")); - var fileOutputPath = inputDirectory + "/diagnosticInformationMap.generated.ts"; - sys.writeFile(fileOutputPath, infoFileOutput); + var messageOutput = buildDiagnosticMessageOutput(diagnosticMessages, nameMap); + writeFile("diagnosticMessages.generated.json", messageOutput); } function checkForUniqueCodes(messages: string[], diagnosticTable: InputDiagnosticMessageTable) { @@ -85,12 +91,14 @@ function buildInfoFileOutput(messageTable: InputDiagnosticMessageTable, nameMap: for (var i = 0; i < names.length; i++) { var name = names[i]; var diagnosticDetails = messageTable[name]; + var propName = convertPropertyName(nameMap[name]); result += - ' ' + convertPropertyName(nameMap[name]) + + ' ' + propName + ': { code: ' + diagnosticDetails.code + ', category: DiagnosticCategory.' + diagnosticDetails.category + - ', key: "' + name.replace(/[\"]/g, '\\"') + '"' + + ', key: "' + createKey(propName, diagnosticDetails.code) + '"' + + ', message: "' + name.replace(/[\"]/g, '\\"') + '"' + ' },\r\n'; } @@ -99,6 +107,30 @@ function buildInfoFileOutput(messageTable: InputDiagnosticMessageTable, nameMap: return result; } +function buildDiagnosticMessageOutput(messageTable: InputDiagnosticMessageTable, nameMap: ts.Map): string { + var result = + '{'; + var names = Utilities.getObjectKeys(messageTable); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var diagnosticDetails = messageTable[name]; + var propName = convertPropertyName(nameMap[name]); + + result += '\r\n "' + createKey(propName, diagnosticDetails.code) + '"' + ' : "' + name.replace(/[\"]/g, '\\"') + '"'; + if (i !== names.length - 1) { + result += ','; + } + } + + result += '\r\n}'; + + 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"; } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 8fd92818c46..78fc4c5602e 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -365,10 +365,10 @@ namespace ts { export let localizedDiagnosticMessages: Map = undefined; - export function getLocaleSpecificMessage(message: string) { - return localizedDiagnosticMessages && localizedDiagnosticMessages[message] - ? localizedDiagnosticMessages[message] - : message; + export function getLocaleSpecificMessage(message: DiagnosticMessage) { + return localizedDiagnosticMessages && localizedDiagnosticMessages[message.key] + ? localizedDiagnosticMessages[message.key] + : message.message; } export function createFileDiagnostic(file: SourceFile, start: number, length: number, message: DiagnosticMessage, ...args: any[]): Diagnostic; @@ -383,7 +383,7 @@ namespace ts { Debug.assert(end <= file.text.length, `end must be the bounds of the file. ${ end } > ${ file.text.length }`); } - let text = getLocaleSpecificMessage(message.key); + let text = getLocaleSpecificMessage(message); if (arguments.length > 4) { text = formatStringFromArgs(text, arguments, 4); @@ -402,7 +402,7 @@ namespace ts { export function createCompilerDiagnostic(message: DiagnosticMessage, ...args: any[]): Diagnostic; export function createCompilerDiagnostic(message: DiagnosticMessage): Diagnostic { - let text = getLocaleSpecificMessage(message.key); + let text = getLocaleSpecificMessage(message); if (arguments.length > 1) { text = formatStringFromArgs(text, arguments, 1); @@ -421,7 +421,7 @@ namespace ts { export function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; export function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage): DiagnosticMessageChain { - let text = getLocaleSpecificMessage(message.key); + let text = getLocaleSpecificMessage(message); if (arguments.length > 2) { text = formatStringFromArgs(text, arguments, 2); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 8e0338696dd..a279ec81860 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2013,6 +2013,7 @@ namespace ts { key: string; category: DiagnosticCategory; code: number; + message: string; } /** diff --git a/src/services/services.ts b/src/services/services.ts index ec29a89bdbc..5815e2ab1d1 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -7360,7 +7360,7 @@ namespace ts { let sourceFile = current.getSourceFile(); var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile.fileName)); if (sourceFile && getCanonicalFileName(ts.normalizePath(sourceFile.fileName)) === getCanonicalFileName(ts.normalizePath(defaultLibFileName))) { - return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library.key)); + return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); } } } @@ -7382,7 +7382,7 @@ namespace ts { } } - return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element.key)); + return getRenameInfoError(getLocaleSpecificMessage(Diagnostics.You_cannot_rename_this_element)); function getRenameInfoError(localizedErrorMessage: string): RenameInfo { return {