Typescript: рдПрдорд┐рдЯ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЕрдХреНрддреВре░ 2014  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рдирдорд╕реНрддреЗ,

рдЯреАрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг : рез.рез

рджрд┐рдпрд╛ рд╣реБрдЖ

function foo() {

    var x = 10;

    var y = 11;
}

рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рдерд╛

function foo() {
    var x = 10;

    var y = 11;
}

рдирдП рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдЧрд╛рдпрдм рд╣реИ

function foo() {
    var x = 10;
    var y = 11;
}

(рджреЛрдиреЛрдВ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдиреЗ рдкрд╣рд▓реА рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдирдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рдХрджрдо рдЖрдЧреЗ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред)

рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрднрд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рднреАрдбрд╝ preserveWhitespace: true/false рдЪрд╛рд╣рддреА рд╣реИ
@ORESoftware ++

рд╕рднреА 36 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдирд╛ ... рдирдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рднреА рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо _consistently_ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдкрд░рд┐рд░рдХреНрд╖рдг рд╣рдореЗрд╢рд╛ рдПрдХ рд╣рд┐рдЯ рдпрд╛ рдорд┐рд╕ рдЪреАрдЬ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИ рдЬрдм рдпрд╣ рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдЬреЛ рдкреБрдирд░реНрд▓реЗрдЦрди, рдЬреИрд╕реЗ рд╡рд░реНрдЧ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдЕрдзреАрди рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдЯрд┐рдкреНрдкрдгреА рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрд╛рдд рдирд╣реАрдВ рд╣реИред

@NoelAbrahams рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХреМрди рд╕реЗ рдореБрджреНрджреЗ рджреЗрдЦрддреЗ рд╣реИрдВ?

@ahejlsberg @NoelAbrahams I рдиреЗ рдореВрд▓ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдпрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдФрд░ newline рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдПрдХ рднрдпрд╛рдирдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдкрд░ рднреА, рдЬрд┐рдиреНрд╣реЗрдВ рднрд╛рд░реА рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреИрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд░-рдлрд╝рдВрдХреНрд╢рди) рдпрд╣ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╡рд╣реА рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдк рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

рд▓рд╛рдЗрди рдкрд░рд┐рд░рдХреНрд╖рдг рдЬреНрдпрд╛рджрд╛рддрд░ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдкреЗрдХреНрд╖ рд░рд┐рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд╛рдЗрди рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ:

module M {
}
module N {
}

рдлрд┐рд░ рдЬрдм рдЖрдк 'рдПрди' рдХреЗ рд▓рд┐рдП рдЖрдИрдЖрдИрдПрдлрдИ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ "рд╣рдореЗрдВ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдЯреНрд░рд┐рд╡рд┐рдпрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рддрддреНрд╡"ред

рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ / рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЙрддреНрд╕рд░реНрдЬрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдиреЗ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рдХрд┐ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ / рдирд┐рд╖реНрдард╛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде

https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter2/ecmascript5/Parser.ts
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter2/ecmascript5/Parser.ts.expected

рдЖрдк рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/

рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╡рд╣ рдерд╛ 'рд╕рдВрд░реЗрдЦрдг'ред рдпрд╛рдиреА рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдб рдерд╛ рдЬрд┐рд╕реЗ рдореВрд▓ (рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп) рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХреЛрдб рдХреЛ рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реЛрддрд╛ред

рдЗрд╕рдиреЗ рдХрд╣рд╛, рдЯреАрдПрд╕ рд╕реЗ рдЬреЗрдПрд╕ рддрдХ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдиреЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐:
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/ClassDeclaration/ClassDeclaration2.ts
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/ClassDeclaration/ClassDeclaration2.ts.expected

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ (рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдлреИрд▓рдиреЗ рдкрд░ рднреА) рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╡рд░реНрдЧ рдХреЛ рдЖрдИрдЖрдИрдПрдл рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ

