Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 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 Π΅Π·ΠΈΠΊΠ°. Π—Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π΅Π·ΠΈΠΊ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС инсталира ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ плъгин. Π’ community вСрсията Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ плъгин Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Javascript (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ typesсript), Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π² wiki Π΅ написано ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ. Π—Π° Javascript отговаря плъгина SonarJS, Π·Π° Typescript SonarTS ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

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

Π—Π° Javascript ΠΈΠΌΠ° 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).

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Π·Π° установСни плъгини, изчислявайки ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°: качСство ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 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

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

sonar-project.properties:

...
sonar.language=ts
...

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

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

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

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

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

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

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

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 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

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

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

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

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

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

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° рСализация Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с TS (SonarTS) няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ CPD (Copy Paste Detector) ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄ .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, ΠΊΠΎΠ΅Ρ‚ΠΎ мисля, Ρ‡Π΅ Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ.

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

Π”ΠΎΠΊΠ°Ρ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ с тСстовС Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, Π·Π° цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² частност. Но ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π» с информация Π·Π° броя 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: Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ описано Π² статията ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄, Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎ Π² моят fork.

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

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° 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