SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ€ เจธเจฐเจ—เจฐเจฎเฉ€ เจจเจพเจฒ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ เจ‡เฉฑเจ• เจ‰เฉฑเจš เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจฌเจฃเจพเจˆ เจฐเฉฑเจ–เจฃ เจฒเจˆ. เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ VueJs+Typescript, เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจนเฉ‹เจˆเจ†เจ‚เฅค เจ‡เจธ เจฒเจˆ, เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจฆเฉฑเจธเจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ.

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจ…เจธเฉ€เจ‚ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจ‰เฉฑเจชเจฐ เจฒเจฟเจ–เจฟเจ† เจนเฉˆ, เจธเฉ‹เจจเจพเจฐเจ•เจฟเจŠเจฌ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฌเจพเจฐเฉ‡. เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจœเจฟเจนเจพ เจธเจฟเจงเจพเจ‚เจค - เจ‡เจน เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ€ เจนเฉˆ, เจ‰เจจเฉเจนเจพเจ‚ เจฒเจˆ เจœเฉ‹ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจธเฉเจฃ เจฐเจนเฉ‡ เจนเจจ:

เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ (เจธเจพเจฌเจ•เจพ เจธเฉ‹เจจเจพเจฐ) เจจเจฟเจฐเฉฐเจคเจฐ เจจเจฟเจฐเฉ€เจ–เจฃ เจ…เจคเฉ‡ เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจฎเจพเจช เจฒเจˆ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจนเฉˆเฅค
MISRA C, MISRA C++, MITER/CWE เจ…เจคเฉ‡ CERT เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ‹เจกเจฟเฉฐเจ— เจธเจŸเฉˆเจ‚เจกเจฐเจก เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจฎเจฟเจ†เจฐเจพเจ‚ เจฆเฉ‡ เจจเจฟเจฏเจฎเจพเจ‚ เจ…เจจเฉเจธเจพเจฐ เจ•เฉ‹เจก เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจ—เจฒเจคเฉ€ เจ–เฉ‹เจœ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน OWASP เจŸเฉŒเจช 10 เจ…เจคเฉ‡ CWE/SANS เจŸเฉŒเจช 25 เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจคเจฐเฉเจŸเฉ€ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจชเจ›เจพเจฃ เจธเจ•เจฆเจพ เจนเฉˆเฅค
เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจฌเจพเจตเจœเฉ‚เจฆ เจ•เจฟ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจตเฉฑเจ–-เจตเฉฑเจ– เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจŸเฉ‚เจฒเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจธเฉ‹เจจเจพเจฐเจ•เจฟเจŠเจฌ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจกเฉˆเจธเจผเจฌเฉ‹เจฐเจก เจคเฉฑเจ• เจ˜เจŸเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจฆเฉŒเฉœเจพเจ‚ เจฆเจพ เจ‡เจคเจฟเจนเจพเจธ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฟเจ•เจพเจธ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจพเจ… เจฆเฉ‡ เจ†เจฎ เจฐเฉเจเจพเจจ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจนเฉ‹เจฐ เจตเฉ‡เจฐเจตเฉ‡ 'เจคเฉ‡ เจฎเจฟเจฒ เจธเจ•เจฆเฉ‡ เจนเจจ เจธเจฐเจ•เจพเจฐเฉ€ เจตเฉˆเจฌเจธเจพเจˆเจŸ

เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจธเจฎเจฐเจฅเจฟเจค เจนเจจเฅค เจ‰เจชเจฐเฉ‹เจ•เจค เจฒเจฟเฉฐเจ• เจคเฉ‹เจ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡, เจ‡เจน 25 เจคเฉ‹เจ‚ เจตเฉฑเจง เจญเจพเจธเจผเจพเจตเจพเจ‚ เจนเจจเฅค เจ•เจฟเจธเฉ‡ เจ–เจพเจธ เจญเจพเจธเจผเจพ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจšเจฟเจค เจชเจฒเฉฑเจ—เจ‡เจจ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเจฒเฉฑเจ—เจ‡เจจ เจธเจผเจพเจฎเจฒ เจนเฉˆ เจœเจพเจตเจพเจธเจ•เจฐเจฟเจชเจŸ (typeัript เจธเจฎเฉ‡เจค), เจนเจพเจฒเจพเจ‚เจ•เจฟ เจตเจฟเจ•เฉ€ เจ‡เจธ เจฆเฉ‡ เจ‰เจฒเจŸ เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจชเจฟเฉฑเจ›เฉ‡ เจœเจพเจตเจพเจธเจ•เจฐเจฟเจชเจŸ เจชเจฒเฉฑเจ—เจ‡เจจ เจœเจตเจพเจฌ SonarJS, เจŸเจพเจˆเจชเจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจˆ SonarTS เจ•เฉเจฐเจฎเจตเจพเจฐ.

