mirror of
https://github.com/mtshiba/pylyzer.git
synced 2025-10-20 17:31:46 +00:00
change checker: ASTLowerer -> PackageBuilder
This commit is contained in:
parent
e44f7f4a48
commit
2f919b2e6f
4 changed files with 192 additions and 284 deletions
264
Cargo.lock
generated
264
Cargo.lock
generated
|
@ -52,9 +52,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backtrace-on-stack-overflow"
|
name = "backtrace-on-stack-overflow"
|
||||||
version = "0.2.0"
|
version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d51cef6be4d7cb70701727ca9662b5b428833918c13c4095220763ba385ac9bd"
|
checksum = "7fd2d70527f3737a1ad17355e260706c1badebabd1fa06a7a053407380df841b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -73,22 +73,6 @@ version = "1.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "block-buffer"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
|
||||||
dependencies = [
|
|
||||||
"block-padding",
|
|
||||||
"generic-array",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "block-padding"
|
|
||||||
version = "0.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.83"
|
version = "1.0.83"
|
||||||
|
@ -110,15 +94,6 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
|
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cpufeatures"
|
|
||||||
version = "0.2.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crunchy"
|
name = "crunchy"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
|
@ -138,15 +113,6 @@ dependencies = [
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "digest"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "either"
|
name = "either"
|
||||||
version = "1.9.0"
|
version = "1.9.0"
|
||||||
|
@ -155,9 +121,7 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "els"
|
name = "els"
|
||||||
version = "0.1.34-nightly.1"
|
version = "0.1.36"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "936f90087d4e2af16d8a6253c5c54447413088ad85308c108b9103a1e223f484"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"erg_common",
|
"erg_common",
|
||||||
"erg_compiler",
|
"erg_compiler",
|
||||||
|
@ -181,9 +145,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "erg_common"
|
name = "erg_common"
|
||||||
version = "0.6.22-nightly.1"
|
version = "0.6.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "829b2830ee83e14ab2a07eac8cf693c4235e6a94dbdedb9dd7291aa623414e18"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace-on-stack-overflow",
|
"backtrace-on-stack-overflow",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
|
@ -192,9 +154,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "erg_compiler"
|
name = "erg_compiler"
|
||||||
version = "0.6.22-nightly.1"
|
version = "0.6.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc4f85efd95a0322cd27e8332bfc6020516a5dc17911facdd36c2138f8eb7186"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"erg_common",
|
"erg_common",
|
||||||
"erg_parser",
|
"erg_parser",
|
||||||
|
@ -202,9 +162,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "erg_parser"
|
name = "erg_parser"
|
||||||
version = "0.6.22-nightly.1"
|
version = "0.6.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1baa48eca2a9f1c2231fea0611cba222e096d46dcd9c3fb15f8a8442daf27481"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"erg_common",
|
"erg_common",
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
|
@ -219,27 +177,6 @@ dependencies = [
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.14.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
"version_check",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "getrandom"
|
|
||||||
version = "0.1.16"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
|
||||||
"wasi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.28.0"
|
version = "0.28.0"
|
||||||
|
@ -271,18 +208,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.9.0"
|
version = "0.10.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
|
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.10.5"
|
version = "0.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
@ -293,15 +230,6 @@ version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "keccak"
|
|
||||||
version = "0.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
|
|
||||||
dependencies = [
|
|
||||||
"cpufeatures",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lalrpop-util"
|
name = "lalrpop-util"
|
||||||
version = "0.20.0"
|
version = "0.20.0"
|
||||||
|
@ -310,15 +238,15 @@ checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.148"
|
version = "0.2.149"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
|
checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.10"
|
version = "0.4.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
|
checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
|
@ -345,9 +273,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malachite"
|
name = "malachite"
|
||||||
version = "0.3.2"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f6cf7f4730c30071ba374fac86ad35b1cb7a0716f774737768667ea3fa1828e3"
|
checksum = "220cb36c52aa6eff45559df497abe0e2a4c1209f92279a746a399f622d7b95c7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"malachite-base",
|
"malachite-base",
|
||||||
"malachite-nz",
|
"malachite-nz",
|
||||||
|
@ -356,22 +284,19 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malachite-base"
|
name = "malachite-base"
|
||||||
version = "0.3.2"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2b06bfa98a4b4802af5a4263b4ad4660e28e51e8490f6354eb9336c70767e1c5"
|
checksum = "6538136c5daf04126d6be4899f7fe4879b7f8de896dd1b4210fe6de5b94f2555"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools 0.9.0",
|
"itertools 0.11.0",
|
||||||
"rand 0.7.3",
|
|
||||||
"rand_chacha",
|
|
||||||
"ryu",
|
"ryu",
|
||||||
"sha3",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malachite-bigint"
|
name = "malachite-bigint"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a5110aee54537b0cef214efbebdd7df79b7408db8eef4f6a4b6db9d0d8fc01b"
|
checksum = "76c3eca3b5df299486144c8423c45c24bdf9e82e2452c8a1eeda547c4d8b5d41"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"malachite",
|
"malachite",
|
||||||
|
@ -382,22 +307,22 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malachite-nz"
|
name = "malachite-nz"
|
||||||
version = "0.3.2"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c89e21c64b7af5be3dc8cef16f786243faf59459fe4ba93b44efdeb264e5ade4"
|
checksum = "5f0b05577b7a3f09433106460b10304f97fc572f0baabf6640e6cb1e23f5fc52"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embed-doc-image",
|
"embed-doc-image",
|
||||||
"itertools 0.9.0",
|
"itertools 0.11.0",
|
||||||
"malachite-base",
|
"malachite-base",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "malachite-q"
|
name = "malachite-q"
|
||||||
version = "0.3.2"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3755e541d5134b5016594c9043094172c4dda9259b3ce824a7b8101941850360"
|
checksum = "a1cfdb4016292e6acd832eaee261175f3af8bbee62afeefe4420ebce4c440cb5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools 0.9.0",
|
"itertools 0.11.0",
|
||||||
"malachite-base",
|
"malachite-base",
|
||||||
"malachite-nz",
|
"malachite-nz",
|
||||||
]
|
]
|
||||||
|
@ -428,9 +353,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "molc"
|
name = "molc"
|
||||||
version = "0.2.6"
|
version = "0.2.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "76b41715c0dba18256b97ed045313b93baf8de0a665280220247390a7e801842"
|
checksum = "94e83b17c033b7b617f21f4a9ba52520dd473bb73a4e9132710c48aee5669095"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lsp-types",
|
"lsp-types",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -462,9 +387,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.16"
|
version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
|
checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
@ -484,12 +409,6 @@ version = "1.18.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opaque-debug"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
@ -502,9 +421,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot_core"
|
name = "parking_lot_core"
|
||||||
version = "0.9.8"
|
version = "0.9.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
|
checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -551,7 +470,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
|
checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"phf_shared",
|
"phf_shared",
|
||||||
"rand 0.8.5",
|
"rand",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -574,17 +493,11 @@ dependencies = [
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ppv-lite86"
|
|
||||||
version = "0.2.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.67"
|
version = "1.0.69"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
|
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
@ -620,45 +533,13 @@ dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand"
|
|
||||||
version = "0.7.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
|
|
||||||
dependencies = [
|
|
||||||
"getrandom",
|
|
||||||
"libc",
|
|
||||||
"rand_chacha",
|
|
||||||
"rand_core 0.5.1",
|
|
||||||
"rand_hc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.8.5"
|
version = "0.8.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_core 0.6.4",
|
"rand_core",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand_chacha"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
|
|
||||||
dependencies = [
|
|
||||||
"ppv-lite86",
|
|
||||||
"rand_core 0.5.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand_core"
|
|
||||||
version = "0.5.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
|
|
||||||
dependencies = [
|
|
||||||
"getrandom",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -667,20 +548,11 @@ version = "0.6.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rand_hc"
|
|
||||||
version = "0.2.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
|
|
||||||
dependencies = [
|
|
||||||
"rand_core 0.5.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.3.5"
|
version = "0.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
|
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
|
@ -777,35 +649,35 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "1.0.19"
|
version = "1.0.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
|
checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.188"
|
version = "1.0.190"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
|
checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.188"
|
version = "1.0.190"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
|
checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.37",
|
"syn 2.0.38",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.107"
|
version = "1.0.108"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
|
checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
|
@ -814,25 +686,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_repr"
|
name = "serde_repr"
|
||||||
version = "0.1.16"
|
version = "0.1.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
|
checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.37",
|
"syn 2.0.38",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "sha3"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
|
|
||||||
dependencies = [
|
|
||||||
"block-buffer",
|
|
||||||
"digest",
|
|
||||||
"keccak",
|
|
||||||
"opaque-debug",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -866,9 +726,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.37"
|
version = "2.0.38"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
|
checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -909,12 +769,6 @@ version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typenum"
|
|
||||||
version = "1.17.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unic-char-property"
|
name = "unic-char-property"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
@ -1012,18 +866,6 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version_check"
|
|
||||||
version = "0.9.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasi"
|
|
||||||
version = "0.9.0+wasi-snapshot-preview1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-targets"
|
name = "windows-targets"
|
||||||
version = "0.48.5"
|
version = "0.48.5"
|
||||||
|
|
12
Cargo.toml
12
Cargo.toml
|
@ -22,9 +22,9 @@ edition = "2021"
|
||||||
repository = "https://github.com/mtshiba/pylyzer"
|
repository = "https://github.com/mtshiba/pylyzer"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
erg_common = { version = "0.6.22-nightly.1", features = ["py_compat", "els"] }
|
# erg_common = { version = "0.6.22-nightly.1", features = ["py_compat", "els"] }
|
||||||
erg_compiler = { version = "0.6.22-nightly.1", features = ["py_compat", "els"] }
|
# erg_compiler = { version = "0.6.22-nightly.1", features = ["py_compat", "els"] }
|
||||||
els = { version = "0.1.34-nightly.1", features = ["py_compat"] }
|
# els = { version = "0.1.34-nightly.1", features = ["py_compat"] }
|
||||||
rustpython-parser = { version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
rustpython-parser = { version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
||||||
rustpython-ast = { version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
rustpython-ast = { version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
||||||
# rustpython-parser = { git = "https://github.com/RustPython/Parser", version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
# rustpython-parser = { git = "https://github.com/RustPython/Parser", version = "0.3.0", features = ["all-nodes-with-ranges", "location"] }
|
||||||
|
@ -32,9 +32,9 @@ rustpython-ast = { version = "0.3.0", features = ["all-nodes-with-ranges", "loca
|
||||||
# erg_compiler = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat", "els"] }
|
# erg_compiler = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat", "els"] }
|
||||||
# erg_common = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat", "els"] }
|
# erg_common = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat", "els"] }
|
||||||
# els = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat"] }
|
# els = { git = "https://github.com/erg-lang/erg", branch = "main", features = ["py_compat"] }
|
||||||
# erg_compiler = { path = "../erg/crates/erg_compiler", features = ["py_compat", "els"] }
|
erg_compiler = { path = "../erg/crates/erg_compiler", features = ["py_compat", "els"] }
|
||||||
# erg_common = { path = "../erg/crates/erg_common", features = ["py_compat", "els"] }
|
erg_common = { path = "../erg/crates/erg_common", features = ["py_compat", "els"] }
|
||||||
# els = { path = "../erg/crates/els", features = ["py_compat"] }
|
els = { path = "../erg/crates/els", features = ["py_compat"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
debug = ["erg_compiler/debug", "erg_common/debug", "py2erg/debug"]
|
debug = ["erg_compiler/debug", "erg_common/debug", "py2erg/debug"]
|
||||||
|
|
|
@ -1510,7 +1510,8 @@ impl ASTConverter {
|
||||||
let class = TypeSpec::mono(ident.clone());
|
let class = TypeSpec::mono(ident.clone());
|
||||||
let class_as_expr = Expr::Accessor(Accessor::Ident(ident));
|
let class_as_expr = Expr::Accessor(Accessor::Ident(ident));
|
||||||
let (base_type, attrs) = self.extract_method(body, inherit);
|
let (base_type, attrs) = self.extract_method(body, inherit);
|
||||||
let methods = Methods::new(class, class_as_expr, VisModifierSpec::Public(DOT), attrs);
|
self.block_id_counter += 1;
|
||||||
|
let methods = Methods::new(DefId(self.block_id_counter), class, class_as_expr, VisModifierSpec::Public(DOT), attrs);
|
||||||
(base_type, vec![methods])
|
(base_type, vec![methods])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
197
src/analyze.rs
197
src/analyze.rs
|
@ -2,36 +2,63 @@ use erg_common::config::ErgConfig;
|
||||||
use erg_common::error::{ErrorCore, ErrorKind, MultiErrorDisplay};
|
use erg_common::error::{ErrorCore, ErrorKind, MultiErrorDisplay};
|
||||||
use erg_common::style::colors::{BLUE, GREEN, RED, YELLOW};
|
use erg_common::style::colors::{BLUE, GREEN, RED, YELLOW};
|
||||||
use erg_common::style::RESET;
|
use erg_common::style::RESET;
|
||||||
use erg_common::traits::{ExitStatus, Runnable, Stream};
|
use erg_common::traits::{New, ExitStatus, Runnable, Stream};
|
||||||
use erg_common::Str;
|
use erg_common::Str;
|
||||||
|
use erg_compiler::GenericHIRBuilder;
|
||||||
use erg_compiler::artifact::{BuildRunnable, Buildable, CompleteArtifact, IncompleteArtifact};
|
use erg_compiler::artifact::{BuildRunnable, Buildable, CompleteArtifact, IncompleteArtifact};
|
||||||
|
use erg_compiler::build_package::GenericPackageBuilder;
|
||||||
use erg_compiler::context::register::CheckStatus;
|
use erg_compiler::context::register::CheckStatus;
|
||||||
use erg_compiler::context::ModuleContext;
|
use erg_compiler::context::ModuleContext;
|
||||||
use erg_compiler::erg_parser::ast::{Module, AST};
|
use erg_compiler::erg_parser::ast::{Module, AST};
|
||||||
|
use erg_compiler::erg_parser::build_ast::ASTBuildable;
|
||||||
use erg_compiler::erg_parser::error::{
|
use erg_compiler::erg_parser::error::{
|
||||||
CompleteArtifact as ParseArtifact, IncompleteArtifact as IncompleteParseArtifact, ParseErrors,
|
CompleteArtifact as ParseArtifact, IncompleteArtifact as IncompleteParseArtifact, ParseErrors, ParserRunnerErrors,
|
||||||
};
|
};
|
||||||
use erg_compiler::erg_parser::parse::Parsable;
|
use erg_compiler::erg_parser::parse::Parsable;
|
||||||
use erg_compiler::error::{CompileError, CompileErrors};
|
use erg_compiler::error::{CompileError, CompileErrors};
|
||||||
use erg_compiler::lower::ASTLowerer;
|
|
||||||
use erg_compiler::module::SharedCompilerResource;
|
use erg_compiler::module::SharedCompilerResource;
|
||||||
use py2erg::{dump_decl_er, reserve_decl_er, ShadowingMode};
|
use py2erg::{dump_decl_er, reserve_decl_er, ShadowingMode};
|
||||||
use rustpython_ast::source_code::RandomLocator;
|
use rustpython_ast::source_code::{RandomLocator, SourceRange};
|
||||||
use rustpython_ast::{Fold, ModModule};
|
use rustpython_ast::{Fold, ModModule};
|
||||||
use rustpython_parser::{Parse, ParseErrorType};
|
use rustpython_parser::{Parse, ParseErrorType};
|
||||||
|
|
||||||
use crate::handle_err;
|
use crate::handle_err;
|
||||||
|
|
||||||
pub struct SimplePythonParser {}
|
#[derive(Debug, Default)]
|
||||||
|
pub struct SimplePythonParser {
|
||||||
|
cfg: ErgConfig,
|
||||||
|
}
|
||||||
|
|
||||||
impl Parsable for SimplePythonParser {
|
impl Parsable for SimplePythonParser {
|
||||||
fn parse(code: String) -> Result<ParseArtifact, IncompleteParseArtifact<Module, ParseErrors>> {
|
fn parse(code: String) -> Result<ParseArtifact, IncompleteParseArtifact<Module, ParseErrors>> {
|
||||||
let py_program = ModModule::parse(&code, "<stdin>").map_err(|_err| ParseErrors::empty())?;
|
let mut slf = Self::new(ErgConfig::string(code.clone()));
|
||||||
let mut locator = RandomLocator::new(&code);
|
slf.build_ast(code)
|
||||||
// let mut locator = LinearLocator::new(&code);
|
.map(|art| {
|
||||||
let py_program = locator
|
ParseArtifact::new(art.ast.module, art.warns.into())
|
||||||
.fold(py_program)
|
})
|
||||||
.map_err(|_err| ParseErrors::empty())?;
|
.map_err(|iart| {
|
||||||
|
IncompleteParseArtifact::new(
|
||||||
|
iart.ast.map(|art| art.module),
|
||||||
|
iart.errors.into(),
|
||||||
|
iart.warns.into(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl New for SimplePythonParser {
|
||||||
|
fn new(cfg: ErgConfig) -> Self {
|
||||||
|
Self { cfg }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ASTBuildable for SimplePythonParser {
|
||||||
|
fn build_ast(
|
||||||
|
&mut self,
|
||||||
|
code: String,
|
||||||
|
) -> Result<ParseArtifact<AST, ParserRunnerErrors>, IncompleteParseArtifact<AST, ParserRunnerErrors>> {
|
||||||
|
let filename = self.cfg.input.filename();
|
||||||
|
let py_program = self.parse_py_code(code)?;
|
||||||
let shadowing = if cfg!(feature = "debug") {
|
let shadowing = if cfg!(feature = "debug") {
|
||||||
ShadowingMode::Visible
|
ShadowingMode::Visible
|
||||||
} else {
|
} else {
|
||||||
|
@ -39,32 +66,68 @@ impl Parsable for SimplePythonParser {
|
||||||
};
|
};
|
||||||
let converter = py2erg::ASTConverter::new(ErgConfig::default(), shadowing);
|
let converter = py2erg::ASTConverter::new(ErgConfig::default(), shadowing);
|
||||||
let IncompleteArtifact{ object: Some(erg_module), errors, warns } = converter.convert_program(py_program) else { unreachable!() };
|
let IncompleteArtifact{ object: Some(erg_module), errors, warns } = converter.convert_program(py_program) else { unreachable!() };
|
||||||
|
let erg_ast = AST::new(erg_common::Str::rc(&filename), erg_module);
|
||||||
if errors.is_empty() {
|
if errors.is_empty() {
|
||||||
Ok(ParseArtifact::new(erg_module, warns.into()))
|
Ok(ParseArtifact::new(erg_ast, warns.into()))
|
||||||
} else {
|
} else {
|
||||||
Err(IncompleteParseArtifact::new(
|
Err(IncompleteParseArtifact::new(
|
||||||
Some(erg_module),
|
Some(erg_ast),
|
||||||
warns.into(),
|
|
||||||
errors.into(),
|
errors.into(),
|
||||||
|
warns.into(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SimplePythonParser {
|
||||||
|
pub fn parse_py_code(&self, code: String) -> Result<ModModule<SourceRange>, IncompleteParseArtifact<AST, ParserRunnerErrors>>{
|
||||||
|
let py_program = ModModule::parse(&code, "<stdin>").map_err(|err| {
|
||||||
|
let mut locator = RandomLocator::new(&code);
|
||||||
|
// let mut locator = LinearLocator::new(&py_code);
|
||||||
|
let err = locator.locate_error::<_, ParseErrorType>(err);
|
||||||
|
let msg = err.to_string();
|
||||||
|
let loc = err.location.unwrap();
|
||||||
|
let core = ErrorCore::new(
|
||||||
|
vec![],
|
||||||
|
msg,
|
||||||
|
0,
|
||||||
|
ErrorKind::SyntaxError,
|
||||||
|
erg_common::error::Location::range(
|
||||||
|
loc.row.get(),
|
||||||
|
loc.column.to_zero_indexed(),
|
||||||
|
loc.row.get(),
|
||||||
|
loc.column.to_zero_indexed(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
let err = CompileError::new(core, self.cfg.input.clone(), "".into());
|
||||||
|
IncompleteParseArtifact::new(None, ParserRunnerErrors::from(err), ParserRunnerErrors::empty())
|
||||||
|
})?;
|
||||||
|
let mut locator = RandomLocator::new(&code);
|
||||||
|
// let mut locator = LinearLocator::new(&code);
|
||||||
|
let module = locator
|
||||||
|
.fold(py_program)
|
||||||
|
.map_err(|_err| ParserRunnerErrors::empty())?;
|
||||||
|
Ok(module)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct PythonAnalyzer {
|
pub struct PythonAnalyzer {
|
||||||
pub cfg: ErgConfig,
|
pub cfg: ErgConfig,
|
||||||
checker: ASTLowerer,
|
checker: GenericPackageBuilder<SimplePythonParser, GenericHIRBuilder<SimplePythonParser>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl New for PythonAnalyzer {
|
||||||
|
fn new(cfg: ErgConfig) -> Self {
|
||||||
|
let checker = GenericPackageBuilder::new(cfg.clone(), SharedCompilerResource::new(cfg.clone()));
|
||||||
|
Self { checker, cfg }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Runnable for PythonAnalyzer {
|
impl Runnable for PythonAnalyzer {
|
||||||
type Err = CompileError;
|
type Err = CompileError;
|
||||||
type Errs = CompileErrors;
|
type Errs = CompileErrors;
|
||||||
const NAME: &'static str = "Python Analyzer";
|
const NAME: &'static str = "Python Analyzer";
|
||||||
fn new(cfg: ErgConfig) -> Self {
|
|
||||||
let checker = ASTLowerer::new(cfg.clone());
|
|
||||||
Self { checker, cfg }
|
|
||||||
}
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn cfg(&self) -> &ErgConfig {
|
fn cfg(&self) -> &ErgConfig {
|
||||||
&self.cfg
|
&self.cfg
|
||||||
|
@ -95,17 +158,30 @@ impl Buildable for PythonAnalyzer {
|
||||||
let mod_name = Str::rc(&cfg.input.file_stem());
|
let mod_name = Str::rc(&cfg.input.file_stem());
|
||||||
Self {
|
Self {
|
||||||
cfg: cfg.copy(),
|
cfg: cfg.copy(),
|
||||||
checker: ASTLowerer::new_with_cache(cfg, mod_name, shared),
|
checker: GenericPackageBuilder::new_with_cache(cfg, mod_name, shared),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn inherit_with_name(cfg: ErgConfig, mod_name: Str, shared: SharedCompilerResource) -> Self {
|
||||||
|
Self {
|
||||||
|
cfg: cfg.copy(),
|
||||||
|
checker: GenericPackageBuilder::new_with_cache(cfg, mod_name, shared),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn build(&mut self, code: String, mode: &str) -> Result<CompleteArtifact, IncompleteArtifact> {
|
fn build(&mut self, code: String, mode: &str) -> Result<CompleteArtifact, IncompleteArtifact> {
|
||||||
self.analyze(code, mode)
|
self.analyze(code, mode)
|
||||||
}
|
}
|
||||||
|
fn build_from_ast(
|
||||||
|
&mut self,
|
||||||
|
ast: AST,
|
||||||
|
mode: &str,
|
||||||
|
) -> Result<CompleteArtifact<erg_compiler::hir::HIR>, IncompleteArtifact<erg_compiler::hir::HIR>> {
|
||||||
|
self.check(ast, CompileErrors::empty(), CompileErrors::empty(), mode)
|
||||||
|
}
|
||||||
fn pop_context(&mut self) -> Option<ModuleContext> {
|
fn pop_context(&mut self) -> Option<ModuleContext> {
|
||||||
self.checker.pop_mod_ctx()
|
self.checker.pop_context()
|
||||||
}
|
}
|
||||||
fn get_context(&self) -> Option<&ModuleContext> {
|
fn get_context(&self) -> Option<&ModuleContext> {
|
||||||
Some(self.checker.get_mod_ctx())
|
self.checker.get_context()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,53 +189,15 @@ impl BuildRunnable for PythonAnalyzer {}
|
||||||
|
|
||||||
impl PythonAnalyzer {
|
impl PythonAnalyzer {
|
||||||
pub fn new(cfg: ErgConfig) -> Self {
|
pub fn new(cfg: ErgConfig) -> Self {
|
||||||
Runnable::new(cfg)
|
New::new(cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn analyze(
|
fn check(&mut self, erg_ast: AST, mut errors: CompileErrors, mut warns: CompileErrors, mode: &str) -> Result<CompleteArtifact, IncompleteArtifact> {
|
||||||
&mut self,
|
match self.checker.build_module(erg_ast, mode) {
|
||||||
py_code: String,
|
|
||||||
mode: &str,
|
|
||||||
) -> Result<CompleteArtifact, IncompleteArtifact> {
|
|
||||||
let filename = self.cfg.input.filename();
|
|
||||||
let py_program = ModModule::parse(&py_code, &filename).map_err(|err| {
|
|
||||||
let mut locator = RandomLocator::new(&py_code);
|
|
||||||
// let mut locator = LinearLocator::new(&py_code);
|
|
||||||
let err = locator.locate_error::<_, ParseErrorType>(err);
|
|
||||||
let msg = err.to_string();
|
|
||||||
let loc = err.location.unwrap();
|
|
||||||
let core = ErrorCore::new(
|
|
||||||
vec![],
|
|
||||||
msg,
|
|
||||||
0,
|
|
||||||
ErrorKind::SyntaxError,
|
|
||||||
erg_common::error::Location::range(
|
|
||||||
loc.row.get(),
|
|
||||||
loc.column.to_zero_indexed(),
|
|
||||||
loc.row.get(),
|
|
||||||
loc.column.to_zero_indexed(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
let err = CompileError::new(core, self.cfg.input.clone(), "".into());
|
|
||||||
IncompleteArtifact::new(None, CompileErrors::from(err), CompileErrors::empty())
|
|
||||||
})?;
|
|
||||||
let mut locator = RandomLocator::new(&py_code);
|
|
||||||
// let mut locator = LinearLocator::new(&py_code);
|
|
||||||
let py_program = locator.fold(py_program).unwrap();
|
|
||||||
let shadowing = if cfg!(feature = "debug") {
|
|
||||||
ShadowingMode::Visible
|
|
||||||
} else {
|
|
||||||
ShadowingMode::Invisible
|
|
||||||
};
|
|
||||||
let converter = py2erg::ASTConverter::new(self.cfg.copy(), shadowing);
|
|
||||||
let IncompleteArtifact{ object: Some(erg_module), mut errors, mut warns } = converter.convert_program(py_program) else { unreachable!() };
|
|
||||||
let erg_ast = AST::new(erg_common::Str::rc(&filename), erg_module);
|
|
||||||
erg_common::log!("AST:\n{erg_ast}");
|
|
||||||
match self.checker.lower(erg_ast, mode) {
|
|
||||||
Ok(mut artifact) => {
|
Ok(mut artifact) => {
|
||||||
artifact.warns.extend(warns);
|
artifact.warns.extend(warns);
|
||||||
artifact.warns =
|
artifact.warns =
|
||||||
handle_err::filter_errors(self.checker.get_mod_ctx(), artifact.warns);
|
handle_err::filter_errors(self.get_context().unwrap(), artifact.warns);
|
||||||
if errors.is_empty() {
|
if errors.is_empty() {
|
||||||
Ok(artifact)
|
Ok(artifact)
|
||||||
} else {
|
} else {
|
||||||
|
@ -172,14 +210,41 @@ impl PythonAnalyzer {
|
||||||
}
|
}
|
||||||
Err(iart) => {
|
Err(iart) => {
|
||||||
errors.extend(iart.errors);
|
errors.extend(iart.errors);
|
||||||
let errors = handle_err::filter_errors(self.checker.get_mod_ctx(), errors);
|
let errors = handle_err::filter_errors(self.get_context().unwrap(), errors);
|
||||||
warns.extend(iart.warns);
|
warns.extend(iart.warns);
|
||||||
let warns = handle_err::filter_errors(self.checker.get_mod_ctx(), warns);
|
let warns = handle_err::filter_errors(self.get_context().unwrap(), warns);
|
||||||
Err(IncompleteArtifact::new(iart.object, errors, warns))
|
Err(IncompleteArtifact::new(iart.object, errors, warns))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn analyze(
|
||||||
|
&mut self,
|
||||||
|
py_code: String,
|
||||||
|
mode: &str,
|
||||||
|
) -> Result<CompleteArtifact, IncompleteArtifact> {
|
||||||
|
let filename = self.cfg.input.filename();
|
||||||
|
let parser = SimplePythonParser::new(self.cfg.copy());
|
||||||
|
let py_program = parser.parse_py_code(py_code)
|
||||||
|
.map_err(|iart| {
|
||||||
|
IncompleteArtifact::new(
|
||||||
|
None,
|
||||||
|
iart.errors.into(),
|
||||||
|
iart.warns.into(),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
let shadowing = if cfg!(feature = "debug") {
|
||||||
|
ShadowingMode::Visible
|
||||||
|
} else {
|
||||||
|
ShadowingMode::Invisible
|
||||||
|
};
|
||||||
|
let converter = py2erg::ASTConverter::new(self.cfg.copy(), shadowing);
|
||||||
|
let IncompleteArtifact{ object: Some(erg_module), errors, warns } = converter.convert_program(py_program) else { unreachable!() };
|
||||||
|
let erg_ast = AST::new(erg_common::Str::rc(&filename), erg_module);
|
||||||
|
erg_common::log!("AST:\n{erg_ast}");
|
||||||
|
self.check(erg_ast, errors, warns, mode)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run(&mut self) {
|
pub fn run(&mut self) {
|
||||||
if self.cfg.dist_dir.is_some() {
|
if self.cfg.dist_dir.is_some() {
|
||||||
reserve_decl_er(self.cfg.input.clone());
|
reserve_decl_er(self.cfg.input.clone());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue