SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดžเด™เตเด™เดณเตเดŸเต† เดœเต‹เดฒเดฟเดฏเดฟเตฝ เดžเด™เตเด™เตพ เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เดธเดœเต€เดตเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเตฝ เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดพเตป. เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เดณเดฟเดฒเตŠเดจเตเดจเต เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ VueJs+ เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต, เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด‰เดฏเตผเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เด…เดต เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดžเตเดžเตเดตเต†เดจเตเดจเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดžเดพเตป เดฎเตเด•เดณเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดคเตเดชเต‹เดฒเต†, เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚. เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดธเดฟเดฆเตเดงเดพเดจเตเดคเด‚ - เด‡เดคเต เดชเตŠเดคเตเดตเต† เดŽเดจเตเดคเดพเดฃเต, เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต:

เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต (เดฎเตเตป เดธเต‹เดจเดพเตผ) เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด•เตเด•เตเด‚ เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เด…เดณเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดพเดฃเต.
MISRA C, MISRA C++, MITER/CWE, CERT เดธเต†เด•เตเดฏเต‚เตผ เด•เต‹เดกเดฟเด‚เด—เต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดจเดฟเดฏเดฎเด™เตเด™เตพเด•เตเด•เดจเตเดธเตƒเดคเดฎเดพเดฏเดฟ เด•เต‹เดกเต เดตเดฟเดถเด•เดฒเดจเดตเตเด‚ เดชเดฟเดถเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดฒเตเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเต OWASP เดŸเต‹เดชเตเดชเต 10, CWE/SANS เดŸเต‹เดชเตเดชเต 25 เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดชเดฟเดถเด•เตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเดฟเดถเด•เตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.
เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚ เดตเดฟเดตเดฟเดง เดฑเต†เดกเดฟเดฎเต†เดฏเตโ€Œเดกเต เดŸเต‚เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเต เดซเดฒเด™เตเด™เตพ เด’เดฐเตŠเดฑเตเดฑ เดกเดพเดทเตโ€Œเดฌเต‹เตผเดกเดฟเดฒเต‡เด•เตเด•เต เดšเตเดฐเตเด•เตเด•เตเดจเตเดจเต, เดฑเดฃเตเดฃเตเด•เดณเตเดŸเต† เดšเดฐเดฟเดคเตเดฐเด‚ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเตเดตเดดเดฟ เดตเดฟเด•เดธเดจ เดธเดฎเดฏเดคเตเดคเต เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเดคเตเดคเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดชเตŠเดคเตเดตเดพเดฏ เดชเตเดฐเดตเดฃเดค เด•เดพเดฃเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเต

เดงเดพเดฐเดพเดณเด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เตพ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดฎเตเด•เดณเดฟเดฒเต† เดฒเดฟเด™เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดตเดฟเดฒเดฏเดฟเดฐเตเดคเตเดคเดฟเดฏเดพเตฝ, เด‡เดต 25-เดฒเดงเดฟเด•เด‚ เดญเดพเดทเด•เดณเดพเดฃเต. เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดญเดพเดทเดฏเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด‰เดšเดฟเดคเดฎเดพเดฏ เดชเตเดฒเด—เดฟเตป เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดฃเด‚. เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟ เดชเดคเดฟเดชเตเดชเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดฒเด—เดฟเตป เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต เดเดฃเดพเดฌเตเดฒเต† (เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‰เตพเดชเตเดชเต†เดŸเต†), เดตเดฟเด•เตเด•เดฟ เดชเดฑเดฏเตเดจเตเดจเดคเต เดตเดฟเดชเดฐเต€เดคเดฎเดพเดฃเต. เดชเดฟเดจเตเดจเดฟเตฝ เดเดฃเดพเดฌเตเดฒเต† เดชเตเดฒเด—เดฟเตป เด‰เดคเตเดคเดฐเด™เตเด™เตพ เดธเต‹เดจเดพเตผเดœเต†เดŽเดธเต, เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเต เดธเต‹เดฃเดพเตผเดŸเดฟเดŽเดธเต เดฏเดฅเดพเด•เตเดฐเดฎเด‚

เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด”เดฆเตเดฏเต‹เด—เดฟเด• เด•เตเดฒเดฏเดจเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต sonarqube-เดธเตเด•เดพเดจเตผ, เด‡เดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต config-file, เดˆ เดกเดพเดฑเตเดฑ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต เด•เต‚เดŸเตเดคเตฝ เดเด•เต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดฒเดฟเดจเตเด‚.

เดตเต‡เดฃเตเดŸเดฟ เดเดฃเดพเดฌเตเดฒเต† เด†เด•เตเดจเตเดจเต npm เดฑเดพเดชเตเดชเตผ. เด…เดคเดฟเดจเดพเตฝ, เดจเดฎเตเด•เตเด•เต เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเตเดณเตเดณ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚ เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต ะฒ เดตเตเดฏเต‚- เดชเดฆเตเดงเดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต.

เดธเต†เตผเดตเตผ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเตป เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต เดจเดฎเตเด•เตเด•เต เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚ เดกเต‹เด•เตเด•เตผ-เดฐเดšเดฟเด•เตเด•เตเด•.

เดธเต‹เดฃเดพเตผ.เดฏเดพเด‚เดŽเตฝ:

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

เด†เดฆเตเดฏเด‚ เดจเดฎเตเดฎเตพ เด•เตเดฒเดฏเดจเตเดฑเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดฃเด‚ เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต, เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เดธเต‹เดฃเดพเตผ-เดธเตเด•เดพเดจเตผเด•เดพเดฐเดฃเด‚ npm เด’เดฐเต เดฑเดพเดชเตเดชเตผ เด‰เดฃเตเดŸเต:

yarn add sonarqube-scanner

เด‰เดŸเดจเต† เด•เดฎเดพเตปเดกเต เดšเต‡เตผเด•เตเด•เตเด• เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เด…เดคเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป.

package.json:

{
 โ€ฆ 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 โ€ฆ
}

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดธเตเด•เดพเดจเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดซเดฏเดฒเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดจเดฎเตเด•เตเด•เต เด…เดŸเดฟเดธเตเดฅเดพเดจเด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚.

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

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

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

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

  • sonar.host.url - เดตเดฟเดฒเดพเดธเด‚ เดธเต‹เดจเดพเตผ'เดŽ;
  • sonar.projectKey - เดธเต†เตผเดตเดฑเดฟเดฒเต† เด…เดฆเตเดตเดฟเดคเต€เดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดธเต‹เดจเดพเตผ'เดŽ;
  • sonar.projectName - เด…เดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต, เด…เดคเต เดŽเดชเตเดชเต‹เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดพเดฑเตเดฑเดพเดตเตเดจเตเดจเดคเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดžเตเดžเดฟเดŸเตเดŸเตเดฃเตเดŸเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เต€;
  • เดธเต‹เดฃเดพเตผ.เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ - เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตเดณเตเดณ เดซเต‹เตพเดกเตผ, เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด‡เดคเต เด‰เดฑเดตเดฟเดŸ, เดŽเดจเตเดจเดพเตฝ เดŽเดจเตเดคเตเด‚ เด†เด•เดพเด‚. เดฑเต‚เดŸเตเดŸเต เดซเต‹เตพเดกเดฑเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเต เดˆ เดซเต‹เตพเดกเตผ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดธเตเด•เดพเดจเตผ เดฒเต‹เดžเตเดšเต เดšเต†เดฏเตเดค เดซเต‹เตพเดกเดฑเดพเดฃเต;
  • เดธเต‹เดฃเดพเตผ.เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ - เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเดฟเดจเตŠเดชเตเดชเด‚ เดชเต‹เด•เตเดจเตเดจ เด’เดฐเต เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ. เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดซเต‹เตพเดกเดฑเดพเดฃเดฟเดคเต. เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ, เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดซเต‹เตพเดกเตผ เด‡เดฒเตเดฒ, เด•เต‚เดŸเดพเดคเต† 'เดซเต‹เตพเดกเดฑเดฟเตฝ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจ เด˜เดŸเด•เดคเตเดคเดฟเดจเต เด…เดŸเตเดคเตเดคเดพเดฃเต เดŸเต†เดธเตเดฑเตเดฑเต เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต.เดชเดฐเดฟเดถเต‡เดพเดงเดจ', เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด…เดคเต เด‡เดชเตเดชเต‹เตพ เด…เดตเด—เดฃเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดŸเตเดคเตเดค เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚;
  • sonar.test.inclusions - เด’เดฐเต เดฎเดพเดธเตเด•เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพเด•เตเด•เตเดณเตเดณ เดชเดพเดค, เด•เต‹เดฎเด•เดณเดพเตฝ เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดš เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเด•เด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚;
  • sonar.sourceEncoding - เด‰เดฑเดตเดฟเดŸ เดซเดฏเดฒเตเด•เตพเด•เตเด•เตเดณเตเดณ เดŽเตปเด•เต‹เดกเดฟเด‚เด—เต.

