SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ†āĻŽāĻ°āĻž āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœā§‡ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻāĻ•āĻŸāĻŋ āĻ‰āĻšā§āĻš āĻ¸ā§āĻ¤āĻ°ā§‡ āĻ•ā§‹āĻĄ āĻŽāĻžāĻ¨ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻž. āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻšāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ VueJs+āĻŸāĻžāĻ‡āĻĒāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ, āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻĻā§‡āĻ–āĻž āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋāĨ¤

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦ, āĻ¯ā§‡āĻŽāĻ¨āĻŸāĻŋ āĻ†āĻŽāĻŋ āĻ‰āĻĒāĻ°ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ, āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻ¤āĻ¤ā§āĻ¤ā§āĻŦ - āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻ•ā§€, āĻ¯āĻžāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ° āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻļā§āĻ¨āĻ›ā§‡āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯:

āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ (āĻ¸āĻžāĻŦā§‡āĻ• āĻ¸ā§‹āĻ¨āĻžāĻ°) āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ•ā§‹āĻĄ āĻ—ā§āĻŖāĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĨ¤
MISRA C, MISRA C++, MITER/CWE āĻāĻŦāĻ‚ CERT āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻ° āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄā§‡āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ•ā§‹āĻĄ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻāĻŦāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻ°āĻŖ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ OWASP āĻļā§€āĻ°ā§āĻˇ 10 āĻāĻŦāĻ‚ CWE/SANS āĻļā§€āĻ°ā§āĻˇ 25 āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĨā§‡āĻ•ā§‡āĻ“ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ°ā§‡āĻĄāĻŋāĻŽā§‡āĻĄ āĻŸā§āĻ˛āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§‡āĻ“, āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻ•ā§‡ āĻāĻ•āĻ• āĻĄā§āĻ¯āĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡ āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ¯āĻŧ, āĻ°āĻžāĻ¨ā§‡āĻ° āĻ‡āĻ¤āĻŋāĻšāĻžāĻ¸ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–ā§‡ āĻāĻŦāĻ‚ āĻāĻ° āĻĢāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻŦāĻŖāĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻ†āĻ°ā§‹ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻžāĻ‡āĻŸ

āĻĒā§āĻ°āĻšā§āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤āĨ¤ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ˛āĻŋāĻ™ā§āĻ• āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¤āĻĨā§āĻ¯ āĻŦāĻŋāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻāĻ—ā§āĻ˛āĻŋ 25āĻŸāĻŋāĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻ­āĻžāĻˇāĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ­āĻžāĻˇāĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ (typeŅript āĻ¸āĻš), āĻ¯āĻĻāĻŋāĻ“ āĻ‰āĻ‡āĻ•āĻŋ āĻŦāĻ˛āĻ›ā§‡ āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤āĨ¤ āĻĒāĻŋāĻ›āĻ¨ā§‡ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻ‰āĻ¤ā§āĻ¤āĻ° āĻ¸ā§‹āĻ¨āĻžāĻ°āĻœā§‡āĻāĻ¸, āĻŸāĻžāĻ‡āĻĒāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻŸāĻŋāĻāĻ¸ āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡āĨ¤

āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ-āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°, āĻ¯āĻž, āĻĨā§‡āĻ•ā§‡ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—-āĻĢāĻžāĻ‡āĻ˛, āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻāĻ‡ āĻĄā§‡āĻŸāĻž āĻĒāĻžāĻ āĻžāĻ¯āĻŧ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻ†āĻ°āĻ“ āĻāĻ•āĻ¤ā§āĻ°ā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻāĻ•āĻ¤ā§āĻ°ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻĨā§‡āĻ•ā§‡ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻ˛ npm āĻŽā§‹āĻĄāĻŧāĻ•. āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻ¸ā§āĻ¨ āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ в āĻĻā§ƒāĻļā§āĻ¯- āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸāĻžāĻ‡āĻĒāĻ°āĻžāĻ‡āĻŸāĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋ.

āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• Docker-āĻ°āĻšāĻ¨āĻž.

āĻ¸ā§‹āĻ¨āĻžāĻ°.āĻ‡āĻ¯āĻŧāĻžāĻŽāĻ˛:

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-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 - āĻ‰āĻ¤ā§āĻ¸ āĻ¸āĻš āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻŸāĻŋ src, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•āĻŋāĻ›ā§ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°āĻŸāĻŋ āĻ°ā§āĻŸ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻĒā§‡āĻ•ā§āĻˇāĻŋāĻ• āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯ā§‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°āĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡;
  • āĻ¸ā§‹āĻ¨āĻžāĻ°.āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž - āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¯āĻž āĻ†āĻ—ā§‡āĻ°āĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻ¸ā§‡āĻ‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ—ā§āĻ˛āĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤āĨ¤ āĻāĻ‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡, āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•ā§‹āĻ¨ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻ¨ā§‡āĻ‡, āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŸāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻĒāĻžāĻļā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤āĨ¤āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž', āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻžāĻ¤āĻ¤ āĻāĻŸāĻŋ āĻ‰āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ;
  • sonar.test.inclusion - āĻāĻ•āĻŸāĻŋ āĻŽā§āĻ–ā§‹āĻļ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻĨ, āĻ•āĻŽāĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡;
  • sonar.source āĻāĻ¨āĻ•ā§‹āĻĄāĻŋāĻ‚ - āĻ‰ā§ŽāĻ¸ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ¨āĻ•ā§‹āĻĄāĻŋāĻ‚āĨ¤

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŸāĻŋāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ˛āĻžā§āĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻ¤ā§€āĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤: āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž, āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯āĻž āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ‡ āĻ¤āĻĨā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻ‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡, āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻšāĻ¯āĻŧ āĻ āĻžāĻŸā§āĻŸāĻž. āĻāĻŦāĻ‚ āĻāĻ° āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ 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 āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚, āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ āĻļāĻžāĻ–āĻžāĻ° āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡, āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻāĻ–āĻžāĻ¨ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻŦā§‡ coverage/lcov.info.
āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦāĻ˛āĻž āĻĻāĻ°āĻ•āĻžāĻ° āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ†āĻŽāĻŋ āĻāĻŸāĻž āĻ•ā§‹āĻĨāĻž āĻĨā§‡āĻ•ā§‡ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ? āĻ…āĻ¤āĻāĻŦ, āĻāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ˛āĻžāĻ‡āĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ†āĻ›ā§‡: āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻŦāĻšā§āĻ­āĻžāĻˇāĻŋāĻ• āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¯ā§‡, āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ src āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ• āĻŦāĻž āĻ…āĻ¨ā§āĻ¯āĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻāĻ• āĻŦāĻž āĻ…āĻ¨ā§āĻ¯ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¤āĻžāĻ° āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻŦāĻ‚ āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ­āĻžāĻˇāĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŦāĻŋāĻ­āĻžāĻ— āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸāĻžāĻ‡āĻĒāĻ°āĻžāĻ‡āĻŸāĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻŦāĻŋāĻ­āĻžāĻ— āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨:

sonar-project.properties:

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

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ˛āĻžā§āĻšā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĨ¤ āĻ†āĻŽāĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°'e āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧ āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ° āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨āĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ—āĻ¤āĻŋāĻļā§€āĻ˛āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻ—ā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯āĻžāĻ• package.json:

yarn run sonar 

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯: āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ -X āĻ†āĻ°ā§‹ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ˛āĻ—āĻŋāĻ‚ āĻœāĻ¨ā§āĻ¯.

