update dependencies

This commit is contained in:
Robin Appelman 2024-03-11 15:25:07 +01:00
commit 0ab25b7490
5 changed files with 138 additions and 122 deletions

View file

@ -1,23 +1,23 @@
[package] [package]
name = "php-literal-parser" name = "php-literal-parser"
description = "parser for php literals" description = "parser for php literals"
version = "0.5.1" version = "0.6.0"
authors = ["Robin Appelman <robin@icewind.nl>"] authors = ["Robin Appelman <robin@icewind.nl>"]
edition = "2018" edition = "2018"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
repository = "https://github.com/icewind1991/php-literal-parser" repository = "https://github.com/icewind1991/php-literal-parser"
documentation = "https://docs.rs/php-literal-parser" documentation = "https://docs.rs/php-literal-parser"
rust-version = "1.56" rust-version = "1.70"
[dependencies] [dependencies]
logos = "0.12.1" logos = "0.14.0"
thiserror = "1.0.38" thiserror = "1.0.57"
memchr = "2.5.0" memchr = "2.7.1"
serde = "1.0.152" serde = "1.0.197"
miette = "5.5.0" miette = "7.2.0"
parse-display = "0.8.0" parse-display = "0.9.0"
[dev-dependencies] [dev-dependencies]
maplit = "1.0.2" maplit = "1.0.2"
serde_derive = "1.0.152" serde_derive = "1.0.197"
miette = { version = "5.5.0", features = ["fancy"] } miette = { version = "7.2.0", features = ["fancy"] }

34
flake.lock generated
View file

@ -2,16 +2,16 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1674902473, "lastModified": 1710162809,
"narHash": "sha256-MdKJeeDTjCtmoVPWLEDg10jgknt6rqTO3c1WeNQtho4=", "narHash": "sha256-i2R2bcnQp+85de67yjgZVvJhd6rRnJbSYNpGmB6Leb8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "548896f4d9f7db2f7205d82727d6c03c86d2f896", "rev": "ddcd7598b2184008c97e6c9c6a21c5f37590b8d2",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "id": "nixpkgs",
"ref": "release-22.11", "ref": "release-23.11",
"type": "indirect" "type": "indirect"
} }
}, },
@ -21,13 +21,31 @@
"utils": "utils" "utils": "utils"
} }
}, },
"utils": { "systems": {
"locked": { "locked": {
"lastModified": 1667395993, "lastModified": 1681028828,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,7 +1,7 @@
{ {
inputs = { inputs = {
utils.url = "github:numtide/flake-utils"; utils.url = "github:numtide/flake-utils";
nixpkgs.url = "nixpkgs/release-22.11"; nixpkgs.url = "nixpkgs/release-23.11";
}; };
outputs = { outputs = {

View file

@ -298,7 +298,7 @@ impl<'source> ExpectToken<'source> for SpannedToken<'source> {
fn map_span(span: &Span) -> SourceSpan { fn map_span(span: &Span) -> SourceSpan {
SourceSpan::new( SourceSpan::new(
SourceOffset::from(span.start), SourceOffset::from(span.start),
SourceOffset::from(span.end - span.start), span.end - span.start,
) )
} }

View file

@ -3,6 +3,9 @@ use parse_display::Display;
use std::fmt::{Debug, Formatter}; use std::fmt::{Debug, Formatter};
#[derive(Logos, Debug, PartialEq, Clone, Copy, Display)] #[derive(Logos, Debug, PartialEq, Clone, Copy, Display)]
#[logos(skip r"(#|//)[^\n]*")]
#[logos(skip r"/\*([^*]|\*[^/])+\*/")]
#[logos(skip r"[ \t\n\f]+")]
pub enum Token { pub enum Token {
#[token("array")] #[token("array")]
#[display("'array'")] #[display("'array'")]
@ -43,11 +46,6 @@ pub enum Token {
#[token(";")] #[token(";")]
#[display("';'")] #[display("';'")]
SemiColon, SemiColon,
#[error]
#[regex(r"(#|//)[^\n]*", logos::skip)]
#[regex(r"/\*([^*]|\*[^/])+\*/", logos::skip)]
#[regex(r"[ \t\n\f]+", logos::skip)]
#[display("error")]
Error, Error,
} }
@ -70,72 +68,72 @@ fn test_lex() {
"###; "###;
let mut lex = Token::lexer(source); let mut lex = Token::lexer(source);
assert_eq!(lex.next(), Some(Token::Array)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Array));
assert_eq!(lex.next(), Some(Token::BracketOpen)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::BracketOpen));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::SquareOpen)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::SquareOpen));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::SquareClose)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::SquareClose));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::SquareOpen)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::SquareOpen));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::SquareClose)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::SquareClose));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::Bool)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Bool));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::Null)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Null));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::BracketClose)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::BracketClose));
assert_eq!(lex.next(), None); assert_eq!(lex.next().transpose().unwrap(), None);
} }
#[test] #[test]
@ -143,23 +141,23 @@ fn test_lex_int() {
let source = r###"0,123,0x123,0123,0b111,12_34_56"###; let source = r###"0,123,0x123,0123,0b111,12_34_56"###;
let mut lex = Token::lexer(source); let mut lex = Token::lexer(source);
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Integer)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Integer));
assert_eq!(lex.next(), None); assert_eq!(lex.next().transpose().unwrap(), None);
} }
#[test] #[test]
@ -167,23 +165,23 @@ fn test_lex_float() {
let source = r###".1,123.0,123e1,123e+1,123e-1,1_23.456"###; let source = r###".1,123.0,123e1,123e+1,123e-1,1_23.456"###;
let mut lex = Token::lexer(source); let mut lex = Token::lexer(source);
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::Float)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Float));
assert_eq!(lex.next(), None); assert_eq!(lex.next().transpose().unwrap(), None);
} }
#[test] #[test]
@ -198,15 +196,15 @@ fn test_lex_comments() {
"###; "###;
let mut lex = Token::lexer(source); let mut lex = Token::lexer(source);
assert_eq!(lex.next(), Some(Token::Array)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Array));
assert_eq!(lex.next(), Some(Token::BracketOpen)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::BracketOpen));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Arrow)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Arrow));
assert_eq!(lex.next(), Some(Token::LiteralString)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::LiteralString));
assert_eq!(lex.next(), Some(Token::Comma)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::Comma));
assert_eq!(lex.next(), Some(Token::BracketClose)); assert_eq!(lex.next().transpose().unwrap(), Some(Token::BracketClose));
} }
#[derive(Clone)] #[derive(Clone)]
@ -247,7 +245,7 @@ impl<'source> Iterator for TokenStream<'source> {
type Item = SpannedToken<'source>; type Item = SpannedToken<'source>;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
let token = self.lexer.next()?; let token = self.lexer.next()?.unwrap_or(Token::Error);
Some(SpannedToken { Some(SpannedToken {
token, token,
span: self.lexer.span(), span: self.lexer.span(),