VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдордВрдЪ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп VueJs+рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реБрди рд░рд╣реЗ рд╣реИрдВ:

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм (рдкреВрд░реНрд╡ рд╕реЛрдирд╛рд░) рдирд┐рд░рдВрддрд░ рдирд┐рд░реАрдХреНрд╖рдг рдФрд░ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдордВрдЪ рд╣реИред
MISRA C, MISRA C++, MITER/CWE рдФрд░ CERT рд╕рд┐рдХреНрдпреЛрд░ рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯреИрдВрдбрд░реНрдбреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ OWASP рдЯреЙрдк 10 рдФрд░ CWE/SANS рдЯреЙрдк 25 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рднреА рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рднрд┐рдиреНрди рддреИрдпрд╛рд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рд░рди рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡реГрддреНрддрд┐ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ

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

рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реЛрдирд╛рд░реНрдХреНрдпреВрдм-рд╕реНрдХреИрдирд░, рдЬреЛ, рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд┐рдиреНрдпрд╛рд╕-рдлрд╝рд╛рдЗрд▓, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддреА рд╣реИ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдЖрдЧреЗ рд╕рдореЗрдХрди рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП.

рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣рд╛рдБ рд╣реИ рдПрдирдкреАрдПрдо рд░реИрдкрд░. рддреЛ, рдЖрдЗрдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд░реЗрдВ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм ╨▓ Vue-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐.

рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдЖрдЗрдП рд▓рд╛рдн рдЙрдард╛рдПрдВ рдбреЛрдХрд░-рд▓рд┐рдЦреЗрдВ.

рд╕реЛрдирд╛рд░.рдпрдорд▓:

version: '1'
    services:
        simplesample-sonar:
            image: sonarqube:lts
            ports:
                - 9001:9000
                - 9092:9092
            network_mode: bridge

рд╢реБрд░реВ рдХрд░рдирд╛:

docker-compose -f sonar.yml up

рддрддреНрдкрд╢реНрдЪрд╛рдд рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛: http://localhost:9001 .

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛
рдЗрд╕рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ. рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдпрд╛ VueJS+TS+рдЬреЗрд╕реНрдЯ. рдЖрдЗрдП рдЗрд╕реЗ рдЕрдкрдиреА рдУрд░ рдореЛрдбрд╝реЗрдВ:

git clone https://github.com/vuejs/vue-test-utils-typescript-example.git

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм, рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реЛрдирд╛рд░-рд╕реНрдХреИрдирд░рдХреЗ рд▓рд┐рдП NPM рд╡рд╣рд╛рдБ рдПрдХ рдЖрд╡рд░рдг рд╣реИ:

yarn add sonarqube-scanner

рдФрд░ рддреБрд░рдВрдд рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ рд▓рд┐рдкрд┐рдпреЛрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП.

рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди:

{
 тАж 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 тАж
}

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

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

sonar.host.url=http://localhost:9001

sonar.projectKey=test-project-vuejs-ts
sonar.projectName=Test Application (VueJS+TS)

sonar.sources=src
# sonar.tests=
sonar.test.inclusions=src/**/*tests*/**
sonar.sourceEncoding=UTF-8

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

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

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЗрдВрдЬрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдЗрдВрдЬрди рд╣реИ рд╣реИ. рдФрд░ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣реИрдВ package.json.

рдЖрдЗрдП рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝реЗрдВ:

"collectCoverage": true,
"collectCoverageFrom": [
      "src/**/*",
      "!src/main.ts",
      "!src/App.vue",
      "!src/**/*.d.*",
      "!src/**/*__tests__*"
],

