Metadata-Version: 2.4
Name: parser-ci-AP
Version: 0.1.42
Summary: C code parser based on Clang
Home-page: https://github.com/yourusername/parser-ci
Author: Александр
Author-email: sanyapetrooo@gmail.com
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: chardet==5.2.0
Requires-Dist: libclang==18.1.1
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Parser CI — C Parser на базе Clang

Инструмент для анализа C-проектов. Работает на базе libclang. Извлекает полезную информацию из исходников: функции, переменные, типы, макросы и контекст и тд.

# Что делает модуль? 
Объекту Project нужно скормить исходный код на языке си. За пару минут можно получить всю следующую информацию об исходном коде:

1. Информацию обо всех функциях:
   - имя;
   - тип и имя возвращаемого значения;
   - типы и имена аргументов функции;
   - исходный код функции;
   - шапку/комментарий перед функцией;
   - имена вызываемых внутри этой функции функций;
   - внешние данные которые использует функция;
   - является ли функция статической;
   - типы и имена локальных переменных функции;
   - все макросы которые использует функция;
2. Информацию обо всех дефайнах:
   - имя;
   - параметры (если они есть);
   - значение дефайна;
   - комментарий перед дефайном;
   - является ли флаг системным;
   - исходный код дефайна;
3. Информация обо всех переменных:
   - тип и имя переменной;
   - область видимости (static/global);
   - размер в байтах;
   - комментарий перед переменной;
   - исходный код переменной;
   - начальное значение; 
4. Информация о файлах проекта:
   - тип файла .c или .h;
   - кодировку файла;
   - исходный код файла;
   - возможные ошибки в файле;
   - все функции, переменные, дефайны и тд., которые есть именно в этом файле;
5. Информация обо всех типах struct:
   - поля;
   - размер;
   - исходный код;
   - комментарий;
6. Информация обо всех типах union:
   - поля;
   - размер;
   - исходный код;
   - комментарий;
7. Информация обо всех типах enum:
   - константы;
   - тип констант;
   - размер;
   - исходный код;
   - комментарий;
8. Информация обо всех типах typdef:
   - исходный код;
   - комментарий;
   - какой базовый тип он маскирует.
   
В коде все эти данные завернуты примерно так.
   ![img.png](images/img.png)

# Как использовать модуль?
Его можно установить через pip следующей командой:

**pip install parser-ci-AP**

И дальше в своем проекте/скрипте пишем.

**from parser_ci_AP import Project**

## Необязательные параметры Clang и точные зависимости

Прежний вызов `Project(root_path)` работает как раньше. Для проектов с собственными
флагами можно передать базу команд компиляции или аргументы Clang:

```python
from pathlib import Path
from parser_ci_AP import Project

project = Project(Path("my_c_project"), compile_commands="compile_commands.json")
# Или общие аргументы для всех файлов:
project = Project(Path("my_c_project"), clang_args=["-DFEATURE=1", "-Iinclude"])
# Для отдельных файлов: clang_args={Path("src/main.c"): ["-DFEATURE=1"]}
```

Новые поля не заменяют прежние: `ProjectFile.clang_args_used`,
`ProjectFile.resolved_includes`, `ProjectFile.direct_include_paths`,
`ProjectFile.declaration_records`, `ProjectFile.source_bytes`,
`FunctionInfo.symbol_references`, `FunctionInfo.called_function_refs`,
`FunctionInfo.variable_refs`, `FunctionInfo.type_refs`,
`FunctionInfo.macro_references` и `DefineInfo.full_source_text`. Они сохраняются
при `Project.save_obj`. Результат `extract_context_for_function` по-прежнему
имеет вид `{относительный_путь: исходный_текст}`. При компиляции полученного
мини-проекта используйте те же параметры Clang, особенно `-D` и пути `-I`.
