Add SQL support

Closes #311
pull/315/head
Wilfred Hughes 2022-07-11 09:31:04 +07:00
parent a9fb2638d0
commit f2ca7cf314
7 changed files with 31 additions and 0 deletions

@ -2,6 +2,8 @@
### Parsing
Added SQL support.
Updated to the latest tree-sitter parsers for C#, Dart, Elm, Gleam,
Haskell, HCL, Java, JSON, OCaml, PHP, Python, Ruby, Scala and
TypeScript.

@ -228,6 +228,11 @@ fn main() {
src_dir: "vendor/tree-sitter-scala-src",
extra_files: vec!["scanner.c"],
},
TreeSitterParser {
name: "tree-sitter-sql",
src_dir: "vendor/tree-sitter-sql-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-swift",
src_dir: "vendor/tree-sitter-swift-src",

@ -60,6 +60,10 @@ fn prefer_outer_delimiter(language: guess_language::Language) -> bool {
// JSON and TOML are like Lisp: the outer delimiter in an array object
// is the most relevant.
Json | Toml | Hcl => true,
// It's probably the case that outer delimiters are used more
// frequently than inner delimiters in SQl. (foo = 1 OR bar = 2)
// is more likely than foo(1).
Sql => 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.

@ -52,6 +52,7 @@ pub enum Language {
Ruby,
Rust,
Scala,
Sql,
Swift,
Toml,
Tsx,
@ -127,6 +128,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"rust" => Some(Rust),
"scala" => Some(Scala),
"sh" => Some(Bash),
"sql" => Some(Sql),
"swift" => Some(Swift),
"toml" => Some(Toml),
"tuareg" => Some(OCaml),
@ -245,6 +247,7 @@ pub fn from_extension(extension: &OsStr) -> Option<Language> {
"rb" | "builder" | "spec" | "rake" => Some(Ruby),
"rs" => Some(Rust),
"scala" | "sbt" | "sc" => Some(Scala),
"sql" | "pgsql" => Some(Sql),
"swift" => Some(Swift),
"toml" => Some(Toml),
"ts" => Some(TypeScript),

@ -76,6 +76,7 @@ extern "C" {
fn tree_sitter_ruby() -> ts::Language;
fn tree_sitter_rust() -> ts::Language;
fn tree_sitter_scala() -> ts::Language;
fn tree_sitter_sql() -> ts::Language;
fn tree_sitter_swift() -> ts::Language;
fn tree_sitter_toml() -> ts::Language;
fn tree_sitter_tsx() -> ts::Language;
@ -650,6 +651,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Sql => {
let language = unsafe { tree_sitter_sql() };
TreeSitterConfig {
name: "SQL",
language,
atom_nodes: vec!["string", "identifier"].into_iter().collect(),
delimiter_tokens: vec![("(", ")")],
highlight_query: ts::Query::new(
language,
include_str!("../../vendor/highlights/sql.scm"),
)
.unwrap(),
}
}
Swift => {
let language = unsafe { tree_sitter_swift() };
TreeSitterConfig {

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

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