рдЕрд░реНрдерд╛рддреН, рд╣рдо рдХрд╡рд░реЗрдЬ рдФрд░ рд╕реНрд░реЛрдд (рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдзреНрд╡рдЬ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

yarn test

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рдХреЛрдб рд╣реА рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ.

рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб.рд╡реНрдпреВ:

...
methods: {
    calc(n) {
      return n + 1;
    }
  },
mounted() {
  this.msg1 = this.msg + this.calc(1);
},
...

рдпрд╣ рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛.

рдкрд░реАрдХреНрд╖рдг рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдореЗрдВ рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╡реНрдпрд╛рдкреНрддрд┐ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрд▓рд╕реАрдУрд╡реА (рдПрд▓рдЯреАрдкреА рдЬреАрд╕реАрдУрд╡реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди).

рдЬреАрдХреЛрд╡ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред Gcov рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдерди рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Gcov GCC рдкреИрдХреЗрдЬ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИред
Lcov - рдЬреАрд╕реАрдУрд╡реА рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдпрд╣ рдХрдИ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП gcov рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдФрд░ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде HTML рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдЬ рднреА рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Lcov рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдХрд╡рд░реЗрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рдЬрд╛рдПрдЧреА рдХрд╡рд░реЗрдЬ/lcov.info.
рд╣рдореЗрдВ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рд╕реЛрдирд╛рд░'рдореИрдВ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рдд рд╣реИ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд╣реБрднрд╛рд╖реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛рдиреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ " рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдзрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХрд╛ рдЕрдкрдирд╛ рдЕрдиреБрднрд╛рдЧ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рдЕрдиреБрднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info

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

рддреЛ, рдЖрдЗрдП рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ package.json:

yarn run sonar 

рдиреЛрдЯ: рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -X рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП.

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

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдиреЛрдЯ: рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдк рд╣рдореЗрд╢рд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

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

рд╕реНрдХреИрдирд░ рдХреЗ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдПрдХрддреНрд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╡рд░реЗрдЬ рднреА рджрд┐рдЦрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ-рдкреНрд░рддрд┐рд╡реЗрджрдиред

рдЖрдЗрдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рдЖрдЗрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ, рдХрд╡рд░реЗрдЬ рдореВрд▓реНрдп рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдлрд╝рд╛рдЗрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ "рдкрддрд╛ рд▓рдЧрд╛рдПрдВ":

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдпрд╣рд╛рдВ рд╣рдо рдореБрдЦреНрдп, рдкрд░реАрдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рджреЗрдЦрддреЗ рд╣реИрдВ HelloWorld.vue, рдПрдХ рдлрд╛рдЗрд▓ рднреА рд╣реИ рдореБрдЦреНрдп.ts, рдЬрд┐рд╕рд╕реЗ рдХрд╡рд░реЗрдЬ рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдЦрд╝рд░рд╛рдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдХрд░ рджрд┐рдпрд╛? рд╣рд╛рдБ, рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрддрд░ рдкрд░ рдерд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдХреИрдирд░ рдиреЗ рдЗрд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдкрдиреА рдЧрдгрдирд╛ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред

рдЖрдЗрдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

...
sonar.exclusions=src/main.ts
...

рдореИрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░ рднреА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рд╕реЛрдирд╛рд░.рдкрд░реАрдХреНрд╖рдг.рд╕рдорд╛рд╡реЗрд╢рди.

рд╕реНрдХреИрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╕рд╣реА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЖрдЗрдП рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВ - рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓. рдореИрдВрдиреЗ рдКрдкрд░ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА рд╕реЛрдирд╛рд░реР рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдиреЗрдХ рднрд╛рд╖рд╛рдПрдБред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИ TS, рддреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЗрд░рдлреЗрд░ рдФрд░ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рд╕реНрдХреИрдирд░ рдкрд░ рджрдмрд╛рд╡ рдХреНрдпреЛрдВ рдбрд╛рд▓реЗрдВред рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рд╕реЛрдирд╛рд░'рдП:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

...
sonar.language=ts
...

рдЖрдЗрдП рд╕реНрдХреИрдирд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдХрд╡рд░реЗрдЬ рдкреВрд░реА рддрд░рд╣ рдЦрд╝рддреНрдо рд╣реЛ рдЧрдпрд╛ рдерд╛.

рдпрджрд┐ рд╣рдо рд╕реНрдХреИрдирд░ рд▓реЙрдЧ рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдпрд╛рдиреА, рд╣рдорд╛рд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрд╕ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдереАрдВред

рд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд VueJs рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╣реИ рд╕реЛрдирд╛рд░рдЬреЗрдПрд╕рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреМрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ.

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдкреЛрд░реНрдЯ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ рд╕реЛрдирд╛рд░рдЯреАрдПрд╕ рдХреЗ рд▓рд┐рдП TS, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдЧ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯрд┐рдХрдЯ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛ рд╕реЛрдирд╛рд░'рдП:

  1. https://jira.sonarsource.com/browse/MMF-1441
  2. https://github.com/SonarSource/SonarJS/issues/1281

рдЗрд╕ рддрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реБрдП рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдХреБрдЫ рдЙрддреНрддрд░ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЖрдкрддреНрддрд┐ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдБ рдпрд╣ рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЖрдЬрд╝рдорд╛рдПрдБ "рд╣реИрдХ".
рдЕрдЧрд░ рд╕рдорд░реНрдерди рд╣реИ .рд╡реНрдпреВ-рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реЛрдирд╛рд░'рдУрд╣, рддреЛ рдЖрдЗрдП рдЙрд╕реЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рд╡рд╣ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐.

рдЖрдЗрдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...

рдЖрдЗрдП рд╕реНрдХреИрдирд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдФрд░, рд╡реЛрдЗрд▓рд╛, рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрдкреНрд░рддрд┐. рдпрд╛рдиреА рд╣рдо рд╕рдорд░реНрдерди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╡реНрдпреВрдЬреЗрдПрд╕+рдЯреАрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕реЛрдирд╛рд░рдХреНрдпреВрдм.

рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдВред

рд╣рдордиреЗ рдЕрдм рддрдХ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ:

  • рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕реЛрдирд╛рд░-рдЪрд┐рддреНрд░рд╛рдиреНрд╡реАрдХреНрд╖рдХ;
  • рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реЛрдирд╛рд░-рдЪрд┐рддреНрд░рд╛рдиреНрд╡реАрдХреНрд╖рдХ;
  • рд╕рдорд░реНрдерди рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ .рд╡реНрдпреВ-рдлрд╝рд╛рдЗрд▓реЗрдВ + рдЯрд╛рдЗрдкрдкреНрд░рддрд┐.

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

рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ TS (рд╕реЛрдирд╛рд░рдЯреАрдПрд╕) рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╕реАрдкреАрдбреА (рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдбрд┐рдЯреЗрдХреНрдЯрд░) рдФрд░ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЧрд┐рдирдирд╛ .рд╡реНрдпреВ-рдлрд╝рд╛рдЗрд▓реЗрдВред

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

рдореБрдЦреНрдп.ts:

...
function name(params:string): void {
  console.log(params);
}
...

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЗрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рд╣реЛрдЧреА:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

...
sonar.exclusions=src/main.ts
...

рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реНрдХреИрдирд░ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

yarn test && yarn run sonar

рдмреЗрд╢рдХ, рд╣рдорд╛рд░рд╛ рдХрд╡рд░реЗрдЬ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред'

рдХреЛрдб рдХреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рд╕реАрдкреАрдбреА-рдЙрдкрдпреЛрдЧрд┐рддрд╛ - jscpd:

npx jscpd src

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рд╕реЛрдирд╛рд░рдЬреЗрдПрд╕(рдЯреАрдПрд╕). рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрди рджреЛрдиреЛрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╕реЛрдирд╛рд░рдЬреЗрдПрд╕, рдЬреЛ рдореБрдЭреЗ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред

рдЕрдм рдореИрдВ рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

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

рд╡рд╣рд╛рдБ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╣реИ-рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рд╕реЛрдирд╛рд░'рдП:
рд╕рд╛рдорд╛рдиреНрдп рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

рдЖрдЗрдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

yarn add jest-sonar-reporter

рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рд╣реИ:

рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди:

тАж
"testResultsProcessor": "jest-sonar-reporter"
тАж

рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

yarn test

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдПрдХ рдлрд╛рдЗрд▓ рдмрди рдЬрд╛рдПрдЧреА рдкрд░реАрдХреНрд╖рдг-рд░рд┐рдкреЛрд░реНрдЯ.рдПрдХреНрд╕рдПрдордПрд▓.

рдЖрдЗрдП рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рд╕реЛрдирд╛рд░'рдП:

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

тАж
sonar.testExecutionReportPaths=test-report.xml
тАж

рдФрд░ рд╕реНрдХреИрдирд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

yarn run sonar

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ рд╕реЛрдирд╛рд░'рдП:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ. рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реЛрдирд╛рд░ рдЬреЗрд╕реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╛рдЗрд▓ рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИ рдЗрдХрд╛рдИ-рдкрд░реАрдХреНрд╖рдгред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╕реЛрдирд╛рд░ рд╕реЛрдирд╛рд░.рдкрд░реАрдХреНрд╖рдг, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ):

рд╕реЛрдирд╛рд░-рдкреНрд░реЛрдЬреЗрдХреНрдЯ.рдЧреБрдг:

тАж
sonar.tests=src/components/__tests__
тАж

рдЖрдЗрдП рд╕реНрдХреИрдирд░ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

yarn run sonar

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдЕрдм рд╣рдордиреЗ рдЕрдкрдирд╛ рдирдВрдмрд░ рджреЗрдЦ рд▓рд┐рдпрд╛ рд╣реИ рдЗрдХрд╛рдИ-рдкрд░реАрдХреНрд╖рдг рдФрд░, рдЕрдВрджрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╡рд┐рддрд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

VueJS+TS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ SonarQube рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдирд┐рд░рдВрддрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм. рд╣рдордиреЗ рдЗрд╕рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рд╡реНрдпреВрдЬреЗрдПрд╕+рдЯреАрдПрд╕. рдХреБрдЫ рдЕрдиреБрдХреВрд▓рддрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдареАрдХ рдХреА рдЧрдИрдВред рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рд╕рдВрдХреЗрддрдХ рдХреА рд╕реВрдЪрдирд╛ рд╕рд╛рдордЧреНрд░реА рдмрдврд╝рд╛ рджреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдордиреЗ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ (рд╢рд╛рдпрдж рдореБрдЦреНрдп рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рдХреА рдЬрд╛рдВрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рд╕рд╣рд┐рдд рдЕрдиреНрдп рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирджрдВрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ рд╕рдореБрджрд╛рдп-рд╕рдВрд╕реНрдХрд░рдгред рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХреАрдХрд░рдг рд╣реИ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рд╡рд┐рднрд┐рдиреНрди рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ GitLab рдФрд░ BitBucketред рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдорд░реНрдЬ рдкреБрд▓(рдорд░реНрдЬ) рдЕрдиреБрд░реЛрдз'рдХрд╡рд░реЗрдЬ рдЦрд╝рд░рд╛рдм рд╣реЛрдиреЗ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдореЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреА рдХрд╣рд╛рдиреА рд╣реИред

рдкреБрдирд╢реНрдЪ: рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬреЗрдВ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛.

рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВрдХреГрдкрдпрд╛ред

рдХреНрдпрд╛ рдЖрдк рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  • 26,3% рддрдХ рд╣рд╛рдБ5

  • 15,8% рддрдХ рдирдВрдмрд░ 3

  • 15,8% рддрдХ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ3

  • 10,5% рддрдХ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛2

  • 0,0% рддрдХ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

  • 31,6% рддрдХ рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛6

19 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдорддрджрд╛рди рдХрд┐рдпрд╛ред 3 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд░рд╣реЗред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