เดธเตเด•เดพเดจเดฑเดฟเดจเตเดฑเต† เด†เดฆเตเดฏ เดตเดฟเด•เตเดทเต‡เดชเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดชเตเดฐเดงเดพเดจ เดฎเตเตป เดจเดŸเดชเดŸเดฟ เด’เดดเดฟเด•เต† เดŽเดฒเตเดฒเดพเด‚ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต: เดŸเต†เดธเตเดฑเตเดฑเต เดŽเดžเตเดšเดฟเตป เดคเดจเตเดจเต† เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเตเดตเดดเดฟ เดธเตเด•เดพเดจเตผ เดชเดฟเดจเตเดจเต€เดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด•เดตเดฑเต‡เดœเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดˆ เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดŸเต†เดธเตเดฑเตเดฑเต เดŽเดžเตเดšเดฟเตป เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดˆ เดชเดฆเตเดงเดคเดฟเดฏเดฟเตฝ, เดŸเต†เดธเตเดฑเตเดฑเต เดŽเดžเตเดšเดฟเตป เด†เดฃเต เด‡เดฒเตเดฒ. เด…เดคเดฟเดจเตเดฑเต† เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดซเดฏเดฒเดฟเดจเตเดฑเต† เด…เดจเตเดฌเดจเตเดง เดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเดพเดฃเต package.json.

เดจเดฎเตเด•เตเด•เต เดˆ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เดพเด‚:

"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 เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เด†เดฏเดฟ เดตเดฐเตเดจเตเดจเต.
Lcov - gcov-เดจเตเดณเตเดณ เด—เตเดฐเดพเดซเดฟเด•เตเด•เตฝ เด‡เดจเตเดฑเตผเดซเต‡เดธเต. เด‡เดคเต เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด‰เดฑเดตเดฟเดŸ เดซเดฏเดฒเตเด•เตพเด•เตเด•เดพเดฏเดฟ gcov เดซเดฏเดฒเตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด•เต‹เดกเตเด‚ เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ HTML เดชเต‡เดœเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดจเดพเดตเดฟเด—เต‡เดทเตป เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเต‡เดœเตเด•เดณเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ, เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ, เดถเดพเด–เด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด•เดตเดฑเต‡เดœเดฟเดจเต† Lcov เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต.

เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เดถเต‡เดทเด‚, เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด‚ เด•เดตเดฑเต‡เดœเต/lcov.info.
เดจเดฎเตเด•เตเด•เต เดชเดฑเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดธเต‹เดจเดพเตผ'เดŽเดจเดฟเด•เตเด•เต เด…เดคเต เดŽเดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เดฒเดญเดฟเด•เตเด•เตเด‚? เด…เดคเดฟเดจเดพเตฝ, เด…เดคเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฐเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เดพเด‚. เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเต เด‰เดฃเตเดŸเต: เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดฌเดนเตเดญเดพเดทเดพ เด†เด•เดพเด‚, เด…เดคเดพเดฏเดคเต, เดซเต‹เตพเดกเดฑเดฟเตฝ เด‰เดฑเดตเดฟเดŸ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เตพเด•เตเด•เตเดณเตเดณ เดธเต‹เดดเตเดธเต เด•เต‹เดกเตเด•เดณเตเด‚ เด’เดจเตเดจเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเตŠเดจเตเดจเตเดฎเดพเดฏเดฟ เด…เดซเดฟเดฒเดฟเดฏเต‡เดทเดจเตเด‚ เด‰เดฃเตเดŸเต, เด…เดคเดพเด•เดŸเตเดŸเต†, เด’เดจเตเดจเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฒเด—เดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เด…เดคเดฟเดจเตเดฑเต† เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดคเตเดคเดฟเดฒเต‚เดŸเต† เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เตพเด•เตเด•เดพเดฏเดฟ เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเดฅเดฒเด™เตเด™เดณเดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเดฟเดจเดพเตฝ เด‡เดคเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด“เดฐเต‹ เดญเดพเดทเดฏเตเด•เตเด•เตเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดตเดฟเดญเดพเด—เดฎเตเดฃเตเดŸเต. เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด•เตเดฐเดฎเต€เด•เดฐเดฃ เดตเดฟเดญเดพเด—เด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

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