@ahejlsberg , рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдЯреАрдХ рдкрддреНрд░рд╛рдЪрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд░рд╣ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдЯреАрдПрд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рд▓рдВрдмрд╛рдИ рдЪрд▓реА рдЧрдИ рд╣реИ рдХрд┐ _beautiful _ JavaScript (: рдореБрд╕реНрдХрд╛рди :) рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@ahejlsberg @NoelAbrahams рдПрдХ рдРрд╕рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЬрдм рд╕реЗрдЯрд░ / рдЧреЗрдЯреНрдЯрд░ рдЪреЗрдиреНрд╕ (рдЬреИрд╕реЗ jquery рдХреЗ рд╕рд╛рде) рдпрд╛ рдЪреЗрдирд┐рдВрдЧ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдирдИ рд▓рд╛рдЗрди рдлреАрдб рдЦреЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рджрд░реНрдж рдмрд┐рдВрджреБ рд╣реИ рдЬрдм рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкреЗ:

(<any> x).a('#test')
    .b('test')
    .c(() => 'foo')
    .d(() => 'bar')
    .e(() => 5)
    .f(() => 6);

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

x.a('#test').b('test').c(function () { return 'foo'; }).d(function () { return 'bar'; }).e(function () { return 5; }).f(function () { return 6; });

Chrome рдФрд░ sourceMaps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЕрднреА рднреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

http://www.typescriptlang.org/Playground#src = (% 3Cany% 3E% 20x) .a ('% 23test')% 0A% 20% 20% 20% 20% 20.b ('рдкрд░реАрдХреНрд╖рдг')% 0A% 09.c (()% 20% 3 рдбреА% 3E% 20'foo ')% 0A% 09.d (()% 20% 3 рдбреА% 3E% 20'bar')% 0A% 09.e (() 20% % 3 рдбреА% 3E% 205)% 0A% 09.f (()% 20% 3 рдбреА% 3E% 206)% 3 рдмреА

@mtraynham , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рд╣рдореЗрд╢рд╛ рдирдИ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рдерд╛:

// TS
var x = () => 'foo';

// JS - old
var x = function () { 
             return 'foo'; 
       };

// JS - new
var x = function () { return 'foo'; };

рдореИрдВрдиреЗ рднреА рдЗрд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рд╣реИ - рдХрднреА-рдХрднреА рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдФрд░ function рддрд╛рдХрд┐ рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рдордп рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХреВрдВред

@NoelAbrahams рдЖрд╣, рдореИрдВ рдЗрд╕ рд╕рдЯреАрдХ рдЙрд╕реА рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ... рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдмрдЧ рдерд╛ (рд▓рд╛рдЗрди рдлреАрдбреНрд╕ рдХрд╛ рдЙрдиреНрдореВрд▓рди), рдпрд╛ рдореБрдЭреЗ рдПрдХ рдФрд░ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВрдиреЗ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдкрд░ # 2259 рдмрдирд╛рдпрд╛ред

рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдирд┐рджреЗрд╢рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирдИ рд▓рд╛рдЗрди рдХреА рдХреНрд╖рдорддрд╛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрдореНрдпреБрдирд┐рдЯреА рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдЕрдкреАрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрдирд░реЗрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдерд╛ред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣рд╛рд▓ рдХреЗ рдЕрджреНрдпрддрди рдФрд░ "--removeComments" рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ @timjmartel рдХреЗ рд╕рдорд╛рди рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реЗ рдкрд╕рдВрдж

рдЕрдЧрд░ рд╣рдорд╛рд░реА рдЯреАрдо рдиреЗ рдХрднреА рдЯреАрдПрд╕ рдХрд╛ рдкрд░рд┐рддреНрдпрд╛рдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдмрджрд▓реЗ рд╣реБрдП рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦрд╛ рддреЛ рдорд╛рдирд╡-рд╣рд┐рддреИрд╖реА рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рд╣реЛрдиреЗ рдкрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдЬреЗрдПрд╕ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ - рдЕрднреА рдХреЗ рд▓рд┐рдП - рдЙрдиреНрд╣реЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рднрд▓реЗ рд╣реА рд╡реЗ рд╣рд┐рдЯ рдпрд╛ рдорд┐рд╕ рд╣реЛрдВ? рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдлреАрдЪрд░ рдХреЛ "--keepEmptyLines" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдкреВрдЫрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ JS рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкрдардиреАрдп JS рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЬрдВрдЬреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдлрд┐рд░, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ "--oneCallForLine" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдкреВрдЫрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдФрд░ "рд╣рд┐рдЯ рдпрд╛ рдорд┐рд╕" рдЪреАрдЬ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдВрдЬреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдмреНрдпреВрдЯрд┐рдлрд╛рдпрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЗрддрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕ tsconfig.json рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

