Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π’ Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° SonarQube Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° качСството Π½Π° ΠΊΠΎΠ΄Π° Π½Π° високо Π½ΠΈΠ²ΠΎ. ΠŸΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, написан Π½Π° VueJs+Typescript, Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ…Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° Π±ΠΈΡ… искал Π΄Π° Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ успяхмС Π΄Π° Π³ΠΈ Ρ€Π΅ΡˆΠΈΠΌ.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ станС Π΄ΡƒΠΌΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ спомСнах ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° SonarQube. Малко тСория β€” ΠΊΠ°ΠΊΠ²ΠΎ прСдставлява Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ я Ρ‡ΡƒΠ²Π°Ρ‚ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚:

SonarQube (бивш Sonar) β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ Π°Π½Π°Π»ΠΈΠ· (Π°Π½Π³Π». continuous inspection) ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π½Π° качСството Π½Π° ΠΊΠΎΠ΄Π°.
ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΊΠΎΠ΄Π° ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ съгласно ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° стандартитС Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ MISRA C, MISRA C++, MITRE/CWE ΠΈ CERT Secure Coding Standards. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΎΡ‚ ΡΠΏΠΈΡΡŠΡ†ΠΈΡ‚Π΅ OWASP Π’ΠΎΠΏ-10 ΠΈ CWE/SANS Π’ΠΎΠΏ-25 Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ.
Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈ инструмСнти, SonarQube обСдинява Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π² Π΅Π΄ΠΈΠ½Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π° Ρ‚Π°Π±Π»Π° (Π°Π½Π³Π». dashboard), Π²ΠΎΠ΄Π΅ΠΉΠΊΠΈ история Π½Π° ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΈΡ‚Π΅ ΠΈ позволявайки Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚Π° тСндСнция Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° качСството Π½Π° софтуСра ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°.

По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Π½Π° официалния сайт

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° голям Π±Ρ€ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Π‘ΠΏΠΎΡ€Π΅Π΄ информацията ΠΎΡ‚ Π³ΠΎΡ€Π½Π°Ρ‚Π° Π²Ρ€ΡŠΠ·ΠΊΠ° β€” Ρ‚ΠΎΠ²Π° са ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 25 Π΅Π·ΠΈΠΊΠ°. Π—Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π΅Π·ΠΈΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС инсталира ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ плъгин. Π’ общността вСрсия Π²ΠΊΠ»ΡŽΡ‡Π²Π° плъгин Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π’Π°ΡˆΠΈΡΡ‚ DevOps ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π”ΠΎΠ±Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°! (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ typesсript), Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π² wiki Π΅ написано ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ. Π—Π° Π’Π°ΡˆΠΈΡΡ‚ DevOps ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π”ΠΎΠ±Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°! отговаря ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ SonarJS, Π·Π° Typescript SonarTS ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

Π—Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° официалният ΠΊΠ»ΠΈΠ΅Π½Ρ‚ sonarqube-scanner, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ настройкитС ΠΎΡ‚ config-Ρ„Π°ΠΉΠ»Π°, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π° SonarQube Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π° консолидация ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅.

Π—Π° Π’Π°ΡˆΠΈΡΡ‚ DevOps ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π”ΠΎΠ±Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°! ΠΈΠΌΠ° npm-ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°. И Ρ‚Π°ΠΊΠ°, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° внСдряванС SonarQube Π² Vue-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ Typescript.

Π—Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° SonarQube Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ docker-compose.

sonar.yaml:

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

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅:

docker-compose -f sonar.yml up

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° SonarQube Ρ‰Π΅ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π½Π° адрСс – http://localhost:9001 .

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube
ЗасСга Π² Π½Π΅Π³ΠΎ няма ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ справСдливо. Π©Π΅ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°Π·ΠΈ ситуация. Π—Π° основа Π²Π·Π΅Ρ… официалния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚-ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° VueJS+TS+Jest. Π©Π΅ Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Π½Π° нашия ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€:

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

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° инсталирамС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° SonarQube, ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°Ρ€ΠΈΡ‡Π° sonar-scanner, Π·Π° npm ΠΈΠΌΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°:

yarn add sonarqube-scanner

И Π²Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² scripts Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π΅Π³ΠΎ.

package.json:

{
 … 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 …
}

Π‘Π»Π΅Π΄Π²Π°, Π·Π° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° скСнСра, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ настройки Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² спСциалСн Ρ„Π°ΠΉΠ». НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с основнитС.

sonar-project.properties:

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

sonar.projectKey=test-project-vuejs-ts
sonar.projectName=ВСстово ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (VueJS+TS)

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

  • sonar.host.url – адрСс Sonar’а;
  • sonar.projectKey – ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Sonar’а;
  • sonar.projectName – Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ идСнтификацията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎ projectKey;
  • sonar.sources – ΠΏΠ°ΠΏΠΊΠ° с изходния ΠΊΠΎΠ΄, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ src, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ всякаква. Π’Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° сС Π·Π°Π΄Π°Π²Π° спрямо ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ°, която Π΅ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π°, ΠΎΡ‚ която Π΅ стартиран ΡΠΊΠ΅Π½Π΅Ρ€ΡŠΡ‚;
  • sonar.tests – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΡŠΡ€Π²ΠΈ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ. Π’ΠΎΠ²Π° Π΅ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π°, Π² която сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ тСстовСтС. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ няма Ρ‚Π°ΠΊΠ°Π²Π° ΠΏΠ°ΠΏΠΊΠ°, Π° Ρ‚Π΅ΡΡ‚ΡŠΡ‚ сС Π½Π°ΠΌΠΈΡ€Π° Π΄ΠΎ тСствания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² ΠΏΠ°ΠΏΠΊΠ° β€˜testβ€˜, Π·Π°Ρ‚ΠΎΠ²Π° засСга Ρ‰Π΅ Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ слСдния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€;
  • sonar.test.inclusions – ΠΏΡŠΡ‚ Π·Π° тСстовСтС с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° маска, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ няколко Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ със запСтая;
  • sonar.sourceEncoding – ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Π—Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС Π½Π° скСнСра всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, освСн основното ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ дСйствиС: стартиранС Π½Π° самия тСстов Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π», Π·Π° Π΄Π° ΡΡŠΡΡ‚Π°Π²ΠΈ информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅, която впослСдствиС Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΊΠ΅Π½Π΅Ρ€ΡŠΡ‚.

Но Π·Π° Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° настроитС тСстовия Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ информация. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ тСстовият Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» β€” Ρ‚ΠΎΠ²Π° Π΅ Jest. И настройкитС ΠΌΡƒ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° част Π½Π° Ρ„Π°ΠΉΠ»Π° package.json.

ДобавямС Ρ‚Π΅Π·ΠΈ настройки:

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

ВоСст Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ самия Ρ„Π»Π°Π³ Π·Π° нСобходимостта ΠΎΡ‚ изчисляванС Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ (Π·Π°Π΅Π΄Π½ΠΎ с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ‚Π°), Π½Π° основа Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΠΎ Ρ‰Π΅ бъдС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΎ.

Π‘Π΅Π³Π° Π΄Π° стартирамС тСста:

yarn test

Π©Π΅ Π²ΠΈΠ΄ΠΈΠΌ слСдното:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π΅, Ρ‡Π΅ Π² самия ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅, ΠΊΠΎΠ΄ΡŠΡ‚ липсва. НСка Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ.

HelloWorld.vue:

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

Π’ΠΎΠ²Π° Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π·Π° изчисляванС Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅.

Π‘Π»Π΅Π΄ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ стартиранС Π½Π° тСста, Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ Π² Ρ‚ΠΎΠ²Π°:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

