为Python 3.0至3.12程序提供具有AST-like特性的具体语法树。
项目描述
Python的CST解析器和序列化库
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工具链来进行开发。
我们建议使用
然后,首先设置并构建项目
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。
项目详情
哈希值 for libcst-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5da9d7dc83801aba3b8d911f82dc1a375db0d508318bad79d9fb245374afe068 |
|
MD5 | d7d2ce60bffaae653eb15e5cf5cd6fa7 |
|
BLAKE2b-256 | 113830206bbcf31425f6fd01dae3cf23e35df790969243d39757ae743d8e6d67 |
哈希值 for libcst-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f6abce0e66bba2babfadc20530fd3688f672d565674336595b4623cd800b91ef |
|
MD5 | 4f27e49ed49db8d554dc55c4f3889803 |
|
BLAKE2b-256 | 081d3e2ab936e4195df82b764b02631a865b65dcf252772ddfe5265d384a883d |
哈希值 for libcst-1.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c54aa66c86d8ece9c93156a2cf5ca512b0dce40142fe9e072c86af2bf892411 |
|
MD5 | 98caa86e2f9fa7c80f01a16bce43a32c |
|
BLAKE2b-256 | 8c021c9c908724c732f09b11493ee5d61893060ecc9a3dc4bc80032d1be87b37 |
哈希值 for libcst-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 81653dea1cdfa4c6520a7c5ffb95fa4d220cbd242e446c7a06d42d8636bfcbba |
|
MD5 | f689348ed97395c0e82c8b86ebd7f832 |
|
BLAKE2b-256 | 618a84810ea960ede8d15266cc5e135165d92aadb08956136e53926b3e037829 |
哈希值 for libcst-1.4.0-cp312-cp312-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7ece51d935bc9bf60b528473d2e5cc67cbb88e2f8146297e40ee2c7d80be6f13 |
|
MD5 | 8a576e9013d45a1f5680e2272ecfe867 |
|
BLAKE2b-256 | 2f09e4374c8e9bde82a6197860b67ed0b0cd07c0fbc95fff035886382165a279 |
哈希值 for libcst-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f42797309bb725f0f000510d5463175ccd7155395f09b5e7723971b0007a976d |
|
MD5 | 57b35b8939a3d79303207562184cd8d2 |
|
BLAKE2b-256 | 50a12093f74a3f8936fcdaac01f86d1c5fa8f586202afa466a92332b9a461b14 |
哈希值 for libcst-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48601e3e590e2d6a7ab8c019cf3937c70511a78d778ab3333764531253acdb33 |
|
MD5 | 2de326cf3536ba7c98ebb8d5d44a52a5 |
|
BLAKE2b-256 | b8d7515b6187a900033467a4001bf8e2ed95f4961aa9bedf2bf39dfd68659157 |
哈希值 for libcst-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb4e42ea107a37bff7f9fdbee9532d39f9ea77b89caa5c5112b37057b12e0838 |
|
MD5 | ff916c939edc79444023c2af31a60567 |
|
BLAKE2b-256 | 0a6c1eb258b0eba8f337e1e9bd40574247310670c036a3913c9b650d6d9cd4de |
哈希值 for libcst-1.4.0-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3399e6c95df89921511b44d8c5bf6a75bcbc2d51f1f6429763609ba005c10f6b |
|
MD5 | 3d430dc7d01763bbcd66c2c3e346a734 |
|
BLAKE2b-256 | 5d82652e041aa6e14751a2ce41e68e281d9d5a32864ba11a363e103c429bf0e8 |
哈希值 for libcst-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e6227562fc5c9c1efd15dfe90b0971ae254461b8b6b23c1b617139b6003de1c1 |
|
MD5 | 046fea70913e4b8a8889491f5db00727 |
|
BLAKE2b-256 | 852c6bf8e4710afe1e0d45643e3726c0a956f5965555425cd7efa31e97cc7a6b |
哈希值 for libcst-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | addc6d585141a7677591868886f6bda0577529401a59d210aa8112114340e129 |
|
MD5 | 5db241f6e4013534239ea9bf275faa1a |
|
BLAKE2b-256 | 255f0df8f628122a5cd114b9edfbc673cb56070fdb295e355048a076a40d5974 |
哈希值 for libcst-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d1989fa12d3cd79118ebd29ebe2a6976d23d509b1a4226bc3d66fcb7cb50bd5d |
|
MD5 | 0bc5c8163c197203fb30b5802d97368d |
|
BLAKE2b-256 | e6c99cea10a2c2dcb120a793616ceac0ab9548c05edb06e4f824f6e88c86c8e8 |
哈希值 for libcst-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 17d71001cb25e94cfe8c3d997095741a8c4aa7a6d234c0f972bc42818c88dfaf |
|
MD5 | a98001d0f32dec0a0799a51fe5a5920a |
|
BLAKE2b-256 | 3f0d2db8d0df21eab1a10c89218123cabb667d7c546dff6253bdc56480d707e0 |
哈希值 for libcst-1.4.0-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3401dae41fe24565387a65baee3887e31a44e3e58066b0250bc3f3ccf85b1b5a |
|
MD5 | 6c19cf8f35b619ff8383d50eb6920519 |
|
BLAKE2b-256 | 534d8353b566a9c338b46af01f3758296d5646808dd314c0b686f77384c0d323 |
哈希值 for libcst-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 279b54568ea1f25add50ea4ba3d76d4f5835500c82f24d54daae4c5095b986aa |
|
MD5 | 1ca45198af6f9b6fffe8270529d2f604 |
|
BLAKE2b-256 | 09a200a395a95518626cfd67aeed1d3e9f39b82b5e42e025bea897e1226db41b |
哈希值 for libcst-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bb0abf627ee14903d05d0ad9b2c6865f1b21eb4081e2c7bea1033f85db2b8bae |
|
MD5 | 8e7dff1d9fa5dcc5e0c44675e104d550 |
|
BLAKE2b-256 | 95cfa2be91d53e4068d4def8b5cc475f20e1c1a7d32c85634ee7d6b3ea2e3c9b |
哈希值 for libcst-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 061d6855ef30efe38b8a292b7e5d57c8e820e71fc9ec9846678b60a934b53bbb |
|
MD5 | 280d21f7c329f0151c536c7653ae0b37 |
|
BLAKE2b-256 | c0c815ca337e5f5604aabed899609ba08abbc0e7815ffdfca37802da52d4d0bf |
哈希值 for libcst-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d024f44059a853b4b852cfc04fec33e346659d851371e46fc8e7c19de24d3da9 |
|
MD5 | 10b330b04f567b65499c9bc446568281 |
|
BLAKE2b-256 | 71da16307f14b47f761235050076e1d2954fc7de9346f1410ba8c67a54a9f40e |
哈希值 for libcst-1.4.0-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8e54c777b8d27339b70f304d16fc8bc8674ef1bd34ed05ea874bf4921eb5a313 |
|
MD5 | cb8248384af3d0dbc6397093cd1de8e0 |
|
BLAKE2b-256 | 7e0d89516795ff2a11be10c060c539895b3781793d46cb7c9b0b7b3c4fa3fbc1 |
哈希值 for libcst-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b8ecdba8934632b4dadacb666cd3816627a6ead831b806336972ccc4ba7ca0e9 |
|
MD5 | ea8ce726d41298ccd801d0e9c6c67753 |
|
BLAKE2b-256 | 7bb18476fe4fa1061062855459d519ffe2115a891638c230ee3465c69fdbfd7a |