เจ…เจงเจฟเจ•เจพเจฐเจค เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจญเฉ‡เจœเจฃ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ sonarqube-เจธเจ•เฉˆเจจเจฐ, เจœเฉ‹ เจ•เจฟ, เจคเฉ‹เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเฉฐเจฐเจšเจจเจพ-เจซเจพเจ‡เจฒ, เจ‡เจธ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเฉ€ เจนเฉˆ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ เจนเฉ‹เจฐ เจเจ•เฉ€เจ•เจฐเจจ เจ…เจคเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจฒเจˆเฅค

เจ•เจฐเจจ เจฒเจˆ เจœเจพเจตเจพเจธเจ•เจฐเจฟเจชเจŸ เจนเฉˆ npm เจฐเฉˆเจชเจฐ. เจ‡เจธ เจฒเจˆ, เจ†เจ“ เจ•เจฆเจฎ-เจฆเจฐ-เจ•เจฆเจฎ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ ะฒ เจตเฉ€- เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจŸเจพเจˆเจชเจธเจ•เฉเจฐเจฟเจชเจŸ.

เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ เจ†เจ“ เจซเจพเจ‡เจฆเจพ เจ‰เจ เจพเจˆเจ เจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ.

sonar.yaml:

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 .

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ
เจ‡เจธ เจตเจฟเฉฑเจš เจ…เจœเฉ‡ เจคเฉฑเจ• เจ•เฉ‹เจˆ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเจนเฉ€เจ‚ เจนเจจ เจ…เจคเฉ‡ เจ‡เจน เจ‰เจšเจฟเจค เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจฎเฉˆเจ‚ เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐเจค เจ‰เจฆเจพเจนเจฐเจฃ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจฟเจ† VueJS+TS+Jest. เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจตเฉฑเจฒ เจฎเฉ‹เฉœเฉ€เจ:

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

เจชเจนเจฟเจฒเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ เจ•เจฒเจพเจ‡เฉฐเจŸ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ, เจœเจฟเจธเจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ sonar-เจธเจ•เฉˆเจจเจฐเจฒเจˆ 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 - เจชเจคเจพ เจธเฉ‹เจจเจพเจฐ'เจ;
  • sonar.projectKey - เจธเจฐเจตเจฐ 'เจคเฉ‡ เจตเจฟเจฒเฉฑเจ–เจฃ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจธเฉ‹เจจเจพเจฐ'เจ;
  • sonar.projectName - เจ‡เจธเจฆเจพ เจจเจพเจฎ, เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฎเฉ‡เจ‚ เจฌเจฆเจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉเจ†เจฐเจพ เจชเจ›เจพเจฃเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ•เฉเฉฐเจœเฉ€;
  • sonar.sources - เจธเจฐเฉ‹เจคเจพเจ‚ เจตเจพเจฒเจพ เจซเฉ‹เจฒเจกเจฐ, เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจเจฐเฉ‹เจ–เฉ‡, เจชเจฐ เจ•เฉเจ เจตเฉ€ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจซเฉ‹เจฒเจกเจฐ เจฐเฉ‚เจŸ เจซเฉ‹เจฒเจกเจฐ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‰เจน เจซเฉ‹เจฒเจกเจฐ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‹เจ‚ เจธเจ•เฉˆเจจเจฐ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ;
  • sonar.เจŸเฉˆเจธเจŸ - เจ‡เฉฑเจ• เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจœเฉ‹ เจชเจฟเจ›เจฒเฉ‡ เจ‡เฉฑเจ• เจฆเฉ‡ เจจเจพเจฒ เจฎเจฟเจฒ เจ•เฉ‡ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ‰เจน เจซเฉ‹เจฒเจกเจฐ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจŸเฉˆเจธเจŸ เจธเจฅเจฟเจค เจนเจจเฅค เจ‡เจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš, เจ…เจœเจฟเจนเจพ เจ•เฉ‹เจˆ เจซเฉ‹เจฒเจกเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจคเฉ‡ เจŸเฉˆเจธเจŸ เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจŸเฉˆเจธเจŸ เจ•เฉ€เจคเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจฆเฉ‡ เจ…เฉฑเจ—เฉ‡ เจธเจฅเจฟเจค เจนเฉˆเฅคเจŸเฉˆเจธเจŸ', เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจจเฉ‚เฉฐ เจซเจฟเจฒเจนเจพเจฒ เจจเจœเจผเจฐเจ…เฉฐเจฆเจพเจœเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจ…เจ—เจฒเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡;
  • sonar.test.inclusions - เจ‡เฉฑเจ• เจฎเจพเจธเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ เจฎเจพเจฐเจ—, เจ•เจพเจฎเจฟเจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจตเฉฑเจ– เจ•เฉ€เจคเฉ‡ เจ•เจˆ เจคเฉฑเจค เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ;
  • sonar.source เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— - เจธเจฐเฉ‹เจค เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ—เฅค

