Update fsharp tree sitter repo reference (#11061)

The repository reference used here was a fork from the actual
repository, which has now been moved under ionide organization, where it is
in active maintenance and development.

The commit SHA is the currently latest commit from main branch.

The injections.scm is copied as is from the fsharp treesitter repo
[queries](https://github.com/ionide/tree-sitter-fsharp/blame/main/queries).

The locals.scm is copied from the repo and the capture names are to follow
the standard names:
- Replace @local.definition.var @local.definition.function, and @local.definition.parameter with @local.definition
- Remove (#set! "definition.function.scope" "parent")

The highlights.scm is copied as well from the fsharp
treesitter repo, but modified here to match helix highlight scopes based
on my best guesstimates. The changes made:

- Remove @spell scopes
- Split @comment into @comment.line and @comment.block
- Replace @comment.documentation with @comment.block.documentation
- Replace @character.special with @special
- Replace @variable.member with @variable.other.member
- Replace @type.definition with @type
- Replace @function.member with @function.method
- Replace @module with @namespace
- Replace @constant.macro with @function.macro
- Replace @property with @variable.other.member
- Replace @variable.member with @variable.other.member
- Replace @variable.parameter.builtin with @variable.builtin
- Replace @function.call with @function
- Replace @number with @constant.numeric.integer and @constant.numeric.float
- Replace @boolean with @constant.builtin.boolean
- Replace @keyword.conditional with @keyword.control.conditional
- Replace @keyword.return with @keyword.control.return
- Replace @keyword.repeate with @keyword.control.repeat
- Replace @keyword.import with @keyword.control.import
- Replace @keyword.modifier with @keyword.storage.modifier
- Replace @keyword.type with @keyword.storage.type
- Replace @keyword.exception with @keyword.control.exception
- Replace @module.builtin with @namespace
This commit is contained in:
Sampo Siltanen 2024-08-09 18:34:08 +03:00 committed by GitHub
parent f0282689da
commit 2e90868a37
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 278 additions and 109 deletions

View file

@ -3162,7 +3162,7 @@ language-servers = ["fsharp-ls"]
[[grammar]] [[grammar]]
name = "fsharp" name = "fsharp"
source = { git = "https://github.com/kaashyapan/tree-sitter-fsharp", rev = "18da392fd9bd5e79f357abcce13f61f3a15e3951" } source = { git = "https://github.com/ionide/tree-sitter-fsharp", rev = "996ea9982bd4e490029f84682016b6793940113b" }
[[language]] [[language]]
name = "t32" name = "t32"

View file

@ -1,16 +1,176 @@
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Literals and comments ;; Literals and comments
[ (line_comment) @comment.line
(line_comment)
(block_comment)
(block_comment_content)
] @comment
(block_comment) @comment.block
(xml_doc) @comment.block.documentation
(const
[
(_) @constant
(unit) @constant.builtin
])
(primary_constr_args (_) @variable.parameter)
((identifier_pattern (long_identifier (identifier) @special))
(#match? @special "^\_.*"))
((long_identifier
(identifier)+
.
(identifier) @variable.other.member))
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Punctuation ;; Punctuation
(wildcard_pattern) @string.special
(type_name type_name: (_) @type)
[
(type)
(atomic_type)
] @type
(member_signature
.
(identifier) @function.method
(curried_spec
(arguments_spec
"*"* @operator
(argument_spec
(argument_name_spec
"?"? @special
name: (_) @variable.parameter)))))
(union_type_case) @constant
(rules
(rule
pattern: (_) @constant
block: (_)))
(identifier_pattern
.
(_) @constant
.
(_) @variable)
(fsi_directive_decl . (string) @namespace)
(import_decl . (_) @namespace)
(named_module
name: (_) @namespace)
(namespace
name: (_) @namespace)
(module_defn
.
(_) @namespace)
(ce_expression
.
(_) @function.macro)
(field_initializer
field: (_) @variable.other.member)
(record_fields
(record_field
.
(identifier) @variable.other.member))
(dot_expression
base: (_) @namespace
field: (_) @variable.other.member)
(value_declaration_left . (_) @variable)
(function_declaration_left
. (_) @function
[
(argument_patterns)
(argument_patterns (long_identifier (identifier)))
] @variable.parameter)
(member_defn
(method_or_prop_defn
[
(property_or_ident) @function
(property_or_ident
instance: (identifier) @variable.builtin
method: (identifier) @function.method)
]
args: (_)* @variable.parameter))
(application_expression
.
[
(long_identifier_or_op [
(long_identifier (identifier)* (identifier) @function)
(identifier) @function
])
(typed_expression . (long_identifier_or_op (long_identifier (identifier)* . (identifier) @function.call)))
(dot_expression base: (_) @variable.other.member field: (_) @function)
] @function)
((infix_expression
.
(_)
.
(infix_op) @operator
.
(_) @function
)
(#eq? @operator "|>")
)
((infix_expression
.
(_) @function
.
(infix_op) @operator
.
(_)
)
(#eq? @operator "<|")
)
[
(xint)
(int)
(int16)
(uint16)
(int32)
(uint32)
(int64)
(uint64)
(nativeint)
(unativeint)
] @constant.numeric.integer
[
(ieee32)
(ieee64)
(float)
(decimal)
] @constant.numeric.float
(bool) @constant.builtin.boolean
([
(string)
(triple_quoted_string)
(verbatim_string)
(char)
] @string)
(compiler_directive_decl) @keyword.directive
(attribute) @attribute
[ [
"(" "("
")" ")"
@ -20,31 +180,40 @@
"]" "]"
"[|" "[|"
"|]" "|]"
"{|"
"|}"
"[<" "[<"
">]" ">]"
] @punctuation.bracket ] @punctuation.bracket
(format_string_eval
[
"{"
"}"
] @punctuation.special)
[ [
"," ","
";" ";"
] @punctuation.delimiter ] @punctuation.delimiter
[ [
"|" "|"
"=" "="
">" ">"
"<" "<"
"-" "-"
"~" "~"
"->"
"<-"
"&&"
"||"
":>"
":?>"
(infix_op) (infix_op)
(prefix_op) (prefix_op)
(symbolic_op)
] @operator ] @operator
(attribute) @attribute
[ [
"if" "if"
"then" "then"
@ -53,22 +222,29 @@
"when" "when"
"match" "match"
"match!" "match!"
] @keyword.control.conditional
[
"and" "and"
"or" "or"
"&&" "not"
"||" "upcast"
"then" "downcast"
] @keyword.control.conditional ] @keyword.operator
[ [
"return" "return"
"return!" "return!"
"yield"
"yield!"
] @keyword.control.return ] @keyword.control.return
[ [
"for" "for"
"while" "while"
] @keyword.control.return "downto"
"to"
] @keyword.control.repeat
[ [
@ -82,115 +258,93 @@
"delegate" "delegate"
"static" "static"
"inline" "inline"
"internal"
"mutable" "mutable"
"override" "override"
"private"
"public"
"rec" "rec"
"global"
(access_modifier)
] @keyword.storage.modifier ] @keyword.storage.modifier
[ [
"enum"
"let" "let"
"let!" "let!"
"use"
"use!"
"member" "member"
"module" ] @keyword.function
"namespace"
[
"enum"
"type" "type"
] @keyword.storage "inherit"
"interface"
] @keyword.storage.type
(try_expression
[
"try"
"with"
"finally"
] @keyword.control.exception)
((identifier) @keyword.control.exception
(#any-of? @keyword.control.exception "failwith" "failwithf" "raise" "reraise"))
[ [
"as" "as"
"assert" "assert"
"begin" "begin"
"end"
"done"
"default" "default"
"in"
"do" "do"
"do!" "do!"
"done"
"downcast"
"downto"
"end"
"event" "event"
"field" "field"
"finally"
"fun" "fun"
"function" "function"
"get" "get"
"global" "set"
"inherit"
"interface"
"lazy" "lazy"
"new" "new"
"not"
"null"
"of" "of"
"param" "param"
"property" "property"
"set"
"struct" "struct"
"try"
"upcast"
"use"
"use!"
"val" "val"
"module"
"namespace"
"with" "with"
"yield"
"yield!"
] @keyword ] @keyword
[ [
"true" "null"
"false" ] @constant.builtin
"unit"
] @constant.builtin
[ (match_expression "with" @keyword.control.conditional)
(type)
(const)
] @constant
[ ((type
(union_type_case) (long_identifier (identifier) @type.builtin))
(rules (rule (identifier_pattern))) (#any-of? @type.builtin "bool" "byte" "sbyte" "int16" "uint16" "int" "uint" "int64" "uint64" "nativeint" "unativeint" "decimal" "float" "double" "float32" "single" "char" "string" "unit"))
] @type.enum
(fsi_directive_decl (string) @namespace) (preproc_if
[
"#if" @keyword.directive
"#endif" @keyword.directive
]
condition: (_)? @keyword.directive)
[ (preproc_else
(import_decl (long_identifier)) "#else" @keyword.directive)
(named_module (long_identifier))
(namespace (long_identifier))
(named_module
name: (long_identifier) )
(namespace
name: (long_identifier) )
] @namespace
((long_identifier
(identifier)+ @namespace
.
(identifier)))
(dot_expression (long_identifier_or_op
base: (long_identifier_or_op) @variable.other.member (op_identifier) @operator)
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
((identifier) @namespace
(#any-of? @namespace "Array" "Async" "Directory" "File" "List" "Option" "Path" "Map" "Set" "Lazy" "Seq" "Task" "String" "Result" ))

View file

@ -0,0 +1,8 @@
([
(line_comment)
(block_comment_content)
] @injection.content
(#set! injection.language "comment"))
((xml_doc (xml_doc_content) @injection.content)
(#set! injection.language "xml"))

View file

@ -1,25 +1,32 @@
; Scopes (identifier) @local.reference
;-------
[ [
(ce_expression) (namespace)
(module_defn) (named_module)
(for_expression) (function_or_value_defn)
(do_expression)
(fun_expression)
(function_expression)
(try_expression)
(match_expression)
(elif_expression)
(if_expression)
] @local.scope ] @local.scope
; Definitions (value_declaration_left
;------------ .
[
(_ (identifier) @local.definition)
(_ (_ (identifier) @local.definition))
(_ (_ (_ (identifier) @local.definition)))
(_ (_ (_ (_ (identifier) @local.definition))))
(_ (_ (_ (_ (_ (identifier) @local.definition)))))
(_ (_ (_ (_ (_ (_ (identifier) @local.definition))))))
])
(function_or_value_defn) @local.definition (function_declaration_left
.
; References ((_) @local.definition)
;----------- ((argument_patterns
[
(identifier) @local.reference (_ (identifier) @local.definition)
(_ (_ (identifier) @local.definition))
(_ (_ (_ (identifier) @local.definition)))
(_ (_ (_ (_ (identifier) @local.definition))))
(_ (_ (_ (_ (_ (identifier) @local.definition)))))
(_ (_ (_ (_ (_ (_ (identifier) @local.definition))))))
])
))