เดธเตเด•เดพเดจเดฑเดฟเดจเตเดฑเต† เด†เดฆเตเดฏ เดตเดฟเด•เตเดทเต‡เดชเดฃเดคเตเดคเดฟเดจเต เดŽเดฒเตเดฒเดพเด‚ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เดชเดฆเตเดงเดคเดฟเดฏเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต เดธเต‹เดจเดพเตผเดคเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เดธเตเด•เดพเดจเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ 'e เดธเตเดตเดฏเดฎเต‡เดต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚. เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดธเดฎเดฏเด™เตเด™เดณเดฟเตฝ, เด•เดพเดฒเด•เตเดฐเดฎเต‡เดฃ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดšเดฒเดจเดพเดคเตเดฎเด•เดค เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚.

เด…เดคเดฟเดจเดพเตฝ, เดจเต‡เดฐเดคเตเดคเต† เดธเตƒเดทเตเดŸเดฟเดšเตเดš เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ package.json:

yarn run sonar 

เด•เตเดฑเดฟเดชเตเดชเต: เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ -X เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดฒเต‹เด—เดฟเด‚เด—เดฟเดจเดพเดฏเดฟ.

เดธเตเด•เดพเดจเตผ เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดธเตเด•เดพเดจเดฑเดฟเดจเตเดฑเต† เดฌเตˆเดจเดฑเดฟ เดคเดจเตเดจเต† เด†เดฆเตเดฏเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด‚. เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เด…เดคเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเต†เตผเดตเตผ เดธเตเด•เดพเตป เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดธเต‹เดจเดพเตผเด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดค เดชเตเดฒเด—เดฟเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ 'a, เด…เดคเตเดตเดดเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดณเตเดณ เดญเดพเดท เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดฎเดฑเตเดฑเต เดตเดฟเดตเดฟเดง เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดฒเต‹เดกเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต: เด—เตเดฃเดฎเต‡เดจเตเดฎเดฏเตเดณเตเดณ เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เตพ, เดธเดœเต€เดต เดจเดฟเดฏเดฎเด™เตเด™เตพ, เดฎเต†เดŸเตเดฐเดฟเด•เตเดธเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ, เดธเต†เตผเดตเตผ เดจเดฟเดฏเดฎเด™เตเด™เตพ.

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เด•เตเดฑเดฟเดชเตเดชเต: เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดฟเดจเตเดณเตเดณเดฟเตฝ เดžเด™เตเด™เตพ เด…เดตเดฏเดฟเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดธเดฟเด•เตเด•เดฟเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด”เดฆเตเดฏเต‹เด—เดฟเด• เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเดพเด‚.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดซเต‹เตพเดกเตผ เดตเดฟเดถเด•เดฒเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต เด‰เดฑเดตเดฟเดŸ เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเด‚ เดธเต‹เดดเตเดธเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดญเตเดฏเดคเดฏเตเด•เตเด•เดพเดฏเดฟ (เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด’เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ) เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจ เดญเดพเดท, เด…เดตเดฏเตเดŸเต† เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดธเต‚เดšเดฟเด•.

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เดพเดคเตเดค เดฎเดฑเตเดฑเต เดตเดฟเดตเดฟเดง เดตเดฟเดถเด•เดฒเดจเด™เตเด™เตพ เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดตเดฐเตเดจเตเดจเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฒเดฟเดจเตเดฑเดฟเด‚เด—เต, เด•เต‹เดกเต เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด•เดฃเตเดŸเต†เดคเตเดคเตฝ เดฎเตเดคเดฒเดพเดฏเดต).

เดธเตเด•เดพเดจเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเดคเตเดคเดฟเตฝ, เดถเต‡เด–เดฐเดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เดธเดฎเดพเดนเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด†เตผเด•เตเด•เตˆเดตเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด‡เดคเดฟเดจเตเดถเต‡เดทเด‚, เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเดšเตเดšเดคเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเต, เดšเดฟเดฒเดคเดฐเด‚ เด•เดตเดฑเต‡เดœเต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด…เดคเต เดจเดฎเตเดฎเตเดŸเต‡เดคเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ เด‡เดฒเตเดฒ-เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต.