เจธเจ•เฉˆเจจเจฐ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจฒเจพเจ‚เจš เจฒเจˆ, เจธเจญ เจ•เฉเจ เจคเจฟเจ†เจฐ เจนเฉˆ, เจฎเฉเฉฑเจ– เจชเจฟเจ›เจฒเฉ€ เจ•เจพเจฐเจตเจพเจˆ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡: เจŸเฉˆเจธเจŸ เจ‡เฉฐเจœเจฃ เจจเฉ‚เฉฐ เจ–เฉเจฆ เจฒเจพเจ‚เจš เจ•เจฐเจจเจพ, เจคเจพเจ‚ เจœเฉ‹ เจ‡เจน เจ•เจตเจฐเฉ‡เจœ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจคเจฟเจ†เจฐ เจ•เจฐ เจธเจ•เฉ‡, เจœเจฟเจธ เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจเจฐ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‡เจ—เจพเฅค

เจชเจฐ เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจœเจพเจฃเจ•เจพเจฐเฉ€ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจฒเจˆ เจŸเฉˆเจธเจŸ เจ‡เฉฐเจœเจฃ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš, เจŸเฉˆเจธเจŸ เจ‡เฉฐเจœเจฃ เจนเฉˆ เจนเฉเฉฐเจฆเจพ เจนเฉˆ,. เจ…เจคเฉ‡ เจ‡เจธ เจฆเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจญเจพเจ— เจตเจฟเฉฑเจš เจนเจจ เจชเฉˆเจ•เฉ‡เจœ.เจœเจธเจจ.

เจ†เจ“ เจ‡เจนเจจเจพเจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเฉ€เจ:

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

เจญเจพเจต, เจ…เจธเฉ€เจ‚ เจ•เจตเจฐเฉ‡เจœ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจ…เจคเฉ‡ เจธเจฐเฉ‹เจค (เจ…เจชเจตเจพเจฆเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ) เจœเจฟเจธ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ‡เจน เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ, เจฒเจˆ เจ…เจธเฉ€เจ‚ เจเฉฐเจกเฉ‡ เจจเฉ‚เฉฐ เจ–เฉเจฆ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจ†เจ‰ เจนเฉเจฃ เจŸเฉˆเจธเจŸ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

yarn test

เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ  เจฒเจฟเจ–เจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ•เจพเจฐเจจ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจตเจฟเฉฑเจš เจนเฉ€ เจ•เฉ‹เจˆ เจ•เฉ‹เจก เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเฉ€เจเฅค

HelloWorld.vue:

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

เจ‡เจน เจ•เจตเจฐเฉ‡เจœ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจŸเฉˆเจธเจŸ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจธเจ•เจฐเฉ€เจจ 'เจคเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจ•เจตเจฐเฉ‡เจœ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡เจ–เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจซเฉ‹เจฒเจกเจฐ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ เจ•เจตเจฐเฉ‡เจœ เจ‡เฉฑเจ• เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฒ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจŸเฉˆเจธเจŸ เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ LCOV (LTP GCOV เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ).