āĻ¯āĻĻāĻŋ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°ā§‡āĻ° āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋāĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻāĻ° āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ­āĻžāĻˇāĻž āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻ“ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡: āĻ—ā§āĻŖāĻŽāĻžāĻ¨ āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛, āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧāĻŽ, āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛, āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ.

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯: āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ‰āĻĒāĻ° āĻŦāĻžāĻ¸ āĻ•āĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ‰āĻ¤ā§āĻ¸āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻāĻ° āĻĒāĻ°ā§‡, āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ src āĻ¸āĻ•āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻžāĻĒā§āĻ¯āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ (āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĻŸāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°āĻž āĻ¨āĻž āĻšāĻ¯āĻŧ) āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ­āĻžāĻˇāĻž, āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸ā§‚āĻšā§€āĻ•āĻ°āĻŖ āĻ¸āĻšāĨ¤

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ†āĻ¸ā§‡, āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻŋ āĻ¨āĻž (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ˛āĻŋāĻ¨ā§āĻŸāĻŋāĻ‚, āĻ•ā§‹āĻĄ āĻĄā§āĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻ°āĻŖ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)āĨ¤

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°ā§‡āĻ° āĻ•āĻžāĻœā§‡āĻ° āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻļā§‡āĻˇā§‡, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻ‚āĻ—ā§ƒāĻšā§€āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤, āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ°āĻ­ā§āĻ•ā§āĻ¤ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤

āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡ āĻ•ā§€ āĻ˜āĻŸā§‡āĻ›ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ, āĻ•āĻŋāĻ›ā§ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ•āĻŋāĻ›ā§ āĻ§āĻ°āĻŖā§‡āĻ° āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§‡āĻ˛ā§‡ āĻ¨āĻž āĻ āĻžāĻŸā§āĻŸāĻž- āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸāĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻž āĻŦā§‡āĻ° āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻļāĻĻā§‡ āĻĻā§‡āĻ–āĻŋ, āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻŽāĻžāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļāĻĻ āĻĢāĻžāĻ‡āĻ˛ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ "āĻĢāĻ˛ āĻĨā§āĻ°ā§" āĻ•āĻ°ā§āĻ¨:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻĢāĻžāĻ‡āĻ˛ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ HelloWorld.vue, āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ†āĻ›ā§‡ main.ts, āĻ¯āĻž āĻ•āĻ­āĻžāĻ°ā§‡āĻœā§‡āĻ° āĻĒā§āĻ°ā§‹ āĻ›āĻŦāĻŋ āĻ¨āĻˇā§āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻšāĻŋāĻ¸āĻžāĻŦ āĻĨā§‡āĻ•ā§‡ āĻāĻŸāĻž āĻŦāĻžāĻĻ. āĻšā§āĻ¯āĻžāĻ, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸āĻ āĻŋāĻ•, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻ›āĻŋāĻ˛ āĻ āĻžāĻŸā§āĻŸāĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻāĻŸāĻŋāĻ•ā§‡ āĻ¸ā§‚āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻ¤āĻžāĻ° āĻ—āĻŖāĻ¨āĻžāĻ¯āĻŧ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻŋ:

sonar-project.properties:

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

āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡: āĻāĻ‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻž āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°āĻ“ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ sonar.test.inclusion.

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸āĻ āĻŋāĻ• āĻ¤āĻĨā§āĻ¯ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ‡:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻšāĻ˛ā§āĻ¨ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĻā§‡āĻ–āĻŋ- āĻ—ā§āĻŖāĻŽāĻžāĻ¨ā§‡āĻ° āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛. āĻ†āĻŽāĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ‰āĻĒāĻ°ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛ā§‡āĻ›āĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ“āĻŽ āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ­āĻžāĻˇāĻžāĨ¤ āĻāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ āĻŋāĻ• āĻ•āĻŋ āĻĻā§‡āĻ–āĻ›āĻŋ. āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ˛ā§‡āĻ–āĻž āĻ†āĻ›ā§‡ TS, āĻ¤āĻžāĻ‡ āĻ•ā§‡āĻ¨ āĻ…āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻšā§‡āĻ• āĻ¸āĻ™ā§āĻ—ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻĒ. āĻ†āĻŽāĻ°āĻž āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ†āĻ°āĻ“ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ­āĻžāĻˇāĻž āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻŦ āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ•:

