Phoenix BSL β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ высокоС качСство ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ Π½Π° языкС 1Π‘ (BSL), обнаруТивая ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π°Π³ΠΈ, уязвимости бСзопасности, Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ стандартов кодирования ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ встроСнных срСдств ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ 1Π‘, Phoenix BSL ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности: ΠΎΡ‚ поиска "ΠΌΡ‘Ρ€Ρ‚Π²ΠΎΠ³ΠΎ" ΠΊΠΎΠ΄Π° Π΄ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ выявлСния Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ². Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ интСгрируСтся с популярными систСмами контроля вСрсий (Git, SVN), CI/CD-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с большими ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Phoenix BSL для максимальной эффСктивности, Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ способы ΠΈΡ… исправлСния.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Phoenix BSL ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ 1Π‘

Phoenix BSL β€” это статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, созданный ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для экосистСмы 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π•Π³ΠΎ основная Π·Π°Π΄Π°Ρ‡Π° β€” Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ качСства ΠΊΠΎΠ΄Π°, сниТая риск ошибок Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ сопровоТдСния. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с языком BSL (Built-in Script Language) ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 8.3.20+.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ прСимущСства Phoenix BSL ΠΏΠ΅Ρ€Π΅Π΄ стандартными срСдствами ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:

  • πŸ” Π“Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·: выявляСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синтаксичСскиС ошибки, Π½ΠΎ ΠΈ логичСскиС Π±Π°Π³ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ зацикливания ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с транзакциями.
  • πŸ“Š ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ качСства: ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° (цикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π³Π»ΡƒΠ±ΠΈΠ½Π° влоТСнности), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅" участки.
  • πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ уязвимости, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ Π² запросах ΠΈΠ»ΠΈ нСбСзопасноС использованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
  • πŸ”„ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с CI/CD: ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, блокируя сборку ΠΏΡ€ΠΈ критичСских ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ для ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. НапримСр, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с дСсятками тысяч строк ΠΊΠΎΠ΄Π° Phoenix BSL ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ кодирования, ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ дублирования Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ врСмя Π½Π° Ρ€Π΅Π²ΡŒΡŽ ΠΊΠΎΠ΄Π°. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ замСняСт Ρ€ΡƒΡ‡Π½ΠΎΠ΅ тСстированиС, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ количСство ошибок, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½, Π½Π° 30–50% (ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ).

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Phoenix BSL Π½Π΅ являСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ Ρ„ΠΈΡ€ΠΌΡ‹ 1Π‘. Π­Ρ‚ΠΎ нСзависимый инструмСнт с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ сообщСством. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм Π² коммСрчСских ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Π΅ условия (MIT License).

Установка Phoenix BSL: пошаговая инструкция для Windows ΠΈ Linux

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Phoenix BSL ΠΌΠΎΠΆΠ½ΠΎ нСсколькими способами: Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, ΠΈΠ· исходников ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ дистрибутива. Рассмотрим самый ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” установку Ρ‡Π΅Ρ€Π΅Π· Docker (рСкомСндуСтся для кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹) ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ установку Π½Π° Windows.

Бпособ 1: Установка Ρ‡Π΅Ρ€Π΅Π· Docker (рСкомСндуСтся)

ИспользованиС Docker ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ инструмСнта. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

docker pull ghcr.io/1c-syntax/bsl-language-server:latest

docker run -it --rm -v "${PWD}:/workspace" ghcr.io/1c-syntax/bsl-language-server:latest

Π“Π΄Π΅ ${PWD} β€” ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ 1Π‘. ПослС запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 1145.

Бпособ 2: Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ установка Π½Π° Windows

Для установки Π±Π΅Π· Docker:

  1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ послСдний Ρ€Π΅Π»ΠΈΠ· с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория GitHub.
  2. РаспакуйтС Π°Ρ€Ρ…ΠΈΠ² Π² Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\PhoenixBSL\).
  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ (bsl-language-server.exe) Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния PATH.
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ установку ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
    bsl-language-server --version

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Phoenix BSL Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Java 11+, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ инструмСнт написан Π½Π° Kotlin/JVM. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ дистрибутив Java ΠΌΠΎΠΆΠ½ΠΎ с сайта Adoptium.

πŸ“Š Какой способ установки Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅?
  • Docker
  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ установка Π½Π° Windows
  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ установка Π½Π° Linux
  • Π•Ρ‰Ρ‘ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»

Настройка Phoenix BSL для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° 1Π‘

ПослС установки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Phoenix BSL для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с вашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ .bsl-config.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ минимальной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

