From 2ace6032e7de46893ee87d1a2ac425b9057fa061 Mon Sep 17 00:00:00 2001 From: kaashyapan <25821867+kaashyapan@users.noreply.github.com> Date: Sun, 16 Jul 2023 02:28:17 +0530 Subject: [PATCH] Add fsharp language support (#7619) --- book/src/generated/lang-support.md | 1 + languages.toml | 16 +++ runtime/queries/fsharp/highlights.scm | 196 ++++++++++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 runtime/queries/fsharp/highlights.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 65ebe3d38..403932c79 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -43,6 +43,7 @@ | fish | ✓ | ✓ | ✓ | | | forth | ✓ | | | `forth-lsp` | | fortran | ✓ | | ✓ | `fortls` | +| fsharp | ✓ | | | `fsautocomplete` | | gdscript | ✓ | ✓ | ✓ | | | git-attributes | ✓ | | | | | git-commit | ✓ | ✓ | | | diff --git a/languages.toml b/languages.toml index 2732546fb..233eb2f86 100644 --- a/languages.toml +++ b/languages.toml @@ -26,6 +26,7 @@ erlang-ls = { command = "erlang_ls" } forc = { command = "forc", args = ["lsp"] } forth-lsp = { command = "forth-lsp" } fortls = { command = "fortls", args = ["--lowercase_intrinsics"] } +fsharp-ls = { command = "fsautocomplete", config = { AutomaticWorkspaceInit = true } } gleam = { command = "gleam", args = ["lsp"] } haskell-language-server = { command = "haskell-language-server-wrapper", args = ["--lsp"] } idris2-lsp = { command = "idris2-lsp" } @@ -2661,6 +2662,21 @@ indent = { tab-width = 3, unit = " " } name = "forth" source = { git = "https://github.com/alexanderbrevig/tree-sitter-forth", rev = "304ed77beb113e37af38b20ff14e3c37bf350d10" } +[[language]] +name = "fsharp" +scope = "source.fs" +roots = ["sln", "fsproj"] +injection-regex = "fsharp" +file-types = ["fs", "fsx"] +comment-token = "//" +indent = { tab-width = 4, unit = " " } +auto-format = true +language-servers = ["fsharp-ls"] + +[[grammar]] +name = "fsharp" +source = { git = "https://github.com/kaashyapan/tree-sitter-fsharp", rev = "1b5a315e003024db6181744f1d25b8f525732665" } + [[language]] name = "t32" scope = "source.t32" diff --git a/runtime/queries/fsharp/highlights.scm b/runtime/queries/fsharp/highlights.scm new file mode 100644 index 000000000..68b70ba7d --- /dev/null +++ b/runtime/queries/fsharp/highlights.scm @@ -0,0 +1,196 @@ +;; ---------------------------------------------------------------------------- +;; Literals and comments + +[ + (line_comment) + (block_comment) + (block_comment_content) +] @comment + + +;; ---------------------------------------------------------------------------- +;; Punctuation + +[ + "(" + ")" + "{" + "}" + "[" + "]" + "[|" + "|]" + "[<" + ">]" +] @punctuation.bracket + +[ + "," + ";" +] @punctuation.delimiter + +[ + "|" + "=" + ">" + "<" + "-" + "~" + (infix_op) + (prefix_op) + (symbolic_op) +] @operator + + + +(attribute) @attribute + +[ + "if" + "then" + "else" + "elif" + "when" + "match" + "match!" + "and" + "or" + "&&" + "||" + "then" +] @keyword.control.conditional + +[ + "return" + "return!" +] @keyword.control.return + +[ + "for" + "while" +] @keyword.control.return + + +[ + "open" + "#r" + "#load" +] @keyword.control.import + +[ + "abstract" + "delegate" + "static" + "inline" + "internal" + "mutable" + "override" + "private" + "public" + "rec" +] @keyword.storage.modifier + +[ + "enum" + "let" + "let!" + "member" + "module" + "namespace" + "type" +] @keyword.storage + +[ + "as" + "assert" + "begin" + "default" + "do" + "do!" + "done" + "downcast" + "downto" + "end" + "event" + "field" + "finally" + "fun" + "function" + "get" + "global" + "inherit" + "interface" + "lazy" + "new" + "not" + "null" + "of" + "param" + "property" + "set" + "struct" + "try" + "upcast" + "use" + "use!" + "val" + "with" + "yield" + "yield!" +] @keyword + +[ + "true" + "false" + "unit" + ] @constant.builtin + +[ + (type) + (const) +] @constant + +[ + (union_type_case) + (rules (rule (identifier_pattern))) +] @type.enum + +(fsi_directive_decl (string) @namespace) + +[ + (import_decl (long_identifier)) + (named_module (long_identifier)) + (namespace (long_identifier)) + (named_module + name: (long_identifier) ) + (namespace + name: (long_identifier) ) +] @namespace + + +(dot_expression + base: (long_identifier_or_op) @variable.other.member + field: (long_identifier_or_op) @function) + +[ + ;;(value_declaration_left (identifier_pattern) ) + (function_declaration_left (identifier) ) + (call_expression (long_identifier_or_op (long_identifier))) + ;;(application_expression (long_identifier_or_op (long_identifier))) +] @function + +[ + (string) + (triple_quoted_string) +] @string + +[ + (int) + (int16) + (int32) + (int64) + (float) + (decimal) +] @constant.numeric + +