
Biblioteca para permitir que os usuários inspecionem uma pasta de projeto de software (ou seja, um diretório e seus subdiretos) e extraia todas as informações mais relevantes, como documentação de classe, método e parâmetro, classes (e seus métodos), funções etc.
Dada uma pasta com código, inspect4py Will:
inspect4py retornará Library como seu tipo principal)Todos os metadados são extraídos como um arquivo JSON.
O Inspect4Py atualmente funciona apenas para projetos do Python 3 .
inspect4py adicionou a funcionalidade dos gráficos de fluxo de dados de captura para cada função inspirada no GraphCodebert: Github & Paper. A ilustração é dada:
| Código -fonte | Lista de saída | Imagem de Networkx |
|---|---|---|
def max (a, b): | ('a', 3, 'vem de', [], []) | ![]() |
inspect4py usa ASTs, mais especificamente o módulo AST em Python, gerando uma árvore de objetos (por arquivo) cujas classes herdam a Ast.ast.
inspect4py analisa cada um dos arquivos de entrada como uma árvore AST, extraindo as informações relevantes e armazenando -as como um arquivo JSON. Além disso, ele também captura o fluxo de controle de cada (s) arquivo (s) de entrada, usando outras duas bibliotecas:
Também usamos Docstring_Parser, que tem suporte para DocStrings de REST, Google e Numpydoc. Alguns testes (básicos) realizados usando esta biblioteca podem ser encontrados aqui.
Finalmente, reutilizamos o Picar para gerar automaticamente os requisitos de um determinado repositório. Esta é uma funcionalidade opcional. Para ativar o argumento ( -r ), deve ser indicado ao executar o Inspect4Py.
Cite nosso artigo de demonstração MSR 2022:
@inproceedings{FilgueiraG22,
author = {Rosa Filgueira and
Daniel Garijo},
title = {Inspect4py: {A} Knowledge Extraction Framework for Python Code Repositories},
booktitle = {{IEEE/ACM} 19th International Conference on Mining Software Repositories,
{MSR} 2022, Pittsburgh, PA, USA, May 23-24, 2022},
pages = {232--236},
publisher = {{IEEE}},
year = {2022},
url = {https://dgarijo.com/papers/inspect4py_MSR2022.pdf},
doi = {10.1145/3524842.3528497}
}
Certifique-se de instalar o Suster de Árvore, C Complier é necessário, mais informações:
pip install tree-sitter
Observe que, se o arquivo ".So" não estiver funcionando corretamente, é recomendável que execute os seguintes comuns para gerar um arquivo SO para o seu sistema operacional:
git clone https://github.com/tree-sitter/tree-sitter-python
python inspect4py/build.py
Certifique -se de ter o GraphViz instalado:
sudo apt-get install graphviz
Testamos inspect4py no Python 3.7+. Nossa versão recomendada é Python 3.9 .
Testamos inspect4py no Unix, MacOS e Windows 11 (22621.1265).
inspect4py está disponível no Pypi! Basta instalá -lo como um pacote regular:
pip install inspect4py
Você terminou!
Em seguida, tente atualizar os utilitários python-dev: sudo apt-get install python3.X-dev (onde x é sua versão python)
Prepare um Enviroment virtual Python3, cd na pasta inspect4py e instale o pacote da seguinte forma:
git clone https://github.com/SoftwareUnderstanding/inspect4py
cd inspect4py
pip install -e .
Você terminou!
docstring_parser==0.7
astor
graphviz
click
pigar
setuptools==54.2.0
json2html
configparser
bigcode_astgen
GitPython
tree-sitter
Se você deseja executar as avaliações, não se esqueça de adicionar pandas ao conjunto anterior.
Você precisa instalar o Docker.
Em seguida, clone o repositório inspect4py :
git clone https://github.com/SoftwareUnderstanding/inspect4py/
Gere uma imagem do Docker para inspect4py :
docker build --tag inspect4py:1.0 .
Execute a imagem inspect4py :
docker run -it --rm inspect4py:1.0 /bin/bash
Agora você pode executar inspect4py :
root@e04792563e6a:/# inspect4py --help
Para obter mais informações sobre as opções de execução inspect4py , consulte a seção abaixo (execução).
Observe que, ao executar inspect4py com o Docker, você precisará fornecer um caminho para o repositório de destino para analisar. Você pode fazer isso por:
docker run -it --rm inspect4py:1.0 /bin/bash
# Docker image starts
root@e04792563e6a:/# git clone https://github.com/repo/id
root@e04792563e6a:/# inspect4py -i id
docker run -it -v -v $PWD:/out --rm inspect4py:1.0 /bin/bash
# Docker image starts
root@e04792563e6a:/# inspect4py -i /out/path/to/repo
Outros comandos úteis ao usar o Docker:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker image rm -f inspect4py:1.0
A ferramenta pode ser executada para inspecionar um arquivo ou todos os arquivos de um determinado diretório (e seus subdiretos). Por exemplo, ele pode ser usado para inspecionar todos os arquivos Python de um determinado repositório do GitHub (que foi clonado anteriormente localmente).
A ferramenta, por padrão, armazena os resultados no diretório OutputDir , mas os usuários podem especificar seu próprio nome de diretório usando sinalizadores -o ou --output .
inspect4py --input_path <FILE.py | DIRECTORY> [--output_dir "OutputDir", --ignore_dir_pattern "__", ignore_file_pattern "__" --requirements --html_output]
Para maior clareza, adicionamos um comando help para explicar cada parâmetro de entrada:
inspect4py --help
Usage: inspect4py [OPTIONS]
Options:
--version Show the version and exit.
-i, --input_path TEXT input path of the file or directory to
inspect. [required]
-o, --output_dir TEXT output directory path to store results. If
the directory does not exist, the tool will
create it.
-ignore_dir, --ignore_dir_pattern TEXT
ignore directories starting with a certain
pattern. This parameter can be provided
multiple times to ignore multiple directory
patterns.
-ignore_file, --ignore_file_pattern TEXT
ignore files starting with a certain
pattern. This parameter can be provided
multiple times to ignore multiple file
patterns.
-r, --requirements find the requirements of the repository.
-html, --html_output generates an html file of the DirJson in the
output directory.
-cl, --call_list generates the call list in a separate html
file.
-cf, --control_flow generates the call graph for each file in a
different directory.
-dt, --directory_tree captures the file directory tree from the
root path of the target repository.
-si, --software_invocation generates which are the software
invocation commands to run and test the
target repository.
-ast, -—abstract_syntax_tree generates abstract syntax tree in json format.
-sc, --source_code generates source code of each ast node.
-ld, --license_detection detects the license of the target repository.
-rm, --readme extract all readme files in the target repository.
-md, --metadata extract metadata of the target repository using
Github API.
-df, --data_flow extract data flow graph for every function, BOOL
-st, --symbol_table symbol table file location. STR
--help Show this message and exit.
Para documentação e exemplos adicionais, dê uma olhada em nossa documentação online
As contribuições para abordar qualquer uma das questões atuais são bem -vindas. Para pressionar sua contribuição, basta empurrar sua solicitação de tração para a filial de desenvolvimento ( dev ) . A filial principal possui apenas o código associado à versão mais recente.
Gostaríamos de agradecer a Laura Camacho, designer do logotipo