{

"mode": "full",

"srcDir": ["./src"],

"exclude": ["**/Tests/**"],

"rules": {

"FunctionShouldHaveReturn": "error",

"CyclesShouldNotBeNested": "warning"

}

}

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ значСния
mode Π Π΅ΠΆΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°: full (ΠΏΠΎΠ»Π½Ρ‹ΠΉ), quick (быстрый) "full"
srcDir Папки с исходным ΠΊΠΎΠ΄ΠΎΠΌ для Π°Π½Π°Π»ΠΈΠ·Π° ["src", "cf"]
exclude Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹/ΠΏΠ°ΠΏΠΊΠΈ (ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ glob-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹) ["**/Tests/**", "**/Old/**"]
rules Настройка ΠΏΡ€Π°Π²ΠΈΠ» (ΡƒΡ€ΠΎΠ²Π½ΠΈ: error, warning, info) {"EmptyStatement": "error"}

Для запуска Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

bsl-language-server analyze --configPath ./.bsl-config.json --outputFile report.json

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ сохранён Π² Ρ„Π°ΠΉΠ» report.json Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, совмСстимом с SonarQube ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ систСмами ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° качСства ΠΊΠΎΠ΄Π°. Для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для VS Code ΠΈΠ»ΠΈ IntelliJ IDEA.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .bsl-config.json|Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΊ исходникам|Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ тСстовыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ|ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ "error"|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Java-->

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΈΠ·Π° Π² Phoenix BSL: Ρ‡Ρ‚ΠΎ провСряСт инструмСнт

Phoenix BSL Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 200 встроСнных ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ аспСкты качСства ΠΊΠΎΠ΄Π°: ΠΎΡ‚ синтаксиса Π΄ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ². ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

  • πŸ”§ ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ: ошибки, приводящиС ΠΊ падСниям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ).
  • πŸ“ Π‘Ρ‚ΠΈΠ»ΡŒ: Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ соглашСний ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, отступы).
  • ⚑ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ коллСкциям).
  • πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: уязвимости (SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ, Ρ…Π°Ρ€Π΄ΠΊΠΎΠ΄ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ).
  • 🧩 АрхитСктура: Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ (боТСствСнныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ:

  • 🚨 EmptyStatement: пустыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (Если ... Π’ΠΎΠ³Π΄Π° ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ Π±Π΅Π· Ρ‚Π΅Π»Π°).
  • πŸ”„ NestedTernaryOperator: Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (ΡƒΡ…ΡƒΠ΄ΡˆΠ°ΡŽΡ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ).
  • πŸ”’ HardcodePassword: Ρ…Π°Ρ€Π΄ΠΊΠΎΠ΄ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΠ΄Π΅.
  • πŸ“‰ CognitiveComplexity: высокая когнитивная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΏΠΎΡ€ΠΎΠ³ настраиваСтся).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ "off":

