change checker: ASTLowerer -> PackageBuilder

This commit is contained in:
Shunsuke Shibayama 2023-11-03 17:20:39 +09:00
parent e44f7f4a48
commit 2f919b2e6f
4 changed files with 192 additions and 284 deletions

264
Cargo.lock generated
View file

@ -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"

View file

@ -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"]

View file

@ -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])
} }

View file

@ -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());