เจœเฉ€.เจธเฉ€.เจ“.เจตเฉ€ เจ•เฉ‹เจก เจ•เจตเจฐเฉ‡เจœ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉเจคเฉฐเจคเจฐ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉฐเจกเฉ€ เจ—เจˆ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจนเฉˆเฅค Gcov เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸ เจฒเจˆ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ€ เจธเจนเฉ€ เจธเฉฐเจ–เจฟเจ† เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค Gcov GCC เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐเฉ€ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆเฅค
เจเจฒ.เจธเฉ€.เจ“.เจตเฉ€ - gcov เจฒเจˆ เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธเฅค เจ‡เจน เจ•เจˆ เจธเจฐเฉ‹เจค เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ gcov เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เฉ‹เจก เจ…เจคเฉ‡ เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ HTML เจชเฉฐเจจเจฟเจ†เจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจจเฉˆเจตเฉ€เจ—เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ†เจธเจพเจจ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจชเฉฐเจจเฉ‡ เจตเฉ€ เจฌเจฃเจพเจ เจ—เจ เจนเจจเฅค Lcov เจธเจคเจฐ, เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเจผเจพเจ–เจพเจตเจพเจ‚ เจฆเฉ‡ เจ•เจตเจฐเฉ‡เจœ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเฉ‡ เจฎเฉเจ•เฉฐเจฎเจฒ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจนเฉ‹เจตเฉ‡เจ—เฉ€ coverage/lcov.info.
เจธเจพเจจเฉ‚เฉฐ เจ•เจนเจฟเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจธเฉ‹เจจเจพเจฐ'เจฎเฉˆเจ‚ เจ‡เจน เจ•เจฟเฉฑเจฅเฉ‹เจ‚ เจฒเฉˆ เจธเจ•เจฆเจพ เจนเจพเจ‚? เจ‡เจธ เจฒเจˆ, เจ†เจ“ เจ‡เจธเจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจœเฉ‹เฉœเฉ€เจเฅค เจชเจฐ เจ‡เฉฑเจ• เจฌเจฟเฉฐเจฆเฉ‚ เจนเฉˆ: เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฌเจนเฉ-เจญเจพเจธเจผเจพเจˆ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ, เจฏเจพเจจเฉ€ เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจเจฐเฉ‹เจ–เฉ‡ เจ•เจˆ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเจˆ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจนเจจ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‚เจœเฉ€ เจจเจพเจฒ เจฎเจพเจจเจคเจพ เจชเฉเจฐเจพเจชเจค เจนเฉˆ, เจ…เจคเฉ‡ เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‚เจœเฉ‡ เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ‡เจธเจฆเฉ‡ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– เจฅเจพเจตเจพเจ‚ 'เจคเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจนเจฐเฉ‡เจ• เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจ‡เจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ†เจชเจฃเจพ เจธเฉˆเจ•เจธเจผเจจ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจธเจพเจกเจพ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฐเจคเจฆเจพ เจนเฉˆ เจŸเจพเจˆเจชเจธเจ•เฉเจฐเจฟเจชเจŸ, เจ‡เจธ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉˆเจŸเจฟเฉฐเจ— เจธเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

sonar-project.properties:

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

เจธเจ•เฉˆเจจเจฐ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจฒเจพเจ‚เจš เจฒเจˆ เจธเจญ เจ•เฉเจ เจคเจฟเจ†เจฐ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจจเฉ‹เจŸ เจ•เจฐเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆ เจธเฉ‹เจจเจพเจฐ'e เจ†เจชเจฃเฉ‡ เจ†เจช เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจ•เจฟเจธเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฒเจˆ เจธเจ•เฉˆเจจเจฐ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเฉ‹เฅค เจฌเจพเจ…เจฆ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš, เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเฉ€ เจ—เจคเฉ€เจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจฃ เจฒเจˆ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ‡เจ•เฉฑเจ เฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจ‡เจธ เจฒเจˆ, เจ†เจ“ เจชเจนเจฟเจฒเจพเจ‚ เจฌเจฃเจพเจˆ เจ—เจˆ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ€เจ เจชเฉˆเจ•เฉ‡เจœ.เจœเจธเจจ:

yarn run sonar 

เจจเฉ‹เจŸ: เจคเฉเจธเฉ€เจ‚ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจตเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ -X เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฒเฉŒเจ—เจฟเฉฐเจ— เจฒเจˆเฅค

เจœเฉ‡เจ•เจฐ เจธเจ•เฉˆเจจเจฐ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจคเจพเจ‚ เจธเจ•เฉˆเจจเจฐ เจฆเฉ€ เจฌเจพเจˆเจจเจฐเฉ€ เจชเจนเจฟเจฒเจพเจ‚ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจน เจšเจพเจฒเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ เจธเฉ‹เจจเจพเจฐเจ‡เฉฐเจธเจŸเจพเจฒ เจ•เฉ€เจคเฉ‡ เจชเจฒเฉฑเจ—เจ‡เจจเจพเจ‚ เจฒเจˆ, เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจฐเจฅเจฟเจค เจญเจพเจธเจผเจพ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธเจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจฒเจˆ เจ•เจˆ เจนเฉ‹เจฐ เจฎเจพเจชเจฆเฉฐเจก เจตเฉ€ เจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ: เจ—เฉเจฃเจตเฉฑเจคเจพ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ, เจ•เจฟเจฐเจฟเจ†เจธเจผเฉ€เจฒ เจจเจฟเจฏเจฎ, เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€, เจธเจฐเจตเจฐ เจจเจฟเจฏเจฎ.

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจจเฉ‹เจŸ: เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจฆเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‰เจนเจจเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจธเจคเจพเจฐ เจจเจพเจฒ เจจเจนเฉ€เจ‚ เจตเจฟเจšเจพเจฐเจพเจ‚เจ—เฉ‡, เจชเจฐ เจคเฉเจธเฉ€เจ‚ เจนเจฎเฉ‡เจธเจผเจพ เจ…เจงเจฟเจ•เจพเจฐเจค เจธเจฐเฉ‹เจคเจพเจ‚ เจจเจพเจฒ เจธเฉฐเจชเจฐเจ• เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ…เฉฑเจ—เฉ‡, เจซเฉ‹เจฒเจกเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจเจฐเฉ‹เจ–เฉ‡ เจธเจญ เจฒเจˆ เจธเจฐเฉ‹เจค เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจ‰เจชเจฒเจฌเจงเจคเจพ เจฒเจˆ (เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจ–เจพเจธ เจธเจชเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ) เจธเจฎเจฐเจฅเจฟเจค เจญเจพเจธเจผเจพ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฌเจพเจ…เจฆ เจฆเฉ‡ เจ‡เฉฐเจกเฉˆเจ•เจธเจฟเฉฐเจ— เจฆเฉ‡ เจจเจพเจฒเฅค

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ…เฉฑเจ—เฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจนเฉ‹เจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจœเจฟเจจเฉเจนเจพเจ‚ 'เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจงเจฟเจ†เจจ เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฒเจฟเจจเจŸเจฟเฉฐเจ—, เจ•เฉ‹เจก เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃเจพ, เจ†เจฆเจฟ)เฅค

เจธเจ•เฉˆเจจเจฐ เจฆเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจฌเจฟเจฒเจ•เฉเจฒ เจ…เฉฐเจค 'เจคเฉ‡, เจธเจพเจฐเฉ€ เจ‡เจ•เฉฑเจคเจฐ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจชเฉเจฐเจพเจฒเฉ‡เจ–เจฌเฉฑเจง เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจตเฉˆเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เฉ€ เจนเฉ‹เจ‡เจ† เจนเฉˆ:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ•เฉเจ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ, เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเฉ€ เจ•เจตเจฐเฉ‡เจœ เจตเฉ€ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจธเจพเจกเฉ‡ เจจเจพเจฒ เจฎเฉ‡เจฒ เจจเจนเฉ€เจ‚ เจ–เจพเจ‚เจฆเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ,-เจฐเจฟเจชเฉ‹เจฐเจŸ.

เจ†เจ“ เจ‡เจธ เจจเฉ‚เฉฐ เจฌเจพเจนเจฐ เจ•เฉฑเจขเฉ€เจเฅค เจ†เจ‰ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเจฟเจธเจคเจพเจฐ เจตเจฟเฉฑเจš เจตเฉ‡เจ–เฉ€เจ, เจ•เจตเจฐเฉ‡เจœ เจฎเฉเฉฑเจฒ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเจฟเจธเจคเฉเจฐเจฟเจค เจซเจพเจˆเจฒ เจฐเจฟเจชเฉ‹เจฐเจŸ เจตเจฟเฉฑเจš "เจซเจพเจฒ เจŸเฉ‚" เจ•เจฐเฉ‹:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจ–, เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจซเจพเจˆเจฒ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ HelloWorld.vue, เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจตเฉ€ เจนเฉˆ main.ts, เจœเฉ‹ เจ•เจตเจฐเฉ‡เจœ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจคเจธเจตเฉ€เจฐ เจจเฉ‚เฉฐ เจตเจฟเจ—เจพเฉœเจฆเจพ เจนเฉˆเฅค เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจจเฉ‚เฉฐ เจ•เจตเจฐเฉ‡เจœ เจฆเฉ€ เจ—เจฃเจจเจพ เจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจพเจนเจฐ เจฐเฉฑเจ–เจฟเจ†. เจนเจพเจ‚, เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจนเฉˆ, เจชเจฐ เจ‡เจน เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจธเฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ,, เจชเจฐ เจธเจ•เฉˆเจจเจฐ เจจเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เฉ€เจคเจพ, เจ‡เจธเจฒเจˆ เจ‡เจน เจ‡เจธเจฆเฉ€ เจ—เจฃเจจเจพ เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉ‹ เจ—เจฟเจ†เฅค

เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเฉ€เจ:

sonar-project.properties:

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

เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจธเจชเจธเจผเจŸเฉ€เจ•เจฐเจจ เจฆเฉ‡เจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ: เจ‡เจธ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจ—เจ เจซเฉ‹เจฒเจกเจฐเจพเจ‚ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเจฟเฉฑเจš เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจธเจพเจฐเฉ‡ เจซเฉ‹เจฒเจกเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ† เจนเฉˆ sonar.test.inclusions.

