mirror of
https://github.com/AleoHQ/leo.git
synced 2024-12-21 16:41:42 +03:00
parser binary: fail on syntax error
This commit is contained in:
parent
554e972503
commit
1257f0d55f
@ -15,25 +15,29 @@
|
|||||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
use leo_ast::Ast;
|
use leo_ast::Ast;
|
||||||
use leo_errors::{emitter::Handler, Result};
|
use leo_errors::emitter::Handler;
|
||||||
use leo_span::symbol::create_session_if_not_set_then;
|
use leo_span::symbol::create_session_if_not_set_then;
|
||||||
|
|
||||||
use std::{env, fs, path::Path};
|
use std::{env, fs, path::Path};
|
||||||
|
|
||||||
fn to_leo_tree(filepath: &Path) -> Result<String> {
|
fn to_leo_tree(filepath: &Path) -> Result<String, String> {
|
||||||
// Loads the Leo code as a string from the given file path.
|
// Loads the Leo code as a string from the given file path.
|
||||||
let program_filepath = filepath.to_path_buf();
|
let program_filepath = filepath.to_path_buf();
|
||||||
let program_string = fs::read_to_string(&program_filepath).expect("failed to open input file");
|
let code = fs::read_to_string(&program_filepath).expect("failed to open input file");
|
||||||
|
|
||||||
// Parses the Leo file constructing an ast which is then serialized.
|
// Parses the Leo file constructing an ast which is then serialized.
|
||||||
create_session_if_not_set_then(|_| {
|
create_session_if_not_set_then(|_| {
|
||||||
let handler = Handler::default();
|
Handler::with(|h| {
|
||||||
let ast = leo_parser::parse_ast(&handler, filepath.to_str().unwrap(), &program_string)?;
|
let ast = leo_parser::parse_ast(&h, filepath.to_str().unwrap(), &code)?;
|
||||||
Ok(Ast::to_json_string(&ast).expect("serialization failed"))
|
let json = Ast::to_json_string(&ast)?;
|
||||||
|
println!("{}", json);
|
||||||
|
Ok(json)
|
||||||
|
})
|
||||||
|
.map_err(|b| b.to_string())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<(), String> {
|
||||||
// Parse the command-line arguments as strings.
|
// Parse the command-line arguments as strings.
|
||||||
let cli_arguments = env::args().collect::<Vec<String>>();
|
let cli_arguments = env::args().collect::<Vec<String>>();
|
||||||
|
|
||||||
@ -51,7 +55,6 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
// Construct the serialized syntax tree.
|
// Construct the serialized syntax tree.
|
||||||
let serialized_leo_tree = to_leo_tree(input_filepath)?;
|
let serialized_leo_tree = to_leo_tree(input_filepath)?;
|
||||||
println!("{}", serialized_leo_tree);
|
|
||||||
|
|
||||||
// Determine the output directory.
|
// Determine the output directory.
|
||||||
let output_directory = match cli_arguments.len() == 3 {
|
let output_directory = match cli_arguments.len() == 3 {
|
||||||
|
Loading…
Reference in New Issue
Block a user