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

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

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

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

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

ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ сайт

ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ сС голям Π±Ρ€ΠΎΠΉ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. БъдСйки ΠΏΠΎ информацията ΠΎΡ‚ Π»ΠΈΠ½ΠΊΠ° ΠΏΠΎ-Π³ΠΎΡ€Π΅, Ρ‚ΠΎΠ²Π° са ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 25 Π΅Π·ΠΈΠΊΠ°. Π—Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π΅Π·ΠΈΠΊ, трябва Π΄Π° инсталиратС ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ плъгин. ВСрсията Π½Π° общността Π²ΠΊΠ»ΡŽΡ‡Π²Π° плъгин Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Javascript (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ typeсript), Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΡƒΠΈΠΊΠΈΡ‚ΠΎ ΠΊΠ°Π·Π²Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ. ΠžΡ‚Π·Π°Π΄ Javascript плъгин ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ SonarJS, Π·Π° Typescript SonarTS ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

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

Π—Π° Javascript ΠΈΠΌΠ° npm ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°. И Ρ‚Π°ΠΊΠ°, Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° внСдряванСто soundQube Π² Vue-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ написан Π½Π° ΠΏΠΈΡˆΠ΅Ρ‰Π° машина.

Π—Π° Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€ soundQube Π΄Π° сС възползвамС Π΄ΠΎΠΊΠ΅Ρ€-Π½ΠΎΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.

сонар.yaml:

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

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

docker-compose -f sonar.yml up

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° soundQube Ρ‰Π΅ бъдС Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°: http://localhost:9001 .

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ VueJS+TS със SonarQube
Π’ Π½Π΅Π³ΠΎ всС ΠΎΡ‰Π΅ няма ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ справСдливо. НиС Ρ‰Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ ситуация. Π’Π·Π΅Ρ… официалния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° VueJS+TS+Jest. НСка Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΠΌ към сСбС си:

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

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° инсталирамС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° soundQubeΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½Π°Ρ€ΠΈΡ‡Π° сонар-скСнСрза NPM ΠΈΠΌΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°:

yarn add sonarqube-scanner

И Π²Π΅Π΄Π½Π°Π³Π° Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° към скриптовС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½Π΅Π³ΠΎ.

package.json:

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

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

sonar-project.properties:

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

  • sonar.host.url - адрСс Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€'A;
  • sonar.projectKey – ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€'A;
  • sonar.projectName – ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΌΡƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° с projectKey;
  • сонар.ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ – ΠΏΠ°ΠΏΠΊΠ° с ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ‚ΠΎΠ²Π° SRC, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС всичко. Π’Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° спрямо основната ΠΏΠ°ΠΏΠΊΠ°, която Π΅ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π°, ΠΎΡ‚ която сС стартира ΡΠΊΠ΅Π½Π΅Ρ€ΡŠΡ‚;
  • сонар.тСстовС – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΡŠΡ€Π²ΠΈ Π² Ρ‚Π°Π½Π΄Π΅ΠΌ с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ. Π’ΠΎΠ²Π° Π΅ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π°, Π² която сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ тСстовСтС. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ няма Ρ‚Π°ΠΊΠ°Π²Π° ΠΏΠ°ΠΏΠΊΠ° ΠΈ Ρ‚Π΅ΡΡ‚ΡŠΡ‚ сС Π½Π°ΠΌΠΈΡ€Π° Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ сС тСства Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° 'тСст', Ρ‚Π°ΠΊΠ° Ρ‡Π΅ засСга Ρ‰Π΅ Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ слСдващия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€;
  • сонар.тСст.Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ – ΠΏΡŠΡ‚ Π·Π° тСстовС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° маска, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° няколко Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ със Π·Π°ΠΏΠ΅Ρ‚Π°ΠΈ;
  • sonar.sourceEncoding – ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

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

Но Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ тСстовата машина Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ‚Π°Π·ΠΈ информация. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ тСстовият Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Π΅ ΠΈΠΌΠ°. А настройкитС ΠΌΡƒ са Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Ρ€Π°Π·Π΄Π΅Π» Π½Π° Ρ„Π°ΠΉΠ»Π° 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 Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅).

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

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

sonar-project.properties:

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

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

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

yarn run sonar 

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° -X Π·Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рСгистриранС.