เจธเจ•เฉˆเจจเจฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจธเจนเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ†เจ“ เจ…เจ—เจฒเจพ เจจเฉเจ•เจคเจพ เจตเฉ‡เจ–เฉ€เจ - เจ—เฉเจฃเจตเฉฑเจคเจพ เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ. เจฎเฉˆเจ‚ เจธเจฎเจฐเจฅเจจ เจฌเจพเจฐเฉ‡ เจ‰เฉฑเจชเจฐ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจนเฉˆ เจธเฉ‹เจจเจพเจฐ'เจ“เจฎ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ•เจˆ เจญเจพเจธเจผเจพเจตเจพเจ‚เฅค เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจ‰เจนเฉ€ เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ– เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจชเจฐ เจ…เจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ TS, เจคเจพเจ‚ เจ•เจฟเจ‰เจ‚ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจนเฉ‡เจฐเจพเจซเฉ‡เจฐเฉ€ เจ…เจคเฉ‡ เจœเจพเจ‚เจšเจพเจ‚ เจจเจพเจฒ เจธเจ•เฉˆเจจเจฐ เจจเฉ‚เฉฐ เจฆเจฌเจพเจ“เฅค เจ…เจธเฉ€เจ‚ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจœเฉ‹เฉœ เจ•เฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ เจญเจพเจธเจผเจพ เจธเฉˆเจŸ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจธเฉ‹เจจเจพเจฐ'เจ:

sonar-project.properties:

...
sonar.language=ts
...

เจšเจฒเฉ‹ เจธเจ•เฉˆเจจเจฐ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจจเจคเฉ€เจœเจพ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ•เจตเจฐเฉ‡เจœ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ–เจคเจฎ เจนเฉ‹ เจ—เจˆ เจธเฉ€เฅค

เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจธเจ•เฉˆเจจเจฐ เจฒเฉŒเจ— เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจฒเจพเจˆเจจ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจญเจพเจต, เจธเจพเจกเฉ€เจ†เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‡เฉฐเจกเฉˆเจ•เจธ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจธเจฅเจฟเจคเฉ€ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉˆ: เจ…เจงเจฟเจ•เจพเจฐเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจนเจฟเจฏเฉ‹เจ—เฉ€ VueJs เจชเจฒเฉฑเจ—เจ‡เจจ เจตเจฟเฉฑเจš เจนเฉˆ SonarJSเจœเฉ‹ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆ เจœเจพเจตเจพเจธเจ•เจฐเจฟเจชเจŸ.

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจชเจฐ เจ‡เจน เจธเจฎเจฐเจฅเจจ เจชเจฒเฉฑเจ—เจ‡เจจ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉˆ SonarTS เจจเฉ‚เฉฐ TS, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจฌเฉฑเจ— เจŸเจฐเฉˆเจ•เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ…เจงเจฟเจ•เจพเจฐเจค เจŸเจฟเจ•เจŸ เจ–เฉ‹เจฒเฉเจนเจฟเจ† เจ—เจฟเจ† เจธเฉ€ เจธเฉ‹เจจเจพเจฐ'เจ:

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

เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, SonarQube เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ‡ เจ•เฉเจ เจœเจตเจพเจฌ เจ‡เฉฑเจฅเฉ‡ เจนเจจเฅค

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจชเจฐ เจนเจฐ เจšเฉ€เจœเจผ เจธเจพเจกเฉ‡ เจฒเจˆ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจคเฉเจธเฉ€เจ‚ เจ‡เจคเจฐเจพเจœเจผ เจ•เจฐเจฆเฉ‡ เจนเฉ‹. เจนเจพเจ‚ เจ‡เจน เจนเฉˆ, เจ†เจ“ เจ‡เจธ เจจเฉ‚เฉฐ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ "เจนเฉˆเจ•".
เจœเฉ‡ เจธเจนเจพเจฐเจพ เจนเฉˆ .vue-เจซเจพเจ‡เจฒเจพเจ‚ เจธเฉ‹เจจเจพเจฐ'เจ“, เจซเจฟเจฐ เจ†เจ“ เจ‰เจธ เจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจ•เจฟ เจ‰เจน เจ‰เจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเจเฉ‡ เจŸเจพเจˆเจชเจธเจ•เฉเจฐเจฟเจชเจŸ.

เจ†เจ“ เจ‡เฉฑเจ• เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจœเฉ‹เฉœเฉ€เจ:

sonar-project.properties:

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