На Π΅ΠΊΡ€Π°Π½Π° трябва Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅, Π° Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‰Π΅ бъдС създадСна ΠΏΠ°ΠΏΠΊΠ° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ с информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΎΡ‚ тСстовСтС Π² унивСрсалСн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ LCOV (LTP GCOV extension).

Gcov β€” свободно разпространяСма ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π·Π° изслСдванС Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. Gcov Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ количСство изпълнСния Π·Π° всСки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈ позволява добавянС Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ към изходния ΠΊΠΎΠ΄. Gcov сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΊΠ°Ρ‚ΠΎ стандартна ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° GCC.
Lcov β€” Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ интСрфСйс Π·Π° gcov. Π’ΠΎΠΉ ΡΡŠΠ±ΠΈΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ gcov Π·Π° няколко Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ ΠΈ създава ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ HTML страници с ΠΊΠΎΠ΄Π° ΠΈ информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅. Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ сС ΠΈ страници Π·Π° улСсняванС Π½Π° навигацията. Lcov ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ разклонСния.

Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° тСстовСтС информацията Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Ρ‰Π΅ бъдС Π² coverage/lcov.info.
Врябва Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ SonarΠΎΡ‚ΠΊΡŠΠ΄Π΅ Π΄Π° я Π²Π·Π΅ΠΌΠ΅ΠΌ. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ слСднитС Ρ€Π΅Π΄ΠΎΠ²Π΅ Π² нСговия ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ». Но ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚: ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡ‡Π½ΠΈ, Ρ‚.Π΅. Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° src ΠΈΠΌΠ° ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π·Π° няколко ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΠΊΠ° ΠΈ принадлСТността към Π΄Π°Π΄Π΅Π½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ, Π° ΠΎΡ‚ своя страна ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π΄Π΅Π½ плъгин сС опрСдСля ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡΡ‚Π° Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° Π·Π° всСки ΠŸΠ• ΠΈΠΌΠ° свой Ρ€Π°Π·Π΄Π΅Π» Π·Π° настройка. ΠΠ°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Typescript, слСдоватСлно Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π» с настройки ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° Π½Π΅Π³ΠΎ:

sonar-project.properties:

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

Всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π·Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС Π½Π° скСнСра. Искам Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π² SonarсС създава Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС Π½Π° скСнСра Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠŸΡ€ΠΈ послСдващи случаи информацията Π²Π΅Ρ‡Π΅ Ρ‰Π΅ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ.

И Ρ‚Π°ΠΊΠ°, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, създадСна ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π² package.json:

yarn run sonar 

Π‘Π΅Π»Π΅ΠΆΠΊΠ°: ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ -X Π·Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π»ΠΎΠ³Π²Π°Π½Π΅.

Ако стартиранСто Π½Π° скСнСра Π΅ Π±ΠΈΠ»ΠΎ Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ сС ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ бинарният Ρ„Π°ΠΉΠ» Π½Π° самия скСнСр. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ сС стартира ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° сканира ΡΡŠΡ€Π²ΡŠΡ€Π° SonarΠ·Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈ плъгини, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ изчислява ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ ΠŸΠ•. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС изтСглят ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°: quality profiles, active rules, metrics repository, server rules.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π‘Π΅Π»Π΅ΠΆΠΊΠ°: няма Π΄Π° сС спирамС ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° тях Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π·ΠΈ статия, Π½ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈΡ‚Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ.

ΠΠ°Ρ‚Π°Ρ‚ΡŠΠΊ Π·Π°ΠΏΠΎΡ‡Π²Π° Π°Π½Π°Π»ΠΈΠ·ΡŠΡ‚ Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° src относно Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° всички (освСн Π°ΠΊΠΎ Π½Π΅ Π΅ посочСн ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½) ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, с послСдваща индСксация.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π‘Π»Π΅Π΄Π²Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС фокусирамС Π² Ρ‚Π°Π·ΠΈ статия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³, опрСдСлянС Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄ ΠΈ Ρ‚.Π½.).

Π’ самия ΠΊΡ€Π°ΠΉ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° скСнСра сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ Π½Π° цялата ΡΡŠΠ±Ρ€Π°Π½Π° информация, Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π² ΡƒΠ΅Π± интСрфСйса:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Π½Π΅Ρ‰ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° извСстна ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅, Π½ΠΎ Ρ‚ΠΎ Π½Π΅ отговаря Π½Π° нашия Jest-ΠΎΡ‚Ρ‡Π΅Ρ‚.

НСка Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ. НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ Π²ΡŠΡ€Ρ…Ρƒ стойността Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΈ "Π΄Π° Π½Π°Π²Π»Π΅Π·Π΅ΠΌ" Π² Π΄Π΅Ρ‚Π°ΠΉΠ»Π΅Π½ ΠΎΡ‚Ρ‡Π΅Ρ‚ Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π’ΡƒΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, освСн основния, изслСдвания Ρ„Π°ΠΉΠ» HelloWorld.vue, ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° ΠΈ Ρ„Π°ΠΉΠ» main.ts, ΠΊΠΎΠΉΡ‚ΠΎ разваля цялостната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅. Но ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠ°, Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ…ΠΌΠ΅ ΠΎΡ‚ изчислСнията Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅. Π”Π°, напълно ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ²Π° бСшС Π½Π° Π½ΠΈΠ²ΠΎ Jest, Π½ΠΎ ΡΠΊΠ΅Π½Π΅Ρ€ΡŠΡ‚ Π³ΠΎ Π΅ индСксирал, Π·Π°Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ ΠΏΠΎΠΏΠ°Π΄Π° Π² Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ изчислСния.

НСка Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ:

sonar-project.properties:

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

Искам Π΄Π° направя ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅: освСн ΠΏΠ°ΠΏΠΊΠΈΡ‚Π΅, Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, ΡΡŠΡ‰ΠΎ сС добавят всички ΠΏΠ°ΠΏΠΊΠΈ, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ sonar.test.inclusions.

Π‘Π»Π΅Π΄ стартиранС Π½Π° скСнСра Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π²Π΅Ρ‡Π΅ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½Π° информация:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдващия ΠΌΠΎΠΌΠ΅Π½Ρ‚ – Quality profiles. ΠšΠ°Π·Π°Ρ… ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Sonarняколко Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ИмСнно Ρ‚ΠΎΠ²Π° ΠΈ наблюдавамС. Но Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π½ΠΈ Π΅ написан Π½Π° TS, Π·Π°Ρ‚ΠΎΠ²Π° Π·Π°Ρ‰ΠΎ Π΄Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°ΠΌΠ΅ скСнСра с излишни ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π•Π·ΠΈΠΊΡŠΡ‚ Π·Π° Π°Π½Π°Π»ΠΈΠ· Ρ‰Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ с добавянС Π½Π° ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ във Ρ„Π°ΠΉΠ»Π° Π·Π° конфигурация Sonar:

sonar-project.properties:

...
sonar.language=ts
...

ΠžΡ‚Π½ΠΎΠ²ΠΎ Ρ‰Π΅ стартирамС скСнСра ΠΈ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

ΠŸΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ ΠΈΠ·Ρ‡Π΅Π·Π½Π° напълно.

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° скСнСра, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ слСдния Ρ€Π΅Π΄:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

ВоСст Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ просто Π½Π΅ бяха индСксирани.

Битуацията Π΅ слСдната: ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° VueJs ΠΈΠΌΠ° Π² плъгина SonarJS, ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° Π’Π°ΡˆΠΈΡΡ‚ DevOps ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Π”ΠΎΠ±Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°!.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Но Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° липсва Π² плъгина SonarTS Π·Π° TS, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π·Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ‚ΠΈΠΊΠ΅Ρ‚ Π² проблСмния Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€. Sonar:

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

