Js-beautify: рдбреЗрдЬрд╝реА-рдЪреЗрди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╣реЛрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЬреВрди 2014  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: beautify-web/js-beautify

https://github.com/enginespot/js-beautify-sublime рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЕрдкреЗрдХреНрд╖рд┐рдд:

.foo()
.bar();

рд╡рд╛рд╕реНрддрд╡рд┐рдХ:

  .foo()
  .bar();

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рд╡рд░реНрддрдорд╛рди рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рдИрдУрдПрдл рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИ:

      });
    });
})();

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдХрд╛рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ - рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрдзрд╛ рдмрдирд╛ рджреЗрдЧрд╛ =(

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

рдореБрдЭреЗ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ +1 рдХрд░рдирд╛ рд╣реИ, рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред

Promise.resolve()
.then(function() {
  return foo.bar()
})
.then(function() {
  return foo.baz();
})
.then(function() {
 //...
}) //...
//...

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рднреА рд╕рдорд╛рдкрди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЕрдЧрд▓реЗ рдирд┐рдХрдЯрддрдо рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рд╕реНрддрд░ рд╣реЛред

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

рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдЖрдкрдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЦрдВрдб (рдЬреЛ рдЧрд▓рдд, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ) рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд┐рддрдиреА рднреА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рд╕рддреНрдп рдХреЗ рдмрдЬрд╛рдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рдФрд░ рдЖрджрдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

(function () {
    'use strict';

    angular
        .module('module', [])
        .directive('appVersion', ['version',
            function (version) {
                return function (scope, elm, attrs) {
                    elm.text(version);
                };
            }
        ])
        .directive('foo', [

            function () {
                return {};
            }
        ])
        .directive('bar', [

            function () {
                return {};
            }
        ]);
})();

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ:

(function () {
    'use strict';

    angular
    .module('module', [])
    .directive('appVersion', ['version',
        function (version) {
            return function (scope, elm, attrs) {
                elm.text(version);
            };
        }
    ])
    .directive('foo', [
        function () {
            return {};
        }
    ])
    .directive('bar', [
        function () {
            return {};
        }
    ]);
})();

рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

{
    "indent_level": 0,
    "indent_with_tabs": true,
    "preserve_newlines": true,
    "max_preserve_newlines": 5,
    "jslint_happy": true,
    "brace_style": "collapse",
    "keep_array_indentation": false,
    "keep_function_indentation": false,
    "space_before_conditional": true,
    "break_chained_methods": true,
    "eval_code": false,
    "unescape_strings": false,
    "wrap_line_length": 0,

    // jsbeautify options
    "format_on_save": true,
    "use_original_indentation": true
}

+1

рдЖрдк рдЬрд┐рд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рдПрдХ рдЗрдВрдбреЗрдВрдЯ рд╣реИ:

    angular
        .module('module', [])

рдореИрдВ рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓реЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рдЕрджреНрднреБрдд рд╕реНрдкрд░реНрд╢ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╣рдо рдЬреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВред рдЕрддреАрдд рдореЗрдВ, рд╣рдо рдХрд╣реАрдВ рднреА рдХрд░реАрдм рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рддреЗ рдереЗред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рд╡рд╣рд╛рдВ рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рддрддреНрд╡ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрдерди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИред рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдХрдерди рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ #200 рдмреНрдпреВрдЯрд┐рдлрд╛рдпрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдерди рдирд╣реАрдВ рд╣реИред рдмреНрдпреВрдЯрд┐рдлрд╛рдпрд░ рдХрд╛ рдорддрд▓рдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдлреЙрд░реНрдореЗрдЯрд░ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рдЧрд╣рд░рд╛рдИ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рд╕реНрд╡рд░реВрдкрдг рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

alpha
    .cooker(function() {
        some
            .thing()
            .should()
            .happen();
        elsewhere
            .some_other_thing()
            .should()
            .happen();
    })
    .thenclose()
beta(zeta);
omega
    .cage(function() {
        random
            .things()
            .should()
            .happen();
        elsewhere
            .some_other_thing()
            .should()
            .happen();
    })
    .thendie()

рдореИрдВ рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓реЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рдЕрджреНрднреБрдд рд╕реНрдкрд░реНрд╢ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╣рдо рдЬреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВред

рдмрд┐рд▓реНрдХреБрд▓! =)

рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

alpha
.cooker(function() {
    some
        .thing()
        .should()
        .happen();
    elsewhere
        .some_other_thing()
        .should()
        .happen();
})
.thenclose()
beta(zeta);
omega
.cage(function() {
    random
        .things()
        .should()
        .happen();
    elsewhere
        .some_other_thing()
        .should()
        .happen();
})
.thendie()

