Support `proto` diffs using `tree-sitter-proto`

pull/884/head
Connor McCarthy 2025-03-20 16:25:50 +07:00 committed by Wilfred Hughes
parent 8402832c1c
commit 7984b49c37
5 changed files with 78 additions and 0 deletions

11
Cargo.lock generated

@ -295,6 +295,7 @@ dependencies = [
"tree-sitter-ocaml",
"tree-sitter-pascal",
"tree-sitter-php",
"tree-sitter-proto",
"tree-sitter-python",
"tree-sitter-ruby",
"tree-sitter-rust-orchard",
@ -1224,6 +1225,16 @@ dependencies = [
"tree-sitter-language",
]
[[package]]
name = "tree-sitter-proto"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e4360b434b5980fc397137ef29e1988619fef4159ac86fa7ac5777d459d3924"
dependencies = [
"cc",
"tree-sitter-language",
]
[[package]]
name = "tree-sitter-python"
version = "0.23.5"

@ -98,6 +98,7 @@ tree-sitter-objc = "3.0.2"
tree-sitter-ocaml = "0.23.2"
tree-sitter-pascal = "0.10.0"
tree-sitter-php = "0.23.11"
tree-sitter-proto = "0.2.0"
tree-sitter-python = "0.23.5"
tree-sitter-ruby = "0.23.1"
tree-sitter-rust-orchard = "0.13.0"

@ -61,6 +61,7 @@ pub(crate) enum Language {
Pascal,
Perl,
Php,
Proto,
Python,
Qml,
R,
@ -161,6 +162,7 @@ pub(crate) fn language_name(language: Language) -> &'static str {
Pascal => "Pascal",
Perl => "Perl",
Php => "PHP",
Proto => "Proto",
Python => "Python",
Qml => "QML",
R => "R",
@ -354,6 +356,7 @@ pub(crate) fn language_globs(language: Language) -> Vec<glob::Pattern> {
Php => &[
"*.php", "*.phtml", "*.php3", "*.php4", "*.php5", "*.php7", "*.phps",
],
Proto => &["*.proto"],
Python => &["*.py", "*.py3", "*.pyi", "*.bzl", "TARGETS", "BUCK", "DEPS"],
Qml => &["*.qml"],
R => &["*.R", "*.r", "*.rd", "*.rsx", ".Rprofile", "expr-dist"],

@ -839,6 +839,21 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig {
sub_languages: vec![],
}
}
Proto => {
let language_fn = tree_sitter_proto::LANGUAGE;
let language = tree_sitter::Language::new(language_fn);
TreeSitterConfig {
language: language.clone(),
atom_nodes: ["string"].into_iter().collect(),
delimiter_tokens: vec![("{", "}")],
highlight_query: ts::Query::new(
&language,
include_str!("../../vendored_parsers/highlights/proto.scm"),
)
.unwrap(),
sub_languages: vec![],
}
}
Python => {
let language_fn = tree_sitter_python::LANGUAGE;
let language = tree_sitter::Language::new(language_fn);

@ -0,0 +1,48 @@
[
"syntax"
"edition"
"package"
"option"
"import"
"service"
"rpc"
"returns"
"message"
"enum"
"oneof"
"repeated"
"reserved"
"to"
] @keyword
[
(key_type)
(type)
(message_name)
(enum_name)
(service_name)
(rpc_name)
]@type
(string) @string
[
(int_lit)
(float_lit)
] @number
[
(true)
(false)
] @constant.builtin
(comment) @comment
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket