Adding support for PHP

pull/297/head
Wilfred Hughes 2022-03-09 23:52:31 +07:00
parent 51a4da6d7c
commit ed0bde6b91
7 changed files with 27 additions and 0 deletions

@ -4,6 +4,8 @@ Difftastic now requires Rust 1.56 to build.
### Parsing
Added support for PHP.
Fixed handling of `<` `>` delimiters in C++ and Rust.
### Diffing

@ -69,6 +69,7 @@ Difftastic supports the following languages:
* JavaScript (and JSX)
* JSON
* OCaml
* PHP
* Python
* Ruby
* Rust

@ -134,6 +134,11 @@ fn main() {
src_dir: "vendor/tree-sitter-ocaml-src/interface/src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-php",
src_dir: "vendor/tree-sitter-php-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-python",
src_dir: "vendor/tree-sitter-python-src",

@ -19,6 +19,7 @@ tool that understands syntax. It supports the following languages:
* JavaScript (and JSX)
* JSON
* OCaml
* PHP
* Python
* Ruby
* Rust

@ -19,6 +19,7 @@ Difftastic uses the following tree-sitter parsers:
| JavaScript, JSX | [tree-sitter/tree-sitter-javascript](https://github.com/tree-sitter/tree-sitter-javascript) |
| JSON | [tree-sitter/tree-sitter-json](https://github.com/tree-sitter/tree-sitter-json) |
| OCaml | [tree-sitter/tree-sitter-ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) |
| PHP | [tree-sitter/tree-sitter-php](https://github.com/tree-sitter/tree-sitter-php) |
| Python | [tree-sitter/tree-sitter-python](https://github.com/tree-sitter/tree-sitter-python) |
| Ruby | [tree-sitter/tree-sitter-ruby](https://github.com/tree-sitter/tree-sitter-ruby) |
| Rust | [tree-sitter/tree-sitter-rust](https://github.com/tree-sitter/tree-sitter-rust) ([forked](https://github.com/Wilfred/tree-sitter-rust)) |

@ -35,6 +35,7 @@ pub enum Language {
Jsx,
OCaml,
OCamlInterface,
Php,
Python,
Ruby,
Rust,
@ -190,6 +191,7 @@ fn from_extension(extension: &OsStr) -> Option<Language> {
"json" => Some(Json),
"ml" => Some(OCaml),
"mli" => Some(OCamlInterface),
"php" => Some(Php),
"py" | "py3" | "pyi" | "bzl" => Some(Python),
"rb" | "builder" | "spec" | "rake" => Some(Ruby),
"rs" => Some(Rust),

@ -59,6 +59,7 @@ extern "C" {
fn tree_sitter_json() -> ts::Language;
fn tree_sitter_ocaml() -> ts::Language;
fn tree_sitter_ocaml_interface() -> ts::Language;
fn tree_sitter_php() -> ts::Language;
fn tree_sitter_python() -> ts::Language;
fn tree_sitter_ruby() -> ts::Language;
fn tree_sitter_rust() -> ts::Language;
@ -333,6 +334,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Php => {
let language = unsafe { tree_sitter_php() };
TreeSitterConfig {
name: "PHP",
language,
atom_nodes: (vec!["string"]).into_iter().collect(),
delimiter_tokens: (vec![("(", ")"), ("[", "]"), ("{", "}")]),
highlight_query: ts::Query::new(
language,
include_str!("../vendor/highlights/php.scm"),
)
.unwrap(),
}
}
Python => {
let language = unsafe { tree_sitter_python() };
TreeSitterConfig {