跳转到主要内容

为Python 3.0至3.12程序提供具有AST-like特性的具体语法树。

项目描述

LibCST

Python的CST解析器和序列化库

Support Ukraine - Help Provide Humanitarian Aid to Ukraine. Documentation Github Actions CodeCov PYPI PYPI Download Notebook

LibCST将Python 3.0 -> 3.12源代码解析为CST树,保留了所有格式化细节(注释、空白、括号等)。它对于构建自动化重构(codemod)应用程序和linters非常有用。

LibCST 在抽象语法树(AST)和传统具体语法树(CST)之间提供了一个折中方案。通过仔细重组和命名节点类型和字段,我们创建了一个无损的CST,看起来和感觉都像AST。

您可以在LibCST提供的价值我们的项目动机中了解更多信息,请参阅我们的文档。您可以尝试使用笔记本示例

示例表达式

1 + 2

CST 表示

BinaryOperation(
    left=Integer(
        value='1',
        lpar=[],
        rpar=[],
    ),
    operator=Add(
        whitespace_before=SimpleWhitespace(
            value=' ',
        ),
        whitespace_after=SimpleWhitespace(
            value=' ',
        ),
    ),
    right=Integer(
        value='2',
        lpar=[],
        rpar=[],
    ),
    lpar=[],
    rpar=[],
)

入门指南

检查样本树

要检查从特定文件解析的树,请执行以下操作

python -m libcst.tool print <some_py_file.py>

或者,您可以将LibCST导入Python REPL,并使用包含的解析器和格式化打印函数

>>> import libcst as cst
>>> from libcst.tool import dump
>>> print(dump(cst.parse_expression("(1 + 2)")))
BinaryOperation(
  left=Integer(
    value='1',
  ),
  operator=Add(),
  right=Integer(
    value='2',
  ),
  lpar=[
    LeftParen(),
  ],
  rpar=[
    RightParen(),
  ],
)

有关更详细的用法示例,请参阅我们的文档

安装

LibCST 需要 Python 3.9+,并且可以使用大多数常见的Python打包工具轻松安装。我们建议从PyPI使用pip安装最新稳定版

pip install libcst

由于LibCST随附本机扩展,因此发布版以二进制轮和源代码的形式提供。如果您的系统(Linux/Windows x86/x64和Mac x64/arm)没有提供二进制轮,您需要一个最新的Rust工具链进行安装。

进一步阅读

开发

您需要一个最新的Rust工具链来进行开发。

我们建议使用来运行测试、linters等。

然后,首先设置并构建项目

git clone git@github.com:Instagram/LibCST.git libcst
cd libcst
hatch env create

要运行项目测试套件,您可以从以下位置运行

hatch run test

您也可以通过使用unittest并指定一个模块(如这样)来运行单个测试

hatch run python -m unittest libcst.tests.test_batched_visitor

有关如何运行测试的更多示例,请参阅unittest文档

我们有多款linters,包括版权检查和slotscheck来检查类__slots__的正确性。要运行所有linters

hatch run lint

我们使用ufmt来格式化代码。要运行符合规范的格式化更改,请在根目录下运行以下命令

hatch run format

构建

为了构建包含本机解析模块的LibCST,您需要在您的路径上安装Rust构建工具cargo。您通常可以使用系统包管理器安装cargo,但安装cargo最受欢迎的方法是使用rustup

要从native目录构建仅限本机解析器,请执行以下操作

cargo build

要从仓库根目录重建libcst.native模块,请执行以下操作

hatch env prune && hatch env create

类型检查

我们使用Pyre进行类型检查。

要验证库的类型,请在根目录下执行以下操作

hatch run typecheck

生成文档

要生成文档,请在根目录下执行以下操作

hatch run docs

未来

  • 提供高级完整存储库事实提供程序,例如完全限定名和调用图。

许可证

LibCST遵循MIT许可证,如LICENSE文件中所示。

隐私政策和使用条款

鸣谢

  • Guido van Rossum因创建解析器生成器pgen2(最初用于lib2to3,并从parso分支出来)。

  • David Halter为parso,它为LibCST提供了解析器和分词器。

  • Zac Hatfield-Dodds为集成hypothesis,这继续帮助我们找到错误。

  • 扎克·哈默(Zach Hammer)改进了类型注解以兼容 Mypy。

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解有关 安装软件包 的更多信息。

源代码发行版

libcst-1.4.0.tar.gz (771.4 kB 查看散列)

上传时间 源代码

构建发行版

libcst-1.4.0-cp312-cp312-win_amd64.whl (2.0 MB 查看散列)

上传时间 CPython 3.12 Windows x86-64

libcst-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

libcst-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

libcst-1.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

libcst-1.4.0-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

libcst-1.4.0-cp312-cp312-macosx_10_9_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

libcst-1.4.0-cp311-cp311-win_amd64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

libcst-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

libcst-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

libcst-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

libcst-1.4.0-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

libcst-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

libcst-1.4.0-cp310-cp310-win_amd64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

libcst-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

libcst-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

libcst-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

libcst-1.4.0-cp310-cp310-macosx_11_0_arm64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

libcst-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

libcst-1.4.0-cp39-cp39-win_amd64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

libcst-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

libcst-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

libcst-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

libcst-1.4.0-cp39-cp39-macosx_11_0_arm64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

libcst-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

由以下支持