preserveWhitespace: true/false

?

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ: https://www.typescriptlang.org/docs/handbook/compiler-options.html

рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рди рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ .ts рдХреЗ рдмрдЬрд╛рдп рдЧрд▓рддреА рд╕реЗ .js рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ / рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧреИрд░-рдореБрджреНрджрд╛ рд╣реИред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ tsc рдХреЗрд╡рд▓ .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣реА рд▓рд┐рдЦрддрд╛ рд╣реИ / рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tsc рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЕрднреА рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

@DanielRosenwasser рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдо

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

+1

+1

+1

рднреАрдбрд╝ preserveWhitespace: true/false рдЪрд╛рд╣рддреА рд╣реИ
@ORESoftware ++

рдХрд╛рд░рдг рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЗрдПрд╕ рдХреЛ "рдиреАрдЪрд╛ рджрд┐рдЦрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрднреА рдпрд╣ рдирдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдШрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЬреЗрдПрд╕ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред

+1 preserveWhitespace: true/false

рдЕрд╕реНрдерд╛рдпреА рд╣реИрдХ

рд▓рд╛рдЗрдирдмреНрд░реАрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП

рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде:

{
  "lineBreak": {
    "before": {
      "FunctionDeclaration": ">=2",
      "FunctionDeclarationOpeningBrace": 0,
      "FunctionDeclarationClosingBrace": 1,
      "MethodDefinition": ">=2",
      "ClassDeclaration": ">=2"
    },
    "after": {
      "FunctionDeclaration": ">=2",
      "FunctionDeclarationOpeningBrace": 1,
      "MethodDefinitionClosingBrace": ">=2",
      "ClassClosingBrace": ">=2"
    }
  }
}

@mtraynham рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг:

(<any> x).a('#test')
    .b('test')
    .c(() => 'foo')
    .d(() => 'bar')
    .e(() => 5)
    .f(() => 6);

рдирд╡реАрдирддрдо рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдпрд╣ рдЬреЗрдПрд╕ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ:

x.a('#test')
    .b('test')
    .c(function () { return 'foo'; })
    .d(function () { return 'bar'; })
    .e(function () { return 5; })
    .f(function () { return 6; });