Ако ΡΠΊΠ΅Π½Π΅Ρ€ΡŠΡ‚ Π΅ стартиран Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ двоичният Ρ„Π°ΠΉΠ» Π½Π° самия скСнСр. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° стартира ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° сканира ΡΡŠΡ€Π²ΡŠΡ€Π° Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€'a Π·Π° инсталирани Π΄ΠΎΠ±Π°Π²ΠΊΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ сС изчислява ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡΡ‚ Π΅Π·ΠΈΠΊ. Π—Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ сС ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΌΡƒ: качСствСни ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

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

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

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

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

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

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

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

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

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

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Π½Π΅Ρ‰ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° някакво ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅, Π½ΠΎ Π½Π΅ съвпада с Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°- Π΄ΠΎΠΊΠ»Π°Π΄.

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

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

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

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

sonar-project.properties:

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

Π‘ΠΈΡ… искал Π΄Π° направя пояснСниС: Π² допълнСниС към ΠΏΠ°ΠΏΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са посочСни Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, сС добавят ΠΈ всички ΠΏΠ°ΠΏΠΊΠΈ, ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° сонар.тСст.Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ.

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

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

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

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ слСдващата Ρ‚ΠΎΡ‡ΠΊΠ° - ΠšΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ. По-Π³ΠΎΡ€Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π½Π° няколко Π΅Π·ΠΈΠΊΠ° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ²Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅. Но Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ написан TS, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π°Ρ‰ΠΎ Π΄Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Ρ‚Π΅ скСнСра с Π½Π΅Π½ΡƒΠΆΠ½ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π©Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ Π΅Π·ΠΈΠΊΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ към конфигурационния Ρ„Π°ΠΉΠ» Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€β€žΠ:

sonar-project.properties:

...
sonar.language=ts
...

НСка пуснСм ΠΎΡ‚Π½ΠΎΠ²ΠΎ скСнСра ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°:

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

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

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

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

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

Битуацията Π΅ слСдната: ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° VueJs Π΅ Π² плъгина SonarJSΠΊΠΎΠΉ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Javascript.

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

Но Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π΅ Π΅ Π² плъгина SonarTS Π·Π° TS, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ бСшС ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ Π±ΠΈΠ»Π΅Ρ‚ Π² инструмСнта Π·Π° прослСдяванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€β€žΠ:

  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-project.properties:

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

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

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

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

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

Какво смС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ досСга:

  • Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ към ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€-скСнСр;
  • настройвам ΠΈΠΌΠ° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° информация Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅;
  • ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€-скСнСр;
  • Ρ€Π΅ΡˆΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° .vue-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ + написан Π½Π° ΠΏΠΈΡˆΠ΅Ρ‰Π° машина.

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

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

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

Π‘Π΅Π³Π° исках Π΄Π° обмисля Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° подобряванС Π½Π° информацията Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ.

ДосСга ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ тСстовото ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈ Π·Π° цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎ-спСциално Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅. Но Π΅ възмоТно Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π» Π΄Π° сС Ρ€Π°Π·ΡˆΠΈΡ€ΠΈ с информация Π·Π° количСството Π΅Π΄ΠΈΠ½ΠΈΡ†Π°-тСстовС Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² контСкста Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Има Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, която ΠΌΠΎΠΆΠ΅ ΠΈΠΌΠ°-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€β€žΠ:
ΠΎΠ±Ρ‰ΠΈ тСстови Π΄Π°Π½Π½ΠΈ - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

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

yarn add jest-sonar-reporter

И Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ към конфигурацията ΠΈΠΌΠ°:

package.json:

…
"testResultsProcessor": "jest-sonar-reporter"
…

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

yarn test

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

НСка Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² конфигурацията Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€β€žΠ:

sonar-project.properties:

…
sonar.testExecutionReportPaths=test-report.xml
…

И рСстартирайтС скСнСра:

yarn run sonar

НСка Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ Π² интСрфСйса Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€β€žΠ:

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

И Π½ΠΈΡ‰ΠΎ Π½Π΅ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ Sonar Π½Π΅ счита Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, описани Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π° Jest, Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°-тСстовС. Π—Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ ситуация, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ конфигурационния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π₯ΠΈΠ΄Ρ€ΠΎΠ»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ сонар.тСстовС, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ посочим ΠΏΠ°ΠΏΠΊΠΈΡ‚Π΅ с тСстовС (засСга ΠΈΠΌΠ°ΠΌΠ΅ само Π΅Π΄Π½Π°):

sonar-project.properties:

…
sonar.tests=src/components/__tests__
…

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

yarn run sonar

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

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

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

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

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

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

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

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

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

  • 26,3%Π΄Π° 5

  • 15,8%No3

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

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

  • 0,0%Използвам Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°0

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

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€