Skip to content

πŸ”¬ БтатичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Python-ΠΊΠΎΠ΄Π° Π½Π° C++23. ВычисляСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (LOC, цикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΡΡ‚ΠΈΠ»ΡŒ имСнования) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tree-sitter ΠΈ std::ranges

License

Notifications You must be signed in to change notification settings

nmaks2012/CodeAnalyser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Анализатор Python-ΠΊΠΎΠ΄Π° Π½Π° C++

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ прСдставляСт собой статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° для языка Python, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° C++. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исходныС Ρ„Π°ΠΉΠ»Ρ‹, вычисляСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ использованиС соврСмСнных возмоТностСй C++ (Π² частности, C++20/23), особСнно Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² (std::ranges) для построСния Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности

  • ВычислСниС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ ΠΊΠΎΠ΄Π°:

    • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк ΠΊΠΎΠ΄Π° (LOC): ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ нСпустых строк, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ коммСнтариями.
    • ЦикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ слоТности ΠΊΠΎΠ΄Π° Π½Π° основС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… конструкций (if, for, while, try, assert ΠΈ Π΄Ρ€.).
    • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
    • Π‘Ρ‚ΠΈΠ»ΡŒ имСнования (Naming Style): ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ snake_case, camelCase, PascalCase ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… стилСй.
  • АгрСгация ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ:

    • Π‘ΡƒΠΌΠΌΠ° ΠΈ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ LOC ΠΈ цикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.
    • Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для количСства ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
    • ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ ΠΏΠΎ катСгориям для стилСй имСнования.
  • Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:

    • Анализ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
    • Анализ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… классов.
    • ΠžΠ±Ρ‰ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎ всСм Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ функциям.

ВСхнологичСский стСк

  • Π―Π·Ρ‹ΠΊ: C++20/23
  • БистСма сборки: CMake
  • ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ зависимостСй: Conan
  • ΠŸΠ°Ρ€ΡΠΈΠ½Π³ AST: tree-sitter
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: Boost.Program_options
  • ВСстированиС: GoogleTest
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…: std::ranges

Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹

graph TD
    subgraph "Π­Ρ‚Π°ΠΏ 1: ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°"
        A["Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (.py Ρ„Π°ΠΉΠ»Ρ‹)"] --> B("ΠŸΠ°Ρ€ΡΠΈΠ½Π³ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ");
    end

    subgraph "Π­Ρ‚Π°ΠΏ 2: Анализ"
        style C fill:#fff,stroke:#333,stroke-width:2px,stroke-dasharray: 5 5
        C("Набор ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ (LOC, Cyclomatic, etc.)")

        B --> D("ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°");
        C -.-> D;
    end
    
    subgraph "Π­Ρ‚Π°ΠΏ 3: АгрСгация"
        style F fill:#fff,stroke:#333,stroke-width:2px,stroke-dasharray: 5 5
        F("Набор аккумуляторов (Average, Sum, etc.)")

        D --> E("Π‘Ρ‹Ρ€Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹") --> G("ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ");
        F -.-> G;
    end

    subgraph "Π­Ρ‚Π°ΠΏ 4: Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚"
        G --> H["Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚"];
    end
Loading

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск

1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° окруТСния

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ conan для управлСния зависимостями ΠΈ cmake для сборки. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ установлСны. Для удобства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Dev Containers Π² Visual Studio Code.

2. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ для сборки
mkdir build && cd build

# Установка зависимостСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Conan (выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·)
# Для Debug-сборки:
conan install .. --settings=build_type=Debug --build=missing
# Для Release-сборки:
conan install .. --settings=build_type=Release --build=missing

# Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CMake ΠΈ Conan
# Для Debug-сборки:
conan build .. --settings=build_type=Debug
# Для Release-сборки:
conan build .. --settings=build_type=Release

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ для запуска прилоТСния

mkdir build ; cd build
conan install --settings=build_type=Debug ..
conan build --build=missing ..

./build/analyser -f files/sample.py

Команда для запуска тСстов

cd build
ctest --verbose

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ для запуска ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°

Π’ Visual Studio Code настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для запуска ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° находятся Π² .vscode/launch.json Ρ„Π°ΠΉΠ»Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом Ρ„Π°ΠΉΠ»Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° конфигурация Launch Analyser для запуска прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ python Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ вычисляСт для Π½ΠΈΡ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Ρ‚ΠΎ для запуска ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ F5 ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Run and Debug ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ клавиш Ctrl+Shift+D.

About

πŸ”¬ БтатичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Python-ΠΊΠΎΠ΄Π° Π½Π° C++23. ВычисляСт ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (LOC, цикломатичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΡΡ‚ΠΈΠ»ΡŒ имСнования) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tree-sitter ΠΈ std::ranges

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published