Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit f3d66b8

Browse files
committed
chore: refactor project structure
Signed-off-by: azjezz <azjezz@protonmail.com>
1 parent be1ac39 commit f3d66b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2034
-1943
lines changed

bin/snapshot.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use php_parser_rs::{Lexer, Parser};
1+
use php_parser_rs::prelude::{Lexer, Parser};
22
use std::env;
33
use std::fs::read_dir;
44
use std::path::PathBuf;
@@ -41,7 +41,7 @@ fn main() {
4141
}
4242

4343
let code = std::fs::read_to_string(&code_filename).unwrap();
44-
let mut lexer = Lexer::new(None);
44+
let mut lexer = Lexer::new();
4545
let tokens = lexer.tokenize(code.as_bytes());
4646

4747
match tokens {

build.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ fn build_success_test(entry: PathBuf, code_filename: PathBuf, ast_filename: Path
8181
format!(
8282
r#"#[test]
8383
fn test_success_{}() {{
84-
use php_parser_rs::{{Lexer, Parser}};
84+
use php_parser_rs::prelude::Parser;
85+
use php_parser_rs::prelude::Lexer;
8586
use pretty_assertions::assert_str_eq;
8687
8788
let code_filename = "{}";
@@ -90,7 +91,7 @@ fn test_success_{}() {{
9091
let code = std::fs::read_to_string(&code_filename).unwrap();
9192
let expected_ast = std::fs::read_to_string(&ast_filename).unwrap();
9293
93-
let mut lexer = Lexer::new(None);
94+
let mut lexer = Lexer::new();
9495
let tokens = lexer.tokenize(code.as_bytes()).unwrap();
9596
let mut parser = Parser::new(None);
9697
let ast = parser.parse(tokens).unwrap();
@@ -113,7 +114,7 @@ fn build_lexer_error_test(
113114
format!(
114115
r#"#[test]
115116
fn test_lexer_error_{}() {{
116-
use php_parser_rs::Lexer;
117+
use php_parser_rs::prelude::Lexer;
117118
use pretty_assertions::assert_str_eq;
118119
119120
let code_filename = "{}";
@@ -122,7 +123,7 @@ fn test_lexer_error_{}() {{
122123
let code = std::fs::read_to_string(&code_filename).unwrap();
123124
let expected_error = std::fs::read_to_string(&lexer_error_filename).unwrap();
124125
125-
let mut lexer = Lexer::new(None);
126+
let mut lexer = Lexer::new();
126127
let error = lexer.tokenize(code.as_bytes()).err().unwrap();
127128
128129
assert_str_eq!(expected_error.trim(), format!("{{:?}}", error));
@@ -143,7 +144,8 @@ fn build_parser_error_test(
143144
format!(
144145
r#"#[test]
145146
fn test_paser_error_{}() {{
146-
use php_parser_rs::{{Lexer, Parser}};
147+
use php_parser_rs::prelude::Parser;
148+
use php_parser_rs::prelude::Lexer;
147149
use pretty_assertions::assert_str_eq;
148150
149151
let code_filename = "{}";
@@ -152,7 +154,7 @@ fn test_paser_error_{}() {{
152154
let code = std::fs::read_to_string(&code_filename).unwrap();
153155
let expected_error = std::fs::read_to_string(&parser_error_filename).unwrap();
154156
155-
let mut lexer = Lexer::new(None);
157+
let mut lexer = Lexer::new();
156158
let tokens = lexer.tokenize(code.as_bytes()).unwrap();
157159
158160
let mut parser = Parser::new(None);

src/ast.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::fmt::Display;
22

3-
use crate::{ByteString, TokenKind};
3+
use crate::lexer::byte_string::ByteString;
4+
use crate::lexer::token::TokenKind;
45

56
pub type Block = Vec<Statement>;
67
pub type Program = Block;
@@ -103,18 +104,6 @@ impl From<&ByteString> for Identifier {
103104
}
104105
}
105106

106-
impl From<&[u8]> for Identifier {
107-
fn from(name: &[u8]) -> Self {
108-
Self::from(ByteString::from(name))
109-
}
110-
}
111-
112-
impl From<&str> for Identifier {
113-
fn from(name: &str) -> Self {
114-
Self::from(ByteString::from(name))
115-
}
116-
}
117-
118107
pub type ParamList = Vec<Param>;
119108

120109
#[derive(Debug, PartialEq, Clone)]

src/lexer/error.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use std::fmt::Display;
2+
3+
use crate::lexer::token::Span;
4+
5+
pub type LexResult<T> = Result<T, SyntaxError>;
6+
7+
#[derive(Debug, Eq, PartialEq)]
8+
pub enum SyntaxError {
9+
UnexpectedEndOfFile(Span),
10+
UnexpectedError(Span),
11+
UnexpectedCharacter(u8, Span),
12+
InvalidHaltCompiler(Span),
13+
InvalidOctalEscape(Span),
14+
InvalidOctalLiteral(Span),
15+
InvalidUnicodeEscape(Span),
16+
}
17+
18+
impl Display for SyntaxError {
19+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20+
match self {
21+
Self::UnexpectedEndOfFile(span) => write!(
22+
f,
23+
"Syntax Error: unexpected end of file on line {} column {}",
24+
span.0, span.1
25+
),
26+
Self::UnexpectedError(span) => write!(
27+
f,
28+
"Syntax Error: unexpected error on line {} column {}",
29+
span.0, span.1
30+
),
31+
Self::UnexpectedCharacter(char, span) => write!(
32+
f,
33+
"Syntax Error: unexpected character `{:?}` on line {} column {}",
34+
*char as char, span.0, span.1
35+
),
36+
Self::InvalidHaltCompiler(span) => write!(
37+
f,
38+
"Syntax Error: invalid halt compiler on line {} column {}",
39+
span.0, span.1
40+
),
41+
Self::InvalidOctalEscape(span) => write!(
42+
f,
43+
"Syntax Error: invalid octal escape on line {} column {}",
44+
span.0, span.1
45+
),
46+
Self::InvalidOctalLiteral(span) => write!(
47+
f,
48+
"Syntax Error: invalid octal literal on line {} column {}",
49+
span.0, span.1
50+
),
51+
Self::InvalidUnicodeEscape(span) => write!(
52+
f,
53+
"Syntax Error: invalid unicode escape on line {} column {}",
54+
span.0, span.1
55+
),
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)