-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Include localized diagnostics #18702
Conversation
…alize as part of local
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should probably also add generateLocalizedDiagnosticMessages.ts
to the list of linted files in the Gulpfile
and Jakefile
, before we forget about it and never lint it.
@@ -49,6 +49,8 @@ | |||
"@types/q": "latest", | |||
"@types/run-sequence": "latest", | |||
"@types/through2": "latest", | |||
"@types/xml2js": "^0.4.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should be latest
, unless we have a strong reason to fix the version, yes?
const generateLocalizedDiagnosticMessagesJs = path.join(scriptsDirectory, "generateLocalizedDiagnosticMessages.js"); | ||
const generateLocalizedDiagnosticMessagesTs = path.join(scriptsDirectory, "generateLocalizedDiagnosticMessages.ts"); | ||
|
||
gulp.task(generateLocalizedDiagnosticMessagesJs, /*help*/ false, [], () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rather than building the script in the gulpfile, can we just import
the typescript directly, and call a function it exports (instead of shelling out)? We could do this with our other scripts in the Gulpfile
to cut away some cruft, too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
are we doing this anywhere else in gulpFile? i tried to stay close to the Jake file really. i am not a gulp user :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We were doing it for the old parallel runner, though I've removed it since it's in the harness now. It's no big deal; could just be a little cleaner-feeling, since then there'd be no (visible) compilation step for the script. Doesn't matter much, since we need to keep the compilation step in the Jakefile
anyway.
Jakefile.js
Outdated
@@ -641,7 +675,7 @@ task("build-fold-end", [], function () { | |||
|
|||
// Local target to build the compiler and services | |||
desc("Builds the full compiler and services"); | |||
task("local", ["build-fold-start", "generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile, buildProtocolDts, builtGeneratedDiagnosticMessagesJSON, "lssl", "build-fold-end"]); | |||
task("local", ["build-fold-start", "generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile, buildProtocolDts, builtGeneratedDiagnosticMessagesJSON, "lssl", "build-fold-end", "localize"]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"localize"
should come before "build-fold-end"
, probably.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As discussed we should consider building the NPM packages on the build server vs. this another machine. This way we can include signing in the future.
} | ||
} | ||
|
||
function xmlObjectToString(o: any) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a comment here what we expect the incoming XML to look like
|
||
// generate other langs | ||
fs.readdir(inputPath, (err, files) => { | ||
handelError(err); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
handle :)
}); | ||
} | ||
|
||
function objectToList(o: Record<string, string>) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we're assuming an ES2015 runtime, you can use Object.entries
instead, but this is probably fine.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We already use const
in some of our build scripts, I believe, and haven't received any complaints. We only build on back to Node 4, so it seems reasonable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Object.entries
is ES2017. not sure if was on node v4 or not..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
According to http://node.green/, node 7.5
was the first with Object.entries
... so probably not yet. However map.entries
has been available since node 4. 🐱
What would the error output look like?
|
c:\ts>tsc --v
Version 2.6.0-dev.20171003
c:\ts>tsc --locale rus --pretty c:\test\a.ts
../test/a.ts(1,5): error TS2322: Тип ""string"" не может быть назначен для типа "number".
1 var x: number = "string";
~ |
And help in JPN would look like: PS C:\ts> tsc --v
Version 2.6.0-dev.20171003
PS C:\ts> tsc --locale jpn
バージョン 2.6.0-dev.20171003
構文: tsc [オプション] [ファイル ...]
例: tsc hello.ts
tsc --outFile file.js file.ts
tsc @args.txt
オプション:
-h, --help このメッセージを表示します。
--all コンパイラ オプションをすべて表示します。
-v, --version コンパイラのバージョンを表示します。
--init TypeScript プロジェクトを初期化して、tsconfig.json ファイルを作成します。
-p ファイルまたはディレクトリ, --project ファイルまたはディレクトリ 構成ファイルか、'tsconfig.json' を含むフォルダーにパスが指定されたプロジェクトをコ
ンパイルします。
--pretty 色とコンテキストを使用してエラーとメッセージにスタイルを適用します (試験的)。
-w, --watch 入力ファイルを監視します。
-t バージョン, --target バージョン ECMAScript のターゲット バージョンを指定します: 'ES3' (既定)、'ES5'、'ES2015'、'ES2016'、'ES2017'、'ES
NEXT'。
-m 種類, --module 種類 モジュール コード生成を指定します: 'none'、'commonjs'、'amd'、'system'、'umd'、'es2015'、'ESNext'。
--lib コンパイルに含めるライブラリ ファイルを指定します:
'es5' 'es6' 'es2015' 'es7' 'es2016' 'es2017' 'esnext' 'dom' 'dom.iterable' 'webworker' 'scripthost' 'es201
5.core' 'es2015.collection' 'es2015.generator' 'es2015.iterable' 'es2015.promise' 'es2015.proxy' 'es2015.reflect' 'es2015.symbol' 'es2015.symbol.wellkno
wn' 'es2016.array.include' 'es2017.object' 'es2017.sharedmemory' 'es2017.string' 'es2017.intl' 'esnext.asynciterable'
--allowJs javascript ファイルのコンパイルを許可します。
--jsx 種類 JSX コード生成を指定します: 'preserve'、'react-native'、'react'。
-d, --declaration 対応する '.d.ts' ファイルを生成します。
--sourceMap 対応する '.map' ファイルを生成します。
--outFile ファイル 出力を連結して 1 つのファイルを生成します。
--outDir ディレクトリ ディレクトリへ出力構造をリダイレクトします。
--removeComments コメントを出力しないでください。
--noEmit 出力しないでください。
--strict strict 型チェックのオプションをすべて有効にします。
--noImplicitAny 暗黙的な 'any' 型を含む式と宣言に関するエラーを発生させます。
--strictNullChecks 厳格な null チェックを有効にします。
--strictFunctionTypes Enable strict checking of function types.
--noImplicitThis 暗黙的な 'any' 型を持つ 'this' 式でエラーが発生します。
--alwaysStrict 厳格モードで解析してソース ファイルごとに "use strict" を生成します。
--noUnusedLocals 使用されていないローカルに関するエラーを報告します。
--noUnusedParameters 使用されていないパラメーターに関するエラーを報告します。
--noImplicitReturns 関数の一部のコード パスが値を返さない場合にエラーを報告します。
--noFallthroughCasesInSwitch switch ステートメントに case のフォールスルーがある場合にエラーを報告します。
--types コンパイルに含む型宣言ファイル。
@<ファイル> |
Include localized error messages with the ts package. Localized error messages will be under
lib\<locale id>\diagnosticMessages.generated.json
. runningtsc --locale rus
for instance should load the diagnostic messages file fromlib\rus\diagnosticMessages.generated.json
.for background, the
diagnosticMessages.generated.json
is a just a map from diagnostic message id => diagnostic message text. the compiler comes in with one already for English. When the--locale
is passed, the compiler tries to load the .json map from a folder with matching locale name.Messages are localized by the MS localization team. The communication with the loc team is all done in a specific XML formats, the
.lcg
files are used to specify the messages to be localized, the.lcl
files have the result of the localization. The loc team will be monitoring the repo and should be periodically inserting new.lcl
files with localized messages as we add/change messages.The change adds:
.lcl
files we have used in previous version of the VS with localization for existing messages.src\compiler\diagnosticMessages.generated.json
into the.lcg
format and convert the existing.lcl
files back into .json format.Fixes #13703