рдпрд╣рд╛рдВ рдХрд╣рд╛рд╡рдд рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рд╕рдорд╛рди рд╣реИ: рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЕрдВрдд рдПрдХ рд╣реА рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдбрдЧрд▓рд╕ рдХреНрд░реЙрдХрдлреЛрд░реНрдб рдХреЗ рдХреЛрдб рдХрдиреНрд╡реЗрдВрд╢рди switch рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдУрд╡рд░рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ js-beautify рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд░реЙрдХрдлреЛрд░реНрдб рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЛ jslint рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдХрд┐ .cooker( рдЧрд▓рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкрд░ рд╣реИред

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ beta(zeta); рдХреА рдЕрдирджреЗрдЦреА рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХреБрдЫ рдбреЗрдЬрд╝реА-рдЪреЗрди рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред рдмреНрдпреВрдЯрд┐рдлрд╛рдпрд░ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдЗрдВрдбреЗрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдХреМрди рд╕рд╛ рдирд╣реАрдВ?

рдореИрдВ рдЗрд╕реЗ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ - рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрд╣рд╛рд╡рд░рд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкрдХ рд╕реНрд╡реАрдХреГрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рднреА рд╕рдордп рд╢рд╛рдорд┐рд▓ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдореБрдЭреЗ рдмрд╣реБрдд рдЦреЗрдж рд╣реИ: рдореИрдВрдиреЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрдВрдбреЗрдВрдЯ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдФрд░ beta(zeta); рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕реЗ:

alpha
.cooker(function() {
    some
    .thing()
    .should()
    .happen();

    elsewhere
    .some_other_thing()
    .should()
    .happen();
})
.thenclose();

beta(zeta);

omega
.cage(function() {
    random
    .things()
    .should()
    .happen();

    elsewhere
    .some_other_thing()
    .should()
    .happen();
})
.thendie();

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

рдЖрдк #485 рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЖрдиреЗ рдХреЗ рд╕рд╛рде рдмреНрдпреВрдЯрд┐рдлрд╛рдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдм рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдВрдЧреЗ:

(function () {
    'use strict';

    angular
        .module('module', [])
        .directive('appVersion', ['version', function (version) {
            return function (scope, elm, attrs) {
                elm.text(version);
            };
        }])
        .directive('foo', [function () {
            return {};
        }])
        .directive('bar', [function () {
            return {};
        }]);
})();

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

рдореБрдЭреЗ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ +1 рдХрд░рдирд╛ рд╣реИ, рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред

Promise.resolve()
.then(function() {
  return foo.bar()
})
.then(function() {
  return foo.baz();
})
.then(function() {
 //...
}) //...
//...

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рднреА рд╕рдорд╛рдкрди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЕрдЧрд▓реЗ рдирд┐рдХрдЯрддрдо рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рд╕реНрддрд░ рд╣реЛред

:+1:

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рднреА рд╕рдорд╛рдкрди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЕрдЧрд▓реЗ рдирд┐рдХрдЯрддрдо рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рд╕реНрддрд░ рд╣реЛред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХреНрд▓рд┐рдВрдЪрд░ рд╣реИ рдЬреЛ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рднреНрд░рд╛рдордХ рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рдПрдХ рдЧрд▓рддреА рд╣реИред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЕрд░реНрде рд╣реИ рдЬрд┐рд╕рдореЗрдВ

Promise.resolve()
  .then(function() {
    return foo.bar()
  })

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ then() рдХрд╛ рдХрд┐рд╕реА рдЕрд░реНрде рдореЗрдВ Promise.resolve() рдХреЗ рд╕рд╛рде рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрдЪреНрдЪреЗ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╕рдЪ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ then() рдХреЗ рд╕рд╛рде рд╡рд╣ рд╕рдВрдмрдВрдз рд╣реИ рдкрд┐рдЫрд▓рд╛ then() ред рдмреЗрд╢рдХ рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _no_ рдРрд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрд╛рд▓ рд╕рдВрдмрдВрдз рд╣реИрдВ, рдФрд░ рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдХрд┐ рд╕рднреА рддрд░рд╣ рд╕реЗ рдиреАрдЪреЗ рдереЗ, рдПрдХ рдмрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝реА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ then() рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ _small_ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЙрд╕ рдЫреЛрдЯреА рд╕реА рдЧрдбрд╝рдмрдбрд╝реА рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ _any_ рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЗрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рд╕рдВрдХреЗрдд рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдЕрд░реНрде рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ - рди рдХреЗрд╡рд▓ рдПрдХ рдирдП рджрд╛рдпрд░реЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЬрдВрдЬреАрд░ рд╡рд┐рдзрд┐ рдХрд╛ рднреА рд╕рдВрдХреЗрдд рджреЗ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА . рдПрдХ рдЬрдВрдЬреАрд░ рд╡рд┐рдзрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ . рд▓рд╛рдЗрди рдкрд░ рдкрд╛рда рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА (рдЫрджреНрдо-) рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд░рд╣реЗ рд╣реИрдВред

рддреЛ рдпрд╣ _really_ _just _ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реАрдпрддрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд╛рдн рдФрд░ рдХрдорд┐рдпреЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред (рдирд┐рдЬреА рд╡рд░реАрдпрддрд╛ _is_ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдпрд╛ рдХреБрдЫ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ "рдореИрдВ _x_ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ" рдпрд╛ "рдореИрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ" рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрди рд▓рд╛рднреЛрдВ рдФрд░ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред рдкрд╕рдВрдж _y_"ред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ рдордЬрдмреВрдд рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рдХрдорд┐рдпрд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдЬрдмрдХрд┐ рд▓рд╛рдн рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдВрдЬреАрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рдХрдорд┐рдпрд╛рдВ:

  • рдЖрдкрдХрд╛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдЕрдм рджрд╛рдпрд░реЗ рдХрд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рд╣реИ
  • рдЖрдкрдХрд╛ рд╕рдорд╛рдкрди рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЧрд▓рддреА рдХреА рд╣реИ

рд▓рд╛рдн:

  • рдЖрдкрдХреЛ рдХреЗрд╡рд▓ . рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рдзрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рджреГрд╢реНрдп рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЖрдк _do_ рдЙрд╕ рд╕рдВрдХреЗрдд рдХреЛ рдХреЗрд╡рд▓ . рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ)

+1

+1 рдЗрд╕рд╕реЗ jslint рдореЗрдВ Expected exactly one space between '{a}' and '{b}' рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реЛ рд░рд╣реА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:

gulp.task('changelog', function () {
    return gulp.src('CHANGELOG.md', {
            buffer: false
        })
        .pipe(conventionalChangelog({
            preset: 'angular' // Or to any other commit message convention you use.
        }))
        .pipe(gulp.dest('./'));
});

рддреНрд░реБрдЯрд┐рдпрд╛рдБ:

4   Expected 'buffer' at column 9, not column 13.    buffer: false
5   Expected '}' at column 5, not column 9.  })