sonar-project.properties:

...
sonar.language=ts
...

āĻ†āĻŦāĻžāĻ° āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ āĻāĻŦāĻ‚ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§‡āĻ–ā§āĻ¨:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻšāĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡.

āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻ˛āĻ— āĻ¤āĻžāĻ•āĻžāĻ¨, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ˛āĻžāĻ‡āĻ¨ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¸āĻšāĻœāĻ­āĻžāĻŦā§‡ āĻ¸ā§‚āĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤

āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ: āĻ¸āĻ°āĻ•āĻžāĻ°ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤ āĻ­ā§āĻ¯ā§āĻœā§‡āĻ¸ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ā§‡ āĻ†āĻ›ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻœā§‡āĻāĻ¸āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ.

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ā§‡ āĻ¨ā§‡āĻ‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻŸāĻŋāĻāĻ¸ āĻĨā§‡āĻ•ā§‡ TS, āĻ¯āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻžāĻ— āĻŸā§āĻ°ā§āĻ¯āĻžāĻ•āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻŸāĻŋāĻ•āĻŋāĻŸ āĻ–ā§‹āĻ˛āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ•:

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

āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ˛, āĻāĻ‡ āĻ¸āĻ¤ā§āĻ¯āĻŸāĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻĒāĻ¤ā§āĻ¤āĻŋ. āĻšā§āĻ¯āĻžāĻ, āĻāĻŸāĻž āĻāĻ•āĻŸā§ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ• "āĻŸāĻžāĻŸā§āĻŸā§".
āĻ¯āĻĻāĻŋ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻĨāĻžāĻ•ā§‡ .vue-āĻ¨āĻĨāĻŋ āĻĒāĻ¤ā§āĻ° āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ“āĻš, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻ¸ā§āĻ¨ āĻ¤āĻžāĻ•ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻ˛āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻŸāĻžāĻ‡āĻĒāĻ°āĻžāĻ‡āĻŸāĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋ.

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

sonar-project.properties:

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

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ° āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻāĻŦāĻ‚, āĻ­āĻ¯āĻŧā§‡āĻ˛āĻž, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°ā§‡ āĻāĻ¸ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŸāĻžāĻ‡āĻĒāĻ°āĻžāĻ‡āĻŸāĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋ. āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋ VueJs+TS āĻĨā§‡āĻ•ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ.

āĻ†āĻ¸ā§āĻ¨ āĻ†āĻ°āĻ“ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻāĻ•āĻŸā§ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋāĨ¤

āĻ†āĻŽāĻ°āĻž āĻāĻ–āĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¯āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ:

  • āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°- āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°;
  • āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ āĻžāĻŸā§āĻŸāĻž āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡;
  • āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¸ā§‹āĻ¨āĻžāĻ°- āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°;
  • āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ .vue-āĻĢāĻžāĻ‡āĻ˛āĻ¸ + āĻŸāĻžāĻ‡āĻĒāĻ°āĻžāĻ‡āĻŸāĻžāĻ°ā§‡ āĻŽā§āĻĻā§āĻ°āĻŋ.

āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ•ā§‹āĻĄ āĻŽāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ•ā§‹āĻĄā§‡āĻ° āĻ¨āĻ•āĻ˛ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž (āĻ•ā§‹āĻĄ āĻœāĻŸāĻŋāĻ˛āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻ¸āĻšāĻ— āĻ—āĻŖāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻœāĻĄāĻŧāĻŋāĻ¤)āĨ¤

āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨āĻŸāĻŋāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡ TS (āĻ¸ā§‹āĻ¨āĻžāĻ°āĻŸāĻŋāĻāĻ¸) āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž 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 āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻāĻŸāĻŋ āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻœā§‡āĻāĻ¸(āĻŸāĻŋāĻāĻ¸). āĻ†āĻŽāĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻ§ā§€āĻ°ā§‡ āĻ§ā§€āĻ°ā§‡ āĻāĻ‡ āĻĻā§āĻŸāĻŋ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨āĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻœā§‡āĻāĻ¸, āĻ¯āĻž āĻ†āĻŽāĻŋ āĻ¸āĻ āĻŋāĻ• āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋāĨ¤

āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¤āĻĨā§āĻ¯ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤

āĻāĻ–āĻ¨āĻ“ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§‡āĻˇāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻ¤āĻžāĻ‚āĻļā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ‡ āĻ¸ā§‚āĻšāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻāĻ•āĻ•-āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¸āĻ™ā§āĻ—ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ†āĻ›ā§‡ āĻ¯ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ āĻžāĻŸā§āĻŸāĻž-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻĻāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§āĻ¨ āĻ¸ā§‹āĻ¨āĻžāĻ°'āĻ•:
āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ• āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ¤āĻĨā§āĻ¯ - 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-project.properties:

â€Ļ
sonar.tests=src/components/__tests__
â€Ļ

āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

yarn run sonar

āĻšāĻ˛ā§āĻ¨ āĻĻā§‡āĻ–āĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡ āĻ•āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻāĻ•āĻ•-āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻāĻŦāĻ‚, āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻ¯āĻŧā§‡, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ‡ āĻ¨āĻŽā§āĻŦāĻ°āĻŸāĻŋāĻ° āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ:

SonarQube-āĻāĻ° āĻ¸āĻžāĻĨā§‡ VueJS+TS āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•ā§€āĻ­ā§‚āĻ¤ āĻ•āĻ°āĻž

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ˛ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ. āĻ†āĻŽāĻ°āĻž āĻ¸āĻĢāĻ˛āĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ VueJs+TS. āĻ•āĻŋāĻ›ā§ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻ¤āĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡. āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ•āĻ­āĻžāĻ°ā§‡āĻœ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻžāĻŽāĻ—ā§āĻ°ā§€ āĻŦāĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻĄ āĻŽāĻžāĻ¨ā§‡āĻ° āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ (āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ), āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ¸āĻš āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨ā§‡āĻ° āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ-āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĨ¤ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻ˛ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•ā§‹āĻĄ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡, āĻ¯ā§‡āĻŽāĻ¨ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻāĻŦāĻ‚ āĻŦāĻŋāĻŸāĻŦāĻžāĻ•ā§‡āĻŸāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻŸāĻžāĻ¨(āĻŽāĻžāĻ°ā§āĻœ) āĻ…āĻ¨ā§āĻ°ā§‹āĻ§'āĻ•āĻ­āĻžāĻ°ā§‡āĻœā§‡āĻ° āĻ…āĻŦāĻ¨āĻ¤āĻŋ āĻšāĻ˛ā§‡ āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻļāĻžāĻ–āĻžāĻ¯āĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ—āĻ˛ā§āĻĒ.

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯: āĻ•ā§‹āĻĄ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻāĻŸāĻž.

āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻœāĻ°āĻŋāĻĒā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨āĨ¤ āĻ¸āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ āĻ•āĻ°ā§āĻ¨āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋ āĻ¸ā§‹āĻ¨āĻžāĻ°āĻ•āĻŋāĻ‰āĻŦ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨:

  • 26,3%āĻšā§āĻ¯āĻžāĻ 5

  • 15,8%No3

  • 15,8%āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻļā§āĻ¨ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ 3 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡

  • 10,5%āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻļā§āĻ¨ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ 2 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¨āĻž

  • 0,0%āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ0 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋ

  • 31,6%āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ° āĻ†āĻŽāĻŋ āĻ¤āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻļā§āĻ¨ā§‡āĻ›āĻŋ 6

19 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ­ā§‹āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ 3 āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻŦāĻŋāĻ°āĻ¤ āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