เจ†เจ‰ เจธเจ•เฉˆเจจเจฐ เจฒเจพเจ‚เจš เจ•เจฐเฉ€เจ:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ…เจคเฉ‡, เจตเฉ‹เจ‡เจฒเจพ, เจธเจญ เจ•เฉเจ เจ†เจฎ เจตเจพเจ‚เจ— เจนเฉˆ, เจ…เจคเฉ‡ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฆเฉ‡ เจจเจพเจฒ เจŸเจพเจˆเจชเจธเจ•เฉเจฐเจฟเจชเจŸ. เจญเจพเจต, เจ…เจธเฉ€เจ‚ เจธเจฎเจฐเจฅเจจ เจตเจฟเฉฑเจš เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เจพเจฎเจฏเจพเจฌ เจนเฉ‹เจ VueJs+TS เจจเฉ‚เฉฐ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ.

เจ†เจ“ เจ…เฉฑเจ—เฉ‡ เจœเจพเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจ…เจคเฉ‡ เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจธเฉเจงเจพเจฐเฉ€เจเฅค

เจ…เจธเฉ€เจ‚ เจนเฉเจฃ เจคเฉฑเจ• เจ•เฉ€ เจ•เฉ€เจคเจพ เจนเฉˆ:

  • เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ‹เจจเจพเจฐ- เจธเจ•เฉˆเจจเจฐ;
  • เจธเจฅเจพเจชเจจเจพ เจ•เจฐเจจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ•เจตเจฐเฉ‡เจœ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ;
  • เจธเฉฐเจฐเจšเจฟเจค เจธเฉ‹เจจเจพเจฐ- เจธเจ•เฉˆเจจเจฐ;
  • เจธเจนเจพเจ‡เจคเจพ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ .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

เจฌเฉ‡เจธเจผเฉฑเจ•, เจธเจพเจกเฉ€ เจ•เจตเจฐเฉ‡เจœ เจกเจฟเฉฑเจ— เจœเจพเจตเฉ‡เจ—เฉ€, เจชเจฐ เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ.

เจ•เฉ‹เจก เจฆเฉ€เจ†เจ‚ เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจŸเจฟเฉฐเจ— เจฒเจพเจˆเจจเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจพเจ‚เจ—เฉ‡ เจธเฉ€.เจชเฉ€.เจกเฉ€.- เจ‰เจชเจฏเฉ‹เจ—เจคเจพ - jscpd:

npx jscpd src

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ•เฉ‹เจก เจฆเฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจฒเจˆ:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจธเจผเจพเจ‡เจฆ เจ‡เจน เจญเจตเจฟเฉฑเจ– เจฆเฉ‡ เจชเจฒเฉฑเจ—เจ‡เจจ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจนเฉฑเจฒ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ 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

เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เฉ€ เจฌเจฆเจฒเจฟเจ† เจนเฉˆ เจธเฉ‹เจจเจพเจฐ'เจ:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจ…เจคเฉ‡ เจ•เฉเจ เจตเฉ€ เจจเจนเฉ€เจ‚ เจฌเจฆเจฒเจฟเจ† เจนเฉˆ. เจ…เจธเจฒเฉ€เจ…เจค เจ‡เจน เจนเฉˆ เจ•เจฟ เจธเฉ‹เจจเจพเจฐ เจœเฉˆเจธเจŸ เจฐเจฟเจชเฉ‹เจฐเจŸ เจตเจฟเฉฑเจš เจฆเฉฑเจธเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจซเจพเจˆเจฒเจพเจ‚ เจจเจนเฉ€เจ‚ เจฎเฉฐเจจเจฆเจพ เจฏเฉ‚เจจเจฟเจŸ-เจŸเฉˆเจธเจŸ. เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจธเฉ‹เจจเจพเจฐ sonar.เจŸเฉˆเจธเจŸ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจŸเฉˆเจธเจŸเจพเจ‚ เจตเจพเจฒเฉ‡ เจซเฉ‹เจฒเจกเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจชเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเจฐเจธเจพเจตเจพเจ‚เจ—เฉ‡ (เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉเจฃเฉ‡ เจฒเจˆ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจนเฉˆ):

sonar-project.properties:

โ€ฆ
sonar.tests=src/components/__tests__
โ€ฆ

เจ†เจ‰ เจธเจ•เฉˆเจจเจฐ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ€เจ:

yarn run sonar

เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ•เฉ€ เจฌเจฆเจฒเจฟเจ† เจนเฉˆ:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ‡เจ–เฉ€ เจนเฉˆ เจฏเฉ‚เจจเจฟเจŸ-เจŸเฉˆเจธเจŸ เจ…เจคเฉ‡, เจ…เฉฐเจฆเจฐ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจ•เฉ‡ เจ…เจธเจซเจฒ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจธ เจจเฉฐเจฌเจฐ เจฆเฉ€ เจตเฉฐเจก เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

SonarQube เจจเจพเจฒ VueJS+TS เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจธเจฟเฉฑเจŸเจพ

เจ‡เจธ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจจเจฟเจฐเฉฐเจคเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจงเจจ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฟเจ† เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ. เจ…เจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เฉ€เจคเจพ VueJs+TS. เจ•เฉเจ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค เจ…เจธเฉ€เจ‚ เจŸเฉˆเจธเจŸ เจ•เจตเจฐเฉ‡เจœ เจธเฉ‚เจšเจ• เจฆเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจตเจงเจพเจ‡เจ† เจนเฉˆเฅค เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจฒเจˆ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจฎเจพเจชเจฆเฉฐเจก (เจธเจผเจพเจ‡เจฆ เจฎเฉเฉฑเจ– เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ•) เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจนเฉˆ, เจชเจฐ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจœเจพเจ‚เจš เจธเจฎเฉ‡เจค เจนเฉ‹เจฐ เจ—เฉเจฃเจตเฉฑเจคเจพ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเจฐ เจ‡เจน เจธเจพเจฐเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ‰เจชเจฒเจฌเจง เจจเจนเฉ€เจ‚ เจนเจจ เจญเจพเจˆเจšเจพเจฐเฉ‡-เจตเจฐเจœเจจ. เจฆเจฟเจฒเจšเจธเจช เจ…เจคเฉ‡ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจเจ•เฉ€เจ•เจฐเจฃ เจนเฉˆ เจธเฉ‹เจจเจพเจฐเจ•เจฏเฉ‚เจฌ เจตเฉฑเจ–-เจตเฉฑเจ– เจ•เฉ‹เจก เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจชเฉเจฐเจฌเฉฐเจงเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ GitLab เจ…เจคเฉ‡ BitBucketเฅค เจฐเฉ‹เจ•เจฃ เจฒเจˆ เจ…เจญเฉ‡เจฆ เจ–เจฟเฉฑเจš (เจฎเจฟเจฒเจฃ) เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€'a เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ€ เจฎเฉเฉฑเจ– เจธเจผเจพเจ–เจพ เจจเฉ‚เฉฐ เจœเจฆเฉ‹เจ‚ เจ•เจตเจฐเฉ‡เจœ เจ˜เจŸ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจชเจฐ เจ‡เจน เจ‡เฉฑเจ• เจฌเจฟเจฒเจ•เฉเจฒ เจตเฉฑเจ–เจฐเฉ‡ เจฒเฉ‡เจ– เจฒเจˆ เจ‡เฉฑเจ• เจ•เจนเจพเจฃเฉ€ เจนเฉˆ.

PS: เจ•เฉ‹เจก เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจตเจฐเจฃเจฟเจค เจนเจฐ เจšเฉ€เจœเจผ เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉˆ เจฎเฉ‡เจฐเจพ เจ•เจพเจ‚เจŸเจพ.

เจธเจฟเจฐเจซเจผ เจฐเจœเจฟเจธเจŸเจฐเจก เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจนเฉ€ เจธเจฐเจตเฉ‡เจ–เจฃ เจตเจฟเฉฑเจš เจนเจฟเฉฑเจธเจพ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจธเจพเจˆเจจ - เจ‡เจจ, เจคเฉเจนเจพเจกเจพ เจธเฉเจ†เจ—เจค เจนเฉˆ.

เจ•เฉ€ เจคเฉเจธเฉ€เจ‚ SonarQube เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹:

  • 26,3%เจนเจพเจ‚5

  • 15,8%เจจเฉฐ 3

  • 15,8%เจฎเฉˆเจ‚ เจ‡เจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฌเจพเจฐเฉ‡ เจธเฉเจฃเจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ 3 เจจเฉ‚เฉฐ เจตเจฐเจคเจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚

  • 10,5%เจฎเฉˆเจ‚ เจ‡เจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฌเจพเจฐเฉ‡ เจธเฉเจฃเจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจฎเฉˆเจ‚ 2 เจจเฉ‚เฉฐ เจตเจฐเจคเจฃเจพ เจจเจนเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเจพ/เจšเจพเจนเฉเฉฐเจฆเฉ€

  • 0,0%เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 0 เจตเจฐเจค เจฐเจฟเจนเจพ/เจฐเจนเฉ€ เจนเจพเจ‚

  • 31,6%เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจฎเฉˆเจ‚ เจ‰เจธ เจฌเจพเจฐเฉ‡ เจธเฉเจฃเจฟเจ† เจนเฉˆ 6

19 เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‡ เจตเฉ‹เจŸ เจชเจพเจˆเฅค 3 เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจชเจฐเจนเฉ‡เจœเจผ เจฐเจนเฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