Added F# support

pull/625/head
Mikhail Brinchuk 2024-01-28 12:11:53 +07:00
parent dff5172e54
commit 0e4723cf0e
5 changed files with 29 additions and 0 deletions

@ -151,6 +151,11 @@ fn main() {
src_dir: "vendored_parsers/tree-sitter-erlang-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-f-sharp",
src_dir: "vendored_parsers/tree-sitter-f-sharp-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-gleam",
src_dir: "vendored_parsers/tree-sitter-gleam-src",

@ -34,6 +34,7 @@ pub(crate) enum Language {
Elvish,
EmacsLisp,
Erlang,
FSharp,
Gleam,
Go,
Hack,
@ -122,6 +123,7 @@ pub(crate) fn language_name(language: Language) -> &'static str {
Elvish => "Elvish",
EmacsLisp => "Emacs Lisp",
Erlang => "Erlang",
FSharp => "F#",
Gleam => "Gleam",
Go => "Go",
Hack => "Hack",
@ -253,6 +255,7 @@ pub(crate) fn language_globs(language: Language) -> Vec<glob::Pattern> {
"*.yrl",
"Emakefile",
],
FSharp => &["*.fs", "*.fsx", "*.fsi"],
Gleam => &["*.gleam"],
Go => &["*.go"],
Hack => &["*.hack", "*.hck", "*.hhi"],
@ -482,6 +485,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"elm" => Some(Elm),
"elvish" => Some(Elvish),
"emacs-lisp" => Some(EmacsLisp),
"fsharp" => Some(FSharp),
"gleam" => Some(Gleam),
"go" => Some(Go),
"haskell" => Some(Haskell),

@ -76,6 +76,7 @@ extern "C" {
fn tree_sitter_elm() -> ts::Language;
fn tree_sitter_elvish() -> ts::Language;
fn tree_sitter_erlang() -> ts::Language;
fn tree_sitter_fsharp() -> ts::Language;
fn tree_sitter_gleam() -> ts::Language;
fn tree_sitter_go() -> ts::Language;
fn tree_sitter_hare() -> ts::Language;
@ -386,6 +387,23 @@ pub(crate) fn from_language(language: guess::Language) -> TreeSitterConfig {
sub_languages: vec![],
}
}
FSharp => {
let language = unsafe { tree_sitter_fsharp() };
TreeSitterConfig {
language,
atom_nodes: [
"string",
"triple_quoted_string"
].into(),
delimiter_tokens: vec![("(", ")"), ("[", "]"), ("{", "}")],
highlight_query: ts::Query::new(
language,
include_str!("../../vendored_parsers/highlights/f-sharp.scm"),
)
.unwrap(),
sub_languages: vec![],
}
}
Gleam => {
let language = unsafe { tree_sitter_gleam() };
TreeSitterConfig {

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

@ -0,0 +1 @@
tree-sitter-f-sharp/src