Add support for TOML

pull/261/head
Wilfred Hughes 2022-04-14 21:21:36 +07:00
parent b9aa884d0a
commit 6b24e28c28
11 changed files with 95 additions and 3 deletions

@ -2,7 +2,7 @@
### Parsing
Added support for Kotlin.
Added support for Kotlin and TOML.
Fixed an issue with YAML and `|` block strings.

@ -194,6 +194,11 @@ fn main() {
src_dir: "vendor/tree-sitter-scala-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-toml",
src_dir: "vendor/tree-sitter-toml-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-tsx",
src_dir: "vendor/tree-sitter-typescript-src/tsx/src",

@ -30,6 +30,7 @@ Difftastic uses the following tree-sitter parsers:
| 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)) |
| Scala | [tree-sitter/tree-sitter-scala](https://github.com/tree-sitter/tree-sitter-scala) |
| TOML | [ikatyang/tree-sitter-toml](https://github.com/ikatyang/tree-sitter-toml) |
| TypeScript, TSX | [tree-sitter/tree-sitter-typescript](https://github.com/tree-sitter/tree-sitter-typescript) |
| YAML | [ikatyang/tree-sitter-yaml](https://github.com/ikatyang/tree-sitter-yaml) |
| Zig | [maxxnino/tree-sitter-zig](https://github.com/maxxnino/tree-sitter-zig) |

@ -139,6 +139,9 @@ dfc3495b8d5931029b479f0c878a3219 -
sample_files/todomvc_before.gleam sample_files/todomvc_after.gleam
c1d8b44875121d81c583dd3a8fb43232 -
sample_files/toml_before.toml sample_files/toml_after.toml
9928c1f07b655860c27e2e1002d94106 -
sample_files/typing_before.ml sample_files/typing_after.ml
ceba89e4ffc8406454d337638c7d45e6 -

@ -0,0 +1,27 @@
# This is a TOML document
title = "TOML Example Changed"
[owner]
name = "Tom Preston-Werner"
dob = 2000-01-31T07:32:00-08:00
[database]
enabled = true
ports = [ 8000, 8002 ]
data = [ ["delta", "phi"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }
[servers]
[servers.alpha]
ip = "10.0.0.1"
role = "frontend"
[servers.beta]
ip = "10.0.0.2"
role = "backend"
str1 = """
Roses are red
Violets are blue"""

@ -0,0 +1,35 @@
# This is a TOML document
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00
[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
data = [ ["delta", "phi"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }
[servers]
[servers.alpha]
ip = "10.0.0.1"
role = "frontend"
[servers.beta]
ip = "10.0.0.2"
role = "backend"
str1 = """
Roses are red
Violets are blue"""
str2 = """\
The quick brown \
fox jumps over \
the lazy dog.\
"""
path = 'C:\Users\nodejs\templates'

@ -47,6 +47,7 @@ pub enum Language {
Ruby,
Rust,
Scala,
Toml,
Tsx,
TypeScript,
Yaml,
@ -117,6 +118,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"rust" => Some(Rust),
"scala" => Some(Scala),
"sh" => Some(Bash),
"toml" => Some(Toml),
"tuareg" => Some(OCaml),
"typescript" => Some(TypeScript),
"yaml" => Some(Yaml),
@ -175,6 +177,7 @@ fn from_name(path: &Path) -> Option<Language> {
".emacs" | "_emacs" | "Cask" => Some(EmacsLisp),
"TARGETS" | "BUCK" | "DEPS" => Some(Python),
"Gemfile" | "Rakefile" => Some(Ruby),
"Cargo.lock" | "Gopkg.lock" | "Pipfile" | "poetry.lock" => Some(Toml),
_ => None,
},
None => None,
@ -221,6 +224,7 @@ pub fn from_extension(extension: &OsStr) -> Option<Language> {
"rb" | "builder" | "spec" | "rake" => Some(Ruby),
"rs" => Some(Rust),
"scala" | "sbt" | "sc" => Some(Scala),
"toml" => Some(Toml),
"ts" => Some(TypeScript),
"tsx" => Some(Tsx),
"yaml" | "yml" => Some(Yaml),

@ -54,9 +54,9 @@ fn prefer_outer_delimiter(language: guess_language::Language) -> bool {
// For Lisp family languages, we get the best result with the
// outer delimiter.
EmacsLisp | Clojure | CommonLisp | JanetSimple => true,
// JSON is like Lisp: the outer delimiter in an array object
// JSON and TOML are like Lisp: the outer delimiter in an array object
// is the most relevant.
Json => true,
Json | Toml => true,
// For everything else, prefer the inner delimiter. These
// languages have syntax like `foo(bar)` or `foo[bar]` where
// the inner delimiter is more relevant.

@ -71,6 +71,7 @@ extern "C" {
fn tree_sitter_ruby() -> ts::Language;
fn tree_sitter_rust() -> ts::Language;
fn tree_sitter_scala() -> ts::Language;
fn tree_sitter_toml() -> ts::Language;
fn tree_sitter_tsx() -> ts::Language;
fn tree_sitter_typescript() -> ts::Language;
fn tree_sitter_yaml() -> ts::Language;
@ -538,6 +539,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Toml => {
let language = unsafe { tree_sitter_toml() };
TreeSitterConfig {
name: "TOML",
language,
atom_nodes: vec!["string"].into_iter().collect(),
delimiter_tokens: vec![("{", "}"), ("[", "]")],
highlight_query: ts::Query::new(
language,
include_str!("../vendor/highlights/toml.scm"),
)
.unwrap(),
}
}
TypeScript => {
let language = unsafe { tree_sitter_typescript() };
TreeSitterConfig {

@ -0,0 +1 @@
../tree-sitter-toml/queries/highlights.scm

@ -0,0 +1 @@
tree-sitter-toml/src