"rules": {

"LineLength": "off", // ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄Π»ΠΈΠ½Ρ‹ строки

"MethodSize": "warning" // ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ большом Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: НС ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ "ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, UnreachableCode ΠΈΠ»ΠΈ EmptyExceptBlock). Π˜Ρ… Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π²Π΅Π΄ΡƒΡ‚ ΠΊ Π±Π°Π³Π°ΠΌ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Phoenix BSL с VS Code ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ

Для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Phoenix BSL прямо Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π° рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹. НаиболСС популярныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • πŸ“Œ VS Code: Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ BSL Language Server (устанавливаСтся ΠΈΠ· Marketplace). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ подсвСтку ошибок Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ быстрыС исправлСния (Quick Fix).
  • πŸ“Œ IntelliJ IDEA: ΠΏΠ»Π°Π³ΠΈΠ½ 1C:BSL (доступСн Π² JetBrains Marketplace). Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с систСмой инспСкций IDE.
  • πŸ“Œ GitHub Actions: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ автоматичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΈ ΠΏΡƒΠ»Π»-рСквСстах с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ action.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для VS Code (.vscode/settings.json):

{

"bsl.languageServer.path": "C:/PhoenixBSL/bsl-language-server.exe",

"bsl.languageServer.trace.server": "verbose",

"bsl.diagnostics.enable": true

}

ПослС настройки ΠΏΠ»Π°Π³ΠΈΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Ρ‚ΡŒ ошибки прямо Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ подсказки ΠΏΠΎ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ. НапримСр, ΠΏΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° FunctionShouldHaveReturn появится ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π’ΠΎΠ·Π²Ρ€Π°Ρ‚.

πŸ’‘

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ°ΠΏΠΊΠΈ с тСстами ΠΈ внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ exclude Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки Π² ΠΊΠΎΠ΄Π΅ 1Π‘, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Phoenix BSL

Phoenix BSL особСнно эффСктивСн для выявлСния скрытых Π±Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ловятся стандартными срСдствами 1Π‘. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ способы ΠΈΡ… исправлСния.

1. "ΠœΡ‘Ρ€Ρ‚Π²Ρ‹ΠΉ" ΠΊΠΎΠ΄ (UnusedLocalMethod)

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, Π½ΠΎ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Они ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ошибки:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΠ΅Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°ΡΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°()

// Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вызываСтся

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ: Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ² Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… мСстах.

2. ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ зацикливания (PossibleInfiniteLoop)

Анализатор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ»Ρ‹ Π±Π΅Π· явного условия Π²Ρ‹Ρ…ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

// БСсконСчный Ρ†ΠΈΠΊΠ»!

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

РСшСниС: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.

3. НСбСзопасныС запросы ΠΊ Π±Π°Π·Π΅ (UnsafeQuery)

Π­Ρ‚ΠΎ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ запросы Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², уязвимыС ΠΊ Π°Ρ‚Π°ΠΊΠ°ΠΌ. НапримСр:

Запрос = Новый Запрос;

Запрос.ВСкст = "ВЫБРАВЬ * Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρ‹ Π“Π”Π• НаимСнованиС = """ + НСобработанныйВвод + """";

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса:

Запрос.ВСкст = "ВЫБРАВЬ * Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρ‹ Π“Π”Π• НаимСнованиС = &НаимСнованиС";

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("НаимСнованиС", НСобработанныйВвод);

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСдупрСТдСния Phoenix BSL?

Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ высокой слоТности ΠΊΠΎΠ΄Π° (CognitiveComplexity) ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ станСт Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. НапримСр, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° с Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ условий Π±ΠΎΠ»Π΅Π΅ 5 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π² 3 Ρ€Π°Π·Π° большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ (ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ исслСдования Software Engineering Institute). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ошибки Ρ‚ΠΈΠΏΠ° UnsafeQuery ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π°Ρ‚Π°ΠΊ Π½Π° Π±Π°Π·Ρƒ 1Π‘.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Phoenix BSL

Phoenix BSL ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки, Π½ΠΎ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 1Π‘-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НапримСр, инструмСнт выявляСт:

  • 🐒 НСэффСктивныС Ρ†ΠΈΠΊΠ»Ρ‹: Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ большим коллСкциям (NestedLoops).
  • πŸ—‘οΈ Π›ΠΈΡˆΠ½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: созданиС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² запросах.
  • πŸ”„ ЧастыС обращСния ΠΊ Π±Π°Π·Π΅: ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: Π·Π°ΠΌΠ΅Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π° объСдинСниС запросов:

ΠŸΠ»ΠΎΡ…ΠΎ (Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»):

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ†Π°1 Π¦ΠΈΠΊΠ»

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запросы.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ("ВЫБРАВЬ * Π˜Π— Π’Π°Π±Π»ΠΈΡ†Π°2 Π“Π”Π• Бсылка = " + Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Бсылка);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π₯ΠΎΡ€ΠΎΡˆΠΎ (ΠΎΠ΄ΠΈΠ½ запрос):

Запрос = Новый Запрос;

Запрос.ВСкст = "ВЫБРАВЬ Π’1.ПолС1, Π’2.ПолС2

|Π˜Π— Π’Π°Π±Π»ΠΈΡ†Π°1 КАК Π’1

| Π›Π•Π’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• Π’Π°Π±Π»ΠΈΡ†Π°2 КАК Π’2

| ПО Π’1.Бсылка = Π’2.Бсылка";

Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ PerformanceCriticalCode ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ CognitiveComplexity. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слоТности ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 20, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ разбиСния Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

πŸ’‘

РСгулярный Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° с Phoenix BSL позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя выполнСния тяТСлых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² 1Π‘ Π½Π° 15–40% Π·Π° счёт устранСния "ΡƒΠ·ΠΊΠΈΡ… мСст".

FAQ: ЧастыС вопросы ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Phoenix BSL

Как ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Phoenix BSL Π΄ΠΎ послСднСй вСрсии?

Для обновлСния Ρ‡Π΅Ρ€Π΅Π· Docker Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

docker pull ghcr.io/1c-syntax/bsl-language-server:latest

Для локальной установки скачайтС Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· с GitHub ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ установки.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Phoenix BSL для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π½Π° управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ…?

Π”Π°, инструмСнт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для управляСмых Ρ„ΠΎΡ€ΠΌ. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΊ исходникам Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ (srcDir).

Как ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Phoenix BSL с Jenkins?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ BSL Plugin для Jenkins ΠΈΠ»ΠΈ настройтС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ bsl-language-server analyze Π² этапС сборки. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для Jenkinsfile:

pipeline {

agent any

stages {

stage('BSL Analysis') {

steps {

bat 'bsl-language-server analyze --configPath .bsl-config.json --outputFile report.json'

}

}

}

}

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Phoenix BSL Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания?

Π›ΠΎΠΆΠ½Ρ‹Π΅ срабатывания ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ двумя способами:

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ строки Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ // bsl:ignore:RuleName.
  2. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ глобально Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅, Ссли ΠΎΠ½ΠΎ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ гСнСрируСтся автоматичСски, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

// bsl:ignore:UnusedLocalVariable

ΠŸΠ΅Ρ€Π΅ΠΌ ΠΠ΅Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ Phoenix BSL Π°Π½Π°Π»ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ?

Π”Π°, Π½ΠΎ для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

  1. Π Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ²/ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² srcDir.
  2. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .bsl ΠΈΠ»ΠΈ .os.

Для Π°Π½Π°Π»ΠΈΠ·Π° .epf-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ экспортируйтС ΠΈΡ… Π² тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.