рд╕рд╣реА рддрд░реАрдХрд╛ (jslint рдХреЗ рд▓рд┐рдП):

gulp.task('changelog', function () {
    return gulp.src('CHANGELOG.md', {
        buffer: false
    })
        .pipe(conventionalChangelog({
            preset: 'angular' // Or to any other commit message convention you use.
        }))
        .pipe(gulp.dest('./'));
});

рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рджрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП:

  // fetch `config.json` and then set as constant
  $http.get('config.json').then(function(response) {
    angular.module('myApp').constant('CONFIG', response.data);
  })
  .then(function() {
    angular.bootstrap(document, ['myApp']);
  })
  .catch(function(err) {
    var message = (err && err.data || err && err.message);
    console.error('Unable to bootstrap application.', err);
    window.alert('Unable to bootstrap application.' + (message ? '\n\n' + message : ''));
  });

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

try {
    // 4 spaces
  } // 2
  catch () {
    // 4
  }

рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдмрдЪреНрдЪрд╛ рдЯреЛрдХрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░ рд╕реЗ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рд╣реИ:

    .module('module', function() {
      // .module starts on new line, so this block has 2 indents
    })

рдмрдирд╛рдо

  angular.module('module', function() {
    // .module is on the same line as the initial variable angular, so this block has 1 indent
  })

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╕рдм рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдбрдмрд▓ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

(рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЦрдбрд╝рд╛ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рдкрдВрдХреНрддрд┐рдмрджреНрдз/рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ :)

angular.module('module', function() {
    // double indent
  });

рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╕рдордп рдирд╣реАрдВ рд╣реИред

рдЖрдк рд╕рднреА "+1" - рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

+1 рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдЦреЛрд▓рд╛ рд╣реИ

https://github.com/beautify-web/js-beautify/pull/927

рдпрджрд┐ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдЕрдВрддрддрдГ рдкреАрдЖрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдЧрд╛, рддреЛ рдЗрд╕реЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

+1 рдпрд╣ рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдмрд╛рдК рд╣реИ

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

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

iofjuupasli picture iofjuupasli  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

garretwilson picture garretwilson  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

aeschli picture aeschli  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jsejcksn picture jsejcksn  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