Skip to content

Commit 24f2c59

Browse files
Add PHP support (#199)
1 parent 03dad24 commit 24f2c59

8 files changed

Lines changed: 116 additions & 0 deletions

File tree

Cargo.lock

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ members = [
99
"treeedb-javascript",
1010
"treeedb-rust",
1111
"treeedb-souffle",
12+
"treeedb-php",
1213
"treeedb-rust",
1314
"treeedb-swift",
1415
"treeedbgen",
@@ -18,6 +19,7 @@ members = [
1819
"treeedbgen-souffle-csharp",
1920
"treeedbgen-souffle-java",
2021
"treeedbgen-souffle-javascript",
22+
"treeedbgen-souffle-php",
2123
"treeedbgen-souffle-rust",
2224
"treeedbgen-souffle-souffle",
2325
"treeedbgen-souffle-swift",

treeedb-php/Cargo.toml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
[package]
2+
name = "treeedb-php"
3+
version = "0.1.0"
4+
edition = "2021"
5+
description = "Generate Datalog facts from PHP source code"
6+
keywords = ["datalog", "php", "parsing", "souffle"]
7+
authors = ["Langston Barrett <langston.barrett@gmail.com>"]
8+
license = "MIT"
9+
readme = "../README.md"
10+
homepage = "https://github.com/langston-barrett/treeedb"
11+
repository = "https://github.com/langston-barrett/treeedb"
12+
13+
[dependencies]
14+
anyhow = "1.0"
15+
treeedb = { version = "0.1.0", path = "../treeedb", features = ["cli"] }
16+
tree-sitter-php = { version = "^0.20" }

treeedb-php/src/main.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
use anyhow::Result;
2+
3+
fn main() -> Result<()> {
4+
treeedb::cli::main(tree_sitter_php::language())
5+
}

treeedbgen-souffle-php/Cargo.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "treeedbgen-souffle-php"
3+
version = "0.1.0"
4+
edition = "2021"
5+
description = "Generate Soufflé types and relations from the PHP tree-sitter grammar"
6+
keywords = ["datalog", "php", "parsing", "souffle"]
7+
authors = ["Langston Barrett <langston.barrett@gmail.com>"]
8+
license = "MIT"
9+
readme = "../README.md"
10+
homepage = "https://github.com/langston-barrett/treeedb"
11+
repository = "https://github.com/langston-barrett/treeedb"
12+
13+
[dependencies]
14+
anyhow = "1"
15+
treeedbgen-souffle = { version = "0.1.0", path = "../treeedbgen-souffle", features = ["cli"] }
16+
tree-sitter-php = { version = "^0.20" }
17+
18+
[dev-dependencies]
19+
assert_cmd = "2.0"
20+
predicates = "3.1"
21+
tempfile = "3"

treeedbgen-souffle-php/src/main.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
use anyhow::Result;
2+
3+
fn main() -> Result<()> {
4+
treeedbgen_souffle::cli::main(tree_sitter_php::NODE_TYPES)
5+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use std::process::Command;
2+
3+
use assert_cmd::prelude::*;
4+
use predicates::prelude::*;
5+
use tempfile::NamedTempFile;
6+
7+
#[test]
8+
fn test_gen() -> Result<(), Box<dyn std::error::Error>> {
9+
let mut cmd = Command::cargo_bin("treeedbgen-souffle-php")?;
10+
let tmp = NamedTempFile::new()?;
11+
cmd.arg("-o").arg(tmp.path());
12+
cmd.arg("--prefix=c").arg("--printsize");
13+
cmd.assert()
14+
.success()
15+
.stdout(predicate::str::is_empty())
16+
.stderr(predicate::str::is_empty());
17+
18+
let mut cmd = Command::cargo_bin("treeedb-php")?;
19+
cmd.arg("tests/php/hello-world.php");
20+
cmd.assert()
21+
.success()
22+
.stdout(predicate::str::is_empty())
23+
.stderr(predicate::str::is_empty());
24+
25+
let mut souffle = Command::new("souffle");
26+
souffle.arg(tmp.path());
27+
souffle
28+
.assert()
29+
.success()
30+
.stdout(predicate::str::contains("php_node\t17"))
31+
.stderr(predicate::str::is_empty());
32+
Ok(())
33+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
echo "Hello, World!";
3+
?>

0 commit comments

Comments
 (0)