Π•Ρ‚ΠΎ някои ΠΎΡ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ прСдставитСлитС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° SonarQube, ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π²Π°Ρ‰ΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΊΡ‚.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Но всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅ ΠΈ Ρ‰Π΅ Π²ΡŠΠ·Ρ€Π°Π·ΠΈΡ‚Π΅. Π”Π°, Ρ‚Π°ΠΊΠ° Π΅, Π½Π΅ΠΊΠ° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° β€œΠΏΠΎΡ…Π°ΠΊΠ΅Ρ€ΠΈΠΌβ€.
Ако ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° .vue -Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ SonarΠΈ Π·Π°Ρ‚ΠΎΠ²Π° Π½Π΅ΠΊΠ° Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΌΡƒ ΠΊΠ°ΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ Typescript.

Π”Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€:

sonar-project.properties:

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

НСка стартирамС скСнСра:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

И Π΅Ρ‚ΠΎ, всичко сС Π²ΡŠΡ€Π½Π° Π² нормалния Ρ…ΠΎΠ΄, ΠΈ с Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΡ„ΠΈΠ» само Π·Π° Typescript. ВоСст успяхмС Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° VueJs+TS Π·Π° SonarQube.

НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡ ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠΌ информацията Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅.

Какво Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°:

  • Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Sonar-скСнСр;
  • настроихмС Jest Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅;
  • ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ Sonar-скСнСр;
  • Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° -Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ + Typescript.

ОсвСн тСстовото ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅, ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ интСрСсни ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° качСство Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ ΠΈ броят Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ (участват Π² изчислСнията Π½Π° ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със слоТността Π½Π° ΠΊΠΎΠ΄Π°) Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° рСализация Π½Π° плъгина Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с TS (SonarTS) няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ CPD (Copy Paste Detector) ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄Π° -Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Π—Π° Π΄Π° създадСм синтСтична ситуация Π·Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, просто Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌΠ΅ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΈΠΌΠ΅, ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° добавямС Π² ΠΊΠΎΠ΄Π° main.ts ΠΏΡ€Π°Π·Π½Π° функция ΠΈ я Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌΠ΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΈΠΌΠ΅. Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π² -Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π² .ts -Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

main.ts:

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

Π—Π° Ρ†Π΅Π»Ρ‚Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅Π΄Π° Π½Π° конфигурацията:

sonar-project.properties:

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

НСка рСстартирамС скСнСра Π·Π°Π΅Π΄Π½ΠΎ с тСстовСтС:

yarn test && yarn run sonar

Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠ°Π΄Π½Π΅, Π½ΠΎ сСга Ρ‚ΠΎΠ²Π° Π½Π΅ Π½ΠΈ интСрСсува.

Π’ контСкста Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π—Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ CPD-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° – jscpd:

npx jscpd src

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π—Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΊΠΎΠ΄:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС Ρ€Π΅ΡˆΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰ΠΈ вСрсии Π½Π° ΠΏΠ»ΡŠΠ³ΠΈΠ½ΠΈΡ‚Π΅ SonarJS(TS).Искам Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠ°, Ρ‡Π΅ Ρ‚Π΅ постСпСнно Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сливСн Ρ‚Π΅Π·ΠΈ Π΄Π²Π° плъгина Π² Π΅Π΄ΠΈΠ½ SonarJS, ΠΊΠΎΠ΅Ρ‚ΠΎ, мисля, Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

Π‘Π΅Π³Π° искам Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅ Π½Π° информацията Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅.

Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ тСстовСтС Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎ ΠΈΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π° цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² частност. Но ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π» с информация Π·Π° броя Π½Π° unit-тСстовСтС ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² контСкста Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅.

Има Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, която ΠΌΠΎΠΆΠ΅ Jest-Π΄Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° Sonar:
generic test data β€” https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

НСка инсталирамС Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° си:

yarn add jest-sonar-reporter

И Π΄Π° я Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² конфигурацията Jest:

package.json:

...
"testResultsProcessor": "jest-sonar-reporter"
...

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° изпълним тСст:

yarn test

Π‘Π»Π΅Π΄ ΠΊΠΎΠ΅Ρ‚ΠΎ Π² ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° дирСктория Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‰Π΅ бъдС създадСн Ρ„Π°ΠΉΠ» test-report.xml.

НСка Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² конфигурацията Sonar:

sonar-project.properties:

...
sonar.testExecutionReportPaths=test-report.xml
...

И Π΄Π° рСстартирамС скСнСра:

yarn run sonar

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ Π² интСрфСйса Sonar:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

И Π½ΠΈΡ‰ΠΎ Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ. Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ, Ρ‡Π΅ Sonar Π½Π΅ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, описани Π² Jest ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ unit-тСстовС. Π—Π° Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°Π·ΠΈ ситуация, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Sonar sonar.tests, Π² ΠΊΠΎΠΉΡ‚ΠΎ ясно Ρ‰Π΅ посочим ΠΏΠ°ΠΏΠΊΠΈΡ‚Π΅ с тСстовСтС (Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ°ΠΌΠ΅ само Π΅Π΄Π½Π°):

sonar-project.properties:

…
sonar.tests=src/components/__tests__
…

НСка рСстартирамС скСнСра:

yarn run sonar

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ Π² интСрфСйса:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π‘Π΅Π³Π° видяхмС броя Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ unit-тСстовС ΠΈ, Π°ΠΊΠΎ ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ²Π° число ΠΏΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS с SonarQube

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

И Ρ‚Π°ΠΊΠ°, Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ инструмСнта Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ Π°Π½Π°Π»ΠΈΠ· SonarQube. УспСшно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, написан Π½Π° VueJs+TS. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°. ΠŸΠΎΠ²ΠΈΡˆΠΈΡ…ΠΌΠ΅ информативността Π½Π° показатСля Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ с тСстовС. Π’ Ρ‚Π°Π·ΠΈ статия Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈΡ‚Π΅ Π·Π° качСство Π½Π° ΠΊΠΎΠ΄Π° (възмоТно Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ основнитС), Π½ΠΎ SonarQube ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° качСство, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ тСстванС Π·Π° сигурност. Но Π½Π΅ всичкитС Ρ‚Π΅Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ са напълно Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² community-вСрсията. Π•Π΄Π½Π° ΠΎΡ‚ интСрСснитС ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ интСграцията SonarQube с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ систСми Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ GitLab ΠΈ BitBucket. Π—Π° Π΄Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΠΌ merge pull(merge) request'Π° Π² основната ΠΊΠ»ΠΎΠ½ Π½Π° рСпозитория ΠΏΡ€ΠΈ дСградация Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ. Но Ρ‚ΠΎΠ²Π° Π΅ история Π½Π° съвсСм Π΄Ρ€ΡƒΠ³Π° статия.

PS: Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ описано Π² статията ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄, Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π² моя Ρ„ΠΎΡ€ΠΊ.

Π‘Π°ΠΌΠΎ рСгистрирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° участват Π² Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π°. Π’Π»Π΅Π·Ρ‚Π΅, моля.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° SonarQube:

  • 26,3%Π”Π°5

  • 15,8%НС3

  • 15,8%Π§ΡƒΠ²Π°Π» съм Π·Π° Ρ‚Π°Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ искам Π΄Π° я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ3

  • 10,5%Π§ΡƒΠ²Π°Π» съм Π·Π° Ρ‚Π°Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ Π½Π΅ искам Π΄Π° я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ2

  • 0,0%Използвам Π΄Ρ€ΡƒΠ³Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°0

  • 31,6%Π§ΡƒΠ²Π°ΠΌ Π·Π° нСя Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚6

19 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ гласуваха. 3 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ сС Π²ΡŠΠ·Π΄ΡŠΡ€ΠΆΠ°Ρ…Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster