Tslint: рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк 'рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд' рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬрдире░ 2018  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: palantir/tslint

рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ

  • __TSLint рд╕рдВрд╕реНрдХрд░рдг__: 5.9.1
  • __рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг__: 2.6.2
  • __TSLint рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ__: CLI

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

// code snippet

tslint.json рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде:

{
    "defaultSeverity": "error",
    "extends": [
         "tslint-eslint-rules"
     ],
    "jsRules": {},
    "rules": {}
}

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

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

@ StanLee12 рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рдЯреАрдХ CLI рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЕрдиреНрдп рдкрддреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рдЕрдорд╛рдиреНрдп рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - --project рдзреНрд╡рдЬ рдХреЛ tsconfig.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ tslint.json ред

@MartijnKooij рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╣рд╛рдБ рдереЗ extends v5.9 рдореЗрдВ tslint.json рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЕрд╡реИрдз рд╕реЗрдЯрдЕрдк рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рд╣реИ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдЖрдкрдХреЛ --project рдХреЛ tsconfig.json рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА TSLint рдбреЙрдХреНрд╕ рдиреЗ рдХрднреА рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ --project path/to/tslint.json рдПрдХ рд╕рдорд░реНрдерд┐рдд рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рд╣реИред

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

рдЬрдм рдореИрдВ tslint.json рдХреЛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ

{
    "defaultSeverity": "error",
    "extends":  "tslint-eslint-rules",
    "jsRules": {},
    "rules": {}
}

рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ A path in an 'extends' option must be relative or rooted, but 'tslint-eslint-rules' is not

рдореИрдВ tslint-eslint-rules . рдХрд╛ рдкрде рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рдЖрдк tslint.json рдФрд░ tsconfig.json рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реВрдБред рд╕рдВрд╕реНрдХрд░рдг 5.8.1 , рдпрд╣ рд╕рд╣реА рд╣реИред

рдпрд╣рд╛рдВ рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ред
рдмрджрд▓рд╛ рд╣реБрдЖ

"extends": [
    "tslint:recommended"
  ],

рдкреНрд░рддрд┐

"extends": "./node_modules/tslint/lib/configs/recommended"

рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

A path in an 'extends' option must be relative or rooted, but 'xxx' is not рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ tsconfig .json рдЧрд▓рдд рд╣реИред рддреЛ рдпрд╛ рддреЛ рдЖрдк -p tslint.json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рд╣реИ рдЬреЛ tslint.json рдореЗрдВ рдЖрдкрдХреЗ tsconfig.json рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рднреНрд░рдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред
рд╣рдо рд╕реАрдПрд▓рдЖрдИ рд╕реЗ tslint рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
"lint": "tslint --project tslint.json -e src/**/*.spec.*",

рдпрд╣ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрднреА рд╣рдордиреЗ tslint 5.9.1 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ:

error TS5024: Compiler option 'extends' requires a value of type string.

рд╣рдорд╛рд░реЗ tslint.json рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 2 рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИрдВ

{
    "extends": [
        "tslint:recommended",
        "tslint-sonarts"
    ],

рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ tsconfig рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

{
    "compileOnSave": false,
    "compilerOptions": {
        "lib": [
            "dom",
            "es2015"
        ],
        "noImplicitAny": false,
        "target": "es5",
        "rootDir": "src",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true,
        "jsx": "preserve",
        "baseUrl": "src",
        "types": [
            "p-elements-core",
            "@types/jasmine",
            "@types/underscore",
            "@types/requirejs",
            "../../src/types"
        ]
    }
}

@ StanLee12 рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рдЯреАрдХ CLI рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЕрдиреНрдп рдкрддреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рдЕрдорд╛рдиреНрдп рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - --project рдзреНрд╡рдЬ рдХреЛ tsconfig.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ tslint.json ред

@MartijnKooij рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╣рд╛рдБ рдереЗ extends v5.9 рдореЗрдВ tslint.json рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЕрд╡реИрдз рд╕реЗрдЯрдЕрдк рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рд╣реИ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛, рдЖрдкрдХреЛ --project рдХреЛ tsconfig.json рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рднреА TSLint рдбреЙрдХреНрд╕ рдиреЗ рдХрднреА рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ --project path/to/tslint.json рдПрдХ рд╕рдорд░реНрдерд┐рдд рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрдм @ajaff рдиреЗ рдХрд╣рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ tsconfig рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ --project рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ tslint рдерд╛ред
рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ tslint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ https://palantir.github.io/tslint/usage/cli/ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд╕рд╣реА рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЕрдм рдпрд╣ рд╣реИ;)

рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдкреВрд░реНрдгрддрд╛ рдФрд░ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдПред рд╣рдо рдмрджрд▓ рдЧрдП:
"lint": "tslint --project tslint.json -e src/**/*.spec.*",
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
"lint": "tslint --project tsconfig.json -e src/**/*.spec.*",

@ajafff @adidahiya рдореБрдЭреЗ рдмрд╣реБрдд рдЦреЗрдж рд╣реИ, рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

Mocha-tslint рдЕрдм рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рд╡рд╣рд╛рдВ configFilePath рдХреЛ tslint.json рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп tsconfig.json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
const lint = require('mocha-tslint'); const configFilePath = './tsconfig.json'; lint(configFilePath);
рдореБрдЭреЗ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
tslint No valid rules have been specified

рдпрд╣ рд╣рдореЗрд╢рд╛ 5.8 . рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛

@DaveXCS рдпрд╣ рд╕рдВрднрд╡рддрдГ mocha-tslint рдХреБрдЫ рдЧрд▓рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдирд┐рдЬреА рдПрдкреАрдЖрдИ (runner.ts) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ -c рдФрд░ -p рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдореЛрдЪрд╛-рдЯреНрд╕рд▓рд┐рдВрдЯ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ:
const tslintConfig = Configuration.loadConfigurationFromPath(configFilePath); fileNames.forEach((file) => test(file, tslintConfig));
const TSLint = require('tslint'); const Linter = TSLint.Linter; const Configuration = TSLint.Configuration;
fs.readFile(file, (err, sourceBuffer) => { const linter = new Linter(options); const source = sourceBuffer.toString(); linter.lint(file, source.toString(), config);

@DaveXCS рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд▓рд╛рдЗрди рд╣реИ: https://github.com/t-sauer/mocha-tslint/blob/0ba7f64be458cd74343a4149dff323d5bfd195a5/index.js#L24
рдЗрд╕реЗ tslint.json рдХреЗ рдкрде рдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ tsconfig.json рдХреЗ рдкрде рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛: https://github.com/t-sauer/mocha-tslint/issues/9

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ cli рдкрд░ --project рдХреЛ tslint.json рдХреЗ рдмрдЬрд╛рдп tsconfig.json рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ "mocha-tslint" (рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рд╕рд╣рд┐рдд) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛:
https://gist.github.com/DaveXCS/3bd930f7093b748f551c99e80d57c578

рдпрд╣ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ, рдмрд╕ рднреНрд░рдорд┐рдд рд╣реИ рдФрд░ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред

@devguyrun CLI рдЙрдкрдпреЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдкрдХреЛ --project рдХреЛ tsconfig.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдПрдХ рдкреАрдЖрд░ рднреЗрдЬреЗрдВ

рддреНрд░реБрдЯрд┐ TS18001: 'рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд' рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдкрде рд╕рд╛рдкреЗрдХреНрд╖ рдпрд╛ рдореВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди '<%= sourcedir.split('/').map(x => '..').join('/') %

/tsconfig.json' рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИред

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

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

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

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

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

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

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