เดจเดฎเตเด•เตเด•เต เด…เดคเต เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เดพเด‚. เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดจเต‹เด•เตเด•เดพเด‚, เด•เดตเดฑเต‡เดœเต เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•, เด•เต‚เดŸเดพเดคเต† เดตเดฟเดถเดฆเดฎเดพเดฏ เดซเดฏเตฝ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต "เดซเดพเตพ เดคเตเดฐเต‚" เดšเต†เดฏเตเดฏเตเด•:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดชเตเดฐเดงเดพเดจ, เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดš เดซเดฏเดฒเดฟเดจเต เดชเตเดฑเดฎเต‡ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเด‚ HelloWorld.vue, เด’เดฐเต เดซเดฏเดฒเตเด‚ เด‰เดฃเตเดŸเต main.ts, เด‡เดคเต เด•เดตเดฑเต‡เดœเดฟเดจเตเดฑเต† เดฎเตเดดเตเดตเตป เดšเดฟเดคเตเดฐเดคเตเดคเต†เดฏเตเด‚ เดจเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เด•เดตเดฑเต‡เดœเดฟเดจเตเดฑเต† เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เตพ เด…เดคเต เดŽเด™เตเด™เดจเต† เด’เดดเดฟเดตเดพเด•เตเด•เดฟ. เด…เดคเต†, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต, เดชเด•เตเดทเต‡ เด…เดคเต เดคเดฒเดคเตเดคเดฟเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต เด‡เดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เดธเตเด•เดพเดจเตผ เด…เดคเต เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เดฟ, เด…เดคเดฟเดจเดพเตฝ เด…เดคเต เด…เดคเดฟเดจเตเดฑเต† เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเดฟเตฝ เด…เดตเดธเดพเดจเดฟเดšเตเดšเต.

เดจเดฎเตเด•เตเด•เต เด‡เดคเต เดถเดฐเดฟเดฏเดพเด•เตเด•เดพเด‚:

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

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

เดžเดพเตป เด’เดฐเต เดตเตเดฏเด•เตเดคเดค เดตเดฐเตเดคเตเดคเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต: เดˆ เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดซเต‹เตพเดกเดฑเตเด•เตพเด•เตเด•เต เดชเตเดฑเดฎเต‡, เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดซเต‹เตพเดกเดฑเตเด•เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต sonar.test.inclusions.

เดธเตเด•เดพเดจเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เดถเดฐเดฟเดฏเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดจเดฎเตเด•เตเด•เต เด…เดŸเตเดคเตเดค เดชเต‹เดฏเดฟเดจเตเดฑเต เดจเต‹เด•เตเด•เดพเด‚ - เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดชเตเดฐเตŠเดซเตˆเดฒเตเด•เตพ. เดชเดฟเดจเตเดคเตเดฃเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เดฎเตเด•เดณเดฟเตฝ เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เดธเต‹เดจเดพเตผเด’เดฐเต‡ เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ เดญเดพเดทเด•เตพ. เด‡เดคเตเดคเดจเตเดจเต†เดฏเดพเดฃเต เดจเดฎเตเดฎเตพ เด•เดพเดฃเตเดจเตเดจเดคเต. เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚ TS, เดชเดฟเดจเตเดจเต† เดŽเดจเตเดคเดฟเดจเดพเดฃเต เด…เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เด•เตƒเดคเตเดฐเดฟเดฎเดคเตเดตเด™เตเด™เดณเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดจเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเด•เดพเดจเดฑเดฟเดจเต† เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด•เต‚เดŸเดฟ เดšเต‡เตผเดคเตเดคเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดญเดพเดท เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด‚ เดธเต‹เดจเดพเตผ'เดŽ:

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

...
sonar.language=ts
...

เดจเดฎเตเด•เตเด•เต เดธเตเด•เดพเดจเตผ เดตเต€เดฃเตเดŸเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเต เดซเดฒเด‚ เดจเต‹เด•เตเด•เดพเด‚:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เด•เดตเดฑเต‡เดœเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเดฏเดฟ.

เดธเตเด•เดพเดจเตผ เดฒเต‹เด—เต เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฐเดฟ เด•เดพเดฃเดพเด‚:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เด…เดคเดพเดฏเดคเต, เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ.