(рджреЗрдЦреЗрдВ TS PlayGround https://goo.gl/JViurr)

рдЯреАрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.1 (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЗ рдмрд╛рдж рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? @ рд╣реЗрдЬреЗрд▓реНрд╕рдмрд░реНрдЧ ?

@ рд╡рд▓реЗрд░рд╛-рд░рдЬрд╝реБрд╡рди рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп # 2259 рдЦреЛрд▓рд╛ рдерд╛ред рдореЗрд░рд╛ рдореБрджреНрджрд╛ рд▓рд╛рдЗрди рдлреАрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрдЧ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдЯреАрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред # 2259 рдХреЛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ (рдордИ 2015) рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рдмреНрд░рд┐рд▓- рдПрдВрдбреНрд░реА рдПрдлрд╝реЙрд░реНрдореЗрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрдЧ рдХреЗ рд╕рд╛рде, (рдЬрдм рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╢рдмреНрдж рдЖрдпрд╛рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдирд╣реАрдВ рдерд╛):

{
    "lineBreak": {
        "before": {
            "FunctionDeclaration": ">=2",
            "FunctionDeclarationOpeningBrace": 0,
            "FunctionDeclarationClosingBrace": 1,
            "MethodDefinition": ">=2",
            "ClassDeclaration": ">=2",
            "ExportNamedDeclaration": 2
        },
        "after": {
            "FunctionDeclaration": ">=2",
            "FunctionDeclarationOpeningBrace": 1,
            "MethodDefinitionClosingBrace": ">=2",
            "ClassClosingBrace": ">=2"
        }
    }
}

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ esformatter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрджрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рднреАрддрд░ рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рд╣рдо рдЧрджреНрдп рдореЗрдВ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреА рддрд░рд╣ рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рднреАрддрд░ рд╡реЗ рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред рдЙрдирдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрдардиреАрдпрддрд╛ рдЧреНрд░рд╕реНрдд рд╣реИред

@ahejlsberg рдореИрдВ ts-jest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреА рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЧрд▓рдд рд▓рд╛рдЗрди рдирдВрдмрд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдореБрджреНрджрд╛ js рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЗрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рдЬреЗрдПрд╕ рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдХреНрдпреЛрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ? рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? :)

рдпрд╛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? -> V4 рдЕрдЧрд▓рд╛ рдмрдбрд╝рд╛ рд╕рдВрд╕реНрдХрд░рдг # 3143

@JimTheMan рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╢рд╛рдпрдж source-map-support рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рд╣реА рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднреА рднрд╛рдЧрддрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдкреИрдЪ рдмрдирд╛рдХрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдФрд░ рдкреИрдЪ рдореЗрдВ рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ред jsdiff рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рдкреИрдЪ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдЙрд╕рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

import * as diff from 'diff';

const patch =
      diff.parsePatch(diff.createPatch('file', oldText, newText, '', ''));
const hunks = patch[0].hunks;
for (let i = 0; i < hunks.length; ++i) {
  let lineOffset = 0;
  const hunk = hunks[i];
  hunk.lines = hunk.lines.map(line => {
    if (line === '-') {
      lineOffset++;
      return ' ';
    }
    return line;
  });
  hunk.newLines += lineOffset;
  for (let j = i + 1; j < hunks.length; ++j) {
    hunks[j].newStart += lineOffset;
  }
}
return diff.applyPatch(oldText, patch);

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде, рдЖрдк рдореВрд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рднреА рдкрдВрдХреНрддрд┐ рд╡рд┐рд░рд╛рдо рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@zeroliu рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдордп рд╡рд┐рд▓рдВрдм рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ?

@ahejlsberg рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ?

рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ @ рд╡реЗрд▓реЗрд░рд╛-рд░реЛрдЬрд╝реНрд╡рд╛рдиред рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдореИрдВ 100-1000 LOC рдХреА 10-ish рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЗрд░реА рдХрд╛ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЕрднреА рддрдХ рдпрд╣рд╛рдБ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди? рдореИрдВ рдЗрд╕ рдореБрд╕реАрдмрдд рдореЗрдВ рднреА рднрд╛рдЧрддрд╛ рд╣реВрдБ ...

рдЬрдм рдореИрдВ рдЕрдкрдиреА рдЯреАрдо рдХреЗ рд╕рд╛рдереА @emadum рдиреЗ рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдпрд╛ рдХрд┐

const gulp = require('gulp');
const ts = require('gulp-typescript');
const through = require('through2');

function preserveNewlines() {
  return through.obj(function(file, encoding, callback) {
    const data = file.contents.toString('utf8');
    const fixedUp = data.replace(/\n\n/g, '\n/** THIS_IS_A_NEWLINE **/');
    file.contents = Buffer.from(fixedUp, 'utf8');
    callback(null, file);
  });
}

function restoreNewlines() {
  return through.obj(function(file, encoding, callback) {
    const data = file.contents.toString('utf8');
    const fixedUp = data.replace(/\/\*\* THIS_IS_A_NEWLINE \*\*\//g, '\n');
    file.contents = Buffer.from(fixedUp, 'utf8');
    callback(null, file);
  });
}

gulp.task('default', function () {
  return gulp.src('src/**/*.ts')
    .pipe(preserveNewlines())
    .pipe(ts({
      removeComments: false
    }))
    .pipe(restoreNewlines())
    .pipe(gulp.dest('lib'));
});

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЪрддреБрд░ рдЯрд┐рдкреНрдкрдгреА рдХреБрдЫ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рд░реЛрдХ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдЬ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдУрд╡рд░рд╣реЗрдб рдиреНрдпреВрдирддрдо рдерд╛ред

hth

@mbroadst

рдореИрдВрдиреЗ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЙрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ npm рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдмрди рдЧрдпрд╛:
https://www.npmjs.com/package/gulp-preserve-typescript-whitespace

рдореИрдВ Readme рдореЗрдВ рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдХрд╛ рд╢реНрд░реЗрдп, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдмреБрд░рд╛ рдордд рдорд╛рдирдирд╛ тАЛтАЛ:)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

seanzer picture seanzer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zhuravlikjb picture zhuravlikjb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blendsdk picture blendsdk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jbondc picture jbondc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manekinekko picture manekinekko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