diff --git a/Cargo.lock b/Cargo.lock index 969b7b6..0f07b85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -252,9 +252,9 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "els" -version = "0.1.25" +version = "0.1.26-nightly.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcd32d4edf0238db4d013f535f48c18140576e2ec442b2450f76af4d0390c19" +checksum = "9cf50f787a8376384af8e7b074c489329669eeb1264f15f1a7f136102a003f2f" dependencies = [ "erg_common", "erg_compiler", @@ -274,9 +274,9 @@ dependencies = [ [[package]] name = "erg_common" -version = "0.6.13" +version = "0.6.14-nightly.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4b35305d26ff0fe55ec69aba95d85829371254698e2e5c8394beee1e1ee582c" +checksum = "c0d10554accd6de5e3f41e3db5931348320c89b9745a82635887f850dd77aadb" dependencies = [ "backtrace-on-stack-overflow", "hermit-abi", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "erg_compiler" -version = "0.6.13" +version = "0.6.14-nightly.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f5eaab1acfa0a27815bbc284bbb16189aae4d45757308986f836aa23e435c5" +checksum = "3570aa70c9f488516c6286280ae4d3343aed382b6c7881b784195af64350aa50" dependencies = [ "erg_common", "erg_parser", @@ -296,9 +296,9 @@ dependencies = [ [[package]] name = "erg_parser" -version = "0.6.13" +version = "0.6.14-nightly.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d54cbba3a394d9f0b16f85f835b040b454c4ba6b6530a67c3caff522c29d4" +checksum = "bfd44c03719e8051c7997263298e2b792da6138f818646d0eeae359f92bf0c60" dependencies = [ "erg_common", "unicode-xid 0.2.4", diff --git a/Cargo.toml b/Cargo.toml index f66dcca..eab392e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,9 +22,9 @@ edition = "2021" repository = "https://github.com/mtshiba/pylyzer" [workspace.dependencies] -erg_common = { version = "0.6.13", features = ["py_compat", "els"] } -erg_compiler = { version = "0.6.13", features = ["py_compat", "els"] } -els = { version = "0.1.25", features = ["py_compat"] } +erg_common = { version = "0.6.14-nightly.0", features = ["py_compat", "els"] } +erg_compiler = { version = "0.6.14-nightly.0", features = ["py_compat", "els"] } +els = { version = "0.1.26-nightly.0", features = ["py_compat"] } rustpython-parser = "0.1.2" # 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"] } diff --git a/src/analyze.rs b/src/analyze.rs index 597fcfe..5f21739 100644 --- a/src/analyze.rs +++ b/src/analyze.rs @@ -7,7 +7,9 @@ use erg_common::Str; use erg_compiler::artifact::{BuildRunnable, Buildable, CompleteArtifact, IncompleteArtifact}; use erg_compiler::context::register::CheckStatus; use erg_compiler::context::ModuleContext; -use erg_compiler::erg_parser::ast::AST; +use erg_compiler::erg_parser::ast::{AST, Module}; +use erg_compiler::erg_parser::error::ParseErrors; +use erg_compiler::erg_parser::parse::Parsable; use erg_compiler::error::{CompileError, CompileErrors}; use erg_compiler::lower::ASTLowerer; use erg_compiler::module::SharedCompilerResource; @@ -16,6 +18,28 @@ use rustpython_parser::parser; use crate::handle_err; +pub struct SimplePythonParser {} + +impl Parsable for SimplePythonParser { + fn parse(code: String) -> Result { + let py_program = parser::parse_program(&code).map_err(|_err| { + ParseErrors::empty() + })?; + let shadowing = if cfg!(feature = "debug") { + ShadowingMode::Visible + } else { + ShadowingMode::Invisible + }; + let converter = py2erg::ASTConverter::new(ErgConfig::default(), shadowing); + let IncompleteArtifact{ object: Some(erg_module), errors, .. } = converter.convert_program(py_program) else { unreachable!() }; + if errors.is_empty() { + Ok(erg_module) + } else { + Err(ParseErrors::empty()) + } + } +} + #[derive(Debug, Default)] pub struct PythonAnalyzer { pub cfg: ErgConfig, diff --git a/src/main.rs b/src/main.rs index 65b1d64..cf4bffa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ mod analyze; mod config; mod handle_err; -use analyze::PythonAnalyzer; +use analyze::{PythonAnalyzer, SimplePythonParser}; use els::Server; use erg_common::config::ErgMode; use erg_common::spawn::exec_new_thread; @@ -10,7 +10,7 @@ use erg_common::spawn::exec_new_thread; fn run() { let cfg = config::parse_args(); if cfg.mode == ErgMode::LanguageServer { - let mut lang_server = Server::::new(cfg); + let mut lang_server = Server::::new(cfg); lang_server.run().unwrap_or_else(|_| { std::process::exit(1); });