เดธเดพเดนเดšเดฐเตเดฏเด‚ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต: เด”เดฆเตเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต VueJs เดชเตเดฒเด—เดฟเดจเดฟเดฒเดพเดฃเต เดธเต‹เดจเดพเตผเดœเต†เดŽเดธเตเด†เดฐเดพเดฃเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟ เดเดฃเดพเดฌเตเดฒเต†.

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดŽเดจเตเดจเดพเตฝ เดˆ เดชเดฟเดจเตเดคเตเดฃ เดชเตเดฒเด—เดฟเดจเดฟเตฝ เด‡เดฒเตเดฒ เดธเต‹เดฃเดพเตผเดŸเดฟเดŽเดธเต เดตเต‡เดฃเตเดŸเดฟ 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.typescript.file.suffixes=.ts,.tsx,.vue
...

เดจเดฎเตเด•เตเด•เต เดธเตเด•เดพเดจเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเด‚:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เด’เดชเตเดชเด‚, voila, เดŽเดฒเตเดฒเดพเด‚ เดธเดพเดงเดพเดฐเดฃ เดจเดฟเดฒเดฏเดฟเดฒเดพเดฏเดฟ, เด’เดฐเต เดชเตเดฐเตŠเดซเตˆเตฝ เดฎเดพเดคเตเดฐเด‚ เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต. เด…เดคเดพเดฏเดคเต, เดชเดฟเดจเตเดคเตเดฃเดฏเดฟเตฝ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดžเตเดžเต VueJs+TS เดตเต‡เดฃเตเดŸเดฟ เดธเต‹เดจเดพเตผเด•เตเดฏเต‚เดฌเต.

เด•เต‚เดŸเตเดคเตฝ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เดฏเดฟ เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เด•เตเดฑเดšเตเดšเต เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚.

เดžเด™เตเด™เตพ เด‡เดคเตเดตเดฐเต† เดšเต†เดฏเตเดคเดคเต:

  • เดชเดฆเตเดงเดคเดฟเดฏเดฟเตฝ เดšเต‡เตผเดคเตเดคเต เดธเต‹เดจเดพเตผ- เดธเตเด•เดพเดจเตผ;
  • เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด• เด‡เดฒเตเดฒ เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป;
  • เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดคเต เดธเต‹เดจเดพเตผ- เดธเตเด•เดพเดจเตผ;
  • เดชเดฟเดจเตเดคเตเดฃ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต .vue-เดซเดฏเดฒเตเด•เตพ + เดŸเตˆเดชเตเดชเตเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต.

เดŸเต†เดธเตเดฑเตเดฑเต เด•เดตเดฑเต‡เดœเดฟเดจเต เดชเตเดฑเดฎเต‡, เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเดคเตเดคเดฟเดจเต เดฎเดฑเตเดฑเต เดฐเดธเด•เดฐเดฎเดพเดฏ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เดฎเดพเดจเดฆเดฃเตเดกเด™เตเด™เดณเตเดฃเตเดŸเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด•เต‹เดกเต เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดฒเตˆเดจเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ (เด•เต‹เดกเต เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เด—เตเดฃเด•เด™เตเด™เดณเตเดŸเต† เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต).

เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฒเด—เดฟเตป เดจเดฟเดฒเดตเดฟเดฒเต† เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเดฟเตฝ TS (เดธเต‹เดฃเดพเตผเดŸเดฟเดŽเดธเต) เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒ CPD (เด•เต‹เดชเตเดชเดฟ เดชเต‡เดธเตเดฑเตเดฑเต เดกเดฟเดฑเตเดฑเด•เตเดŸเตผ) เด•เต‚เดŸเดพเดคเต† เด•เต‹เดกเดฟเดจเตเดฑเต† เดตเดฐเดฟเด•เตพ เดŽเดฃเตเดฃเตเดจเตเดจเต .vue-เดซเดฏเดฒเตเด•เตพ.

เด•เต‹เดกเต เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด’เดฐเต เดธเดฟเดจเตเดคเดฑเตเดฑเดฟเด•เต เดธเดพเดนเดšเดฐเตเดฏเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป, เดฎเดฑเตเดฑเตŠเดฐเต เดชเต‡เดฐเดฟเตฝ เด˜เดŸเด• เดซเดฏเตฝ เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเดพเด•เตเด•เดฟ เด•เต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด•. main.ts เด’เดฐเต เดกเดฎเตเดฎเดฟ เดซเด‚เด—เตโ€Œเดทเตป, เด…เดคเต เดฎเดฑเตเดฑเตŠเดฐเต เดชเต‡เดฐเดฟเตฝ เดกเตเดฏเต‚เดชเตเดฒเดฟเด•เตเด•เต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•. เดŽเดจเตเดจเดคเตเดชเต‹เดฒเต† เดคเดจเดฟเดชเตเดชเด•เตผเดชเตเดชเตเดฃเตเดŸเต‹เดฏเต†เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป .vue, เด•เต‚เดŸเดพเดคเต† .ts -เดซเดฏเดฒเตเด•เตพ.

main.ts:

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

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฒเตˆเตป เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เด…เดญเดฟเดชเตเดฐเดพเดฏเดฎเดฟเดŸเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

...
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). เด…เดตเตผ เด•เตเดฐเดฎเต‡เดฃ เดˆ เดฐเดฃเตเดŸเต เดชเตเดฒเด—เดฟเดจเตเด•เดณเตเด‚ เด’เดจเตเดจเดพเดฏเดฟ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต เดŽเดจเตเดจเดคเต เดžเดพเตป เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต เดธเต‹เดจเดพเตผเดœเต†เดŽเดธเต, เด…เดคเต เดถเดฐเดฟเดฏเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ เด•เดตเดฑเต‡เดœเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด“เดชเตเดทเตป เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเต.

เด‡เดคเตเดตเดฐเต†, เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดซเดฏเดฒเตเด•เตพเด•เตเด•เตเด‚ เดŸเต†เดธเตเดฑเตเดฑเต เด•เดตเดฑเต‡เดœเต เดถเดคเดฎเดพเดจเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚. เดŽเดจเตเดจเดพเตฝ เด…เดณเดตเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดธเต‚เดšเด•เด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเดฃเต เดฏเต‚เดฃเดฟเดฑเตเดฑเตเดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเต เดตเต‡เดฃเตเดŸเดฟเดฏเตเดณเตเดณ เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ, เด…เดคเตเดชเต‹เดฒเต† เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดชเดถเตเดšเดพเดคเตเดคเดฒเดคเตเดคเดฟเดฒเตเด‚.

เด…เดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดฃเตเดŸเต เด‡เดฒเตเดฒเดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเด• เดธเต‹เดจเดพเตผ'เดŽ:
เดชเตŠเดคเตเดตเดพเดฏ เดŸเต†เดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ - 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.testExecutionReportPaths=test-report.xml
โ€ฆ

เด•เต‚เดŸเดพเดคเต† เดธเตเด•เดพเดจเตผ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•:

yarn run sonar

เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดฎเดพเดฑเดฟเดฏเดคเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚ เดธเต‹เดจเดพเตผ'เดŽ:

SonarQube-เดฎเดพเดฏเดฟ VueJS+TS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดจเด‚

เดชเดฟเดจเตเดจเต† เด’เดจเตเดจเตเด‚ เดฎเดพเดฑเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เดœเต†เดธเตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดซเดฏเดฒเตเด•เตพ เดซเดฏเดฒเตเด•เดณเดพเดฏเดฟ เดธเต‹เดจเดพเตผ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค เดฏเต‚เดฃเดฟเดฑเตเดฑเต- เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ. เดˆ เดธเดพเดนเดšเดฐเตเดฏเด‚ เดถเดฐเดฟเดฏเดพเด•เตเด•เดพเตป, เดžเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดธเต‹เดจเดพเตผ เดธเต‹เดฃเดพเตผ.เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ, เด…เดคเดฟเตฝ เดžเด™เตเด™เตพ เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เด‰เดณเตเดณ เดซเต‹เตพเดกเดฑเตเด•เตพ เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚ (เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ เด’เดฐเต†เดฃเตเดฃเด‚ เดฎเดพเดคเตเดฐเดฎเต‡เดฏเตเดณเตเดณเต‚):

เดธเต‹เดฃเดพเตผ-เดชเตเดฐเต‹เดœเด•เตเดŸเต.เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเต€เดธเต:

โ€ฆ
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%No3

  • 15,8%เดˆ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เด•เต‡เดŸเตเดŸเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต3

  • 10,5%เดˆ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เด•เต‡เดŸเตเดŸเดฟเดŸเตเดŸเตเดฃเตเดŸเต, 2 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ

  • 0,0%เดžเดพเตป เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เด‚0 เด†เดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต

  • 31,6%เดžเดพเตป เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เด…เดตเดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‡เตพเด•เตเด•เตเดจเตเดจเต6

19 เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เดตเต‹เดŸเตเดŸเต เดšเต†เดฏเตเดคเต. 3 เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เดตเดฟเดŸเตเดŸเตเดจเดฟเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•