Got tree sitter integration to a shippable place

This commit is contained in:
Mikayla Maki 2022-12-05 11:29:52 -08:00
parent 30872d3992
commit 0921178b42
22 changed files with 88 additions and 544 deletions

View file

@ -0,0 +1,3 @@
("(" @open ")" @close)
("[" @open "]" @close)
("{" @open "}" @close)

View file

@ -1,9 +1,9 @@
name = "Scheme"
path_suffixes = ["scm", "ss", "mjs"]
path_suffixes = ["scm", "ss"]
line_comment = "; "
autoclose_before = "])"
brackets = [
{ start = "[", end = "]", close = true, newline = true },
{ start = "(", end = ")", close = true, newline = true },
{ start = "'", end = "'", close = false, newline = false },
{ start = "[", end = "]", close = true, newline = false },
{ start = "(", end = ")", close = true, newline = false },
{ start = "\"", end = "\"", close = true, newline = false },
]

View file

@ -1,3 +0,0 @@
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scheme/folds.scm
(program (list) @fold)

View file

@ -1,183 +1,28 @@
;; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scheme/highlights.scm
;; A highlight query can override the highlights queries before it.
;; So the order is important.
;; We should highlight general rules, then highlight special forms.
(number) @number
(character) @character
(boolean) @boolean
(string) @string
[(comment)
(block_comment)] @comment
;; highlight for datum comment
;; copied from ../clojure/highlights.scm
([(comment) (directive)] @comment
(#set! "priority" 105))
(escape_sequence) @string.escape
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
;; variables
(number) @number
(character) @constant.builtin
(boolean) @constant.builtin
(symbol) @variable
((symbol) @variable.builtin
(#any-of? @variable.builtin "..." "."))
(string) @string
;; procedure
(escape_sequence) @escape
(list
.
(symbol) @function)
;; special forms
(list
"["
(symbol)+ @variable
"]")
(list
.
(symbol) @_f
.
(list
(symbol) @variable)
(#any-of? @_f "lambda" "λ"))
(list
.
(symbol) @_f
.
(list
(list
(symbol) @variable))
(#any-of? @_f
"let" "let*" "let-syntax" "let-values" "let*-values" "letrec" "letrec*" "letrec-syntax"))
;; operators
[(comment)
(block_comment)
(directive)] @comment
((symbol) @operator
(#any-of? @operator
"+" "-" "*" "/" "=" "<=" ">=" "<" ">"))
;; keyword
((symbol) @keyword
(#any-of? @keyword
"define" "lambda" "λ" "begin" "do" "define-syntax"
"and" "or"
"if" "cond" "case" "when" "unless" "else" "=>"
"let" "let*" "let-syntax" "let-values" "let*-values" "letrec" "letrec*" "letrec-syntax"
"set!"
"syntax-rules" "identifier-syntax"
"quote" "unquote" "quote-splicing" "quasiquote" "unquote-splicing"
"delay"
"assert"
"library" "export" "import" "rename" "only" "except" "prefix"))
((symbol) @conditional
(#any-of? @conditional "if" "cond" "case" "when" "unless"))
;; quote
(abbreviation
"'"
(symbol)) @symbol
(#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$"))
(list
.
(symbol) @_f
(#eq? @_f "quote")) @symbol
;; library
.
(symbol) @function)
(list
.
(symbol) @_lib
.
(symbol) @namespace
(#eq? @_lib "library"))
;; builtin procedures
;; procedures in R5RS and R6RS but not in R6RS-lib
((symbol) @function.builtin
(#any-of? @function.builtin
;; eq
"eqv?" "eq?" "equal?"
;; number
"number?" "complex?" "real?" "rational?" "integer?"
"exact?" "inexact?"
"zero?" "positive?" "negative?" "odd?" "even?" "finite?" "infinite?" "nan?"
"max" "min"
"abs" "quotient" "remainder" "modulo"
"div" "div0" "mod" "mod0" "div-and-mod" "div0-and-mod0"
"gcd" "lcm" "numerator" "denominator"
"floor" "ceiling" "truncate" "round"
"rationalize"
"exp" "log" "sin" "cos" "tan" "asin" "acos" "atan"
"sqrt" "expt"
"exact-integer-sqrt"
"make-rectangular" "make-polar" "real-part" "imag-part" "magnitude" "angle"
"real-valued" "rational-valued?" "integer-valued?"
"exact" "inexact" "exact->inexact" "inexact->exact"
"number->string" "string->number"
;; boolean
"boolean?" "not" "boolean=?"
;; pair
"pair?" "cons"
"car" "cdr"
"caar" "cadr" "cdar" "cddr"
"caaar" "caadr" "cadar" "caddr" "cdaar" "cdadr" "cddar" "cdddr"
"caaaar" "caaadr" "caadar" "caaddr" "cadaar" "cadadr" "caddar" "cadddr"
"cdaaar" "cdaadr" "cdadar" "cdaddr" "cddaar" "cddadr" "cdddar" "cddddr"
"set-car!" "set-cdr!"
;; list
"null?" "list?"
"list" "length" "append" "reverse" "list-tail" "list-ref"
"map" "for-each"
"memq" "memv" "member" "assq" "assv" "assoc"
;; symbol
"symbol?" "symbol->string" "string->symbol" "symbol=?"
;; char
"char?" "char=?" "char<?" "char>?" "char<=?" "char>=?"
"char-ci=?" "char-ci<?" "char-ci>?" "char-ci<=?" "char-ci>=?"
"char-alphabetic?" "char-numeric?" "char-whitespace?" "char-upper-case?" "char-lower-case?"
"char->integer" "integer->char"
"char-upcase" "char-downcase"
;; string
"string?" "make-string" "string" "string-length" "string-ref" "string-set!"
"string=?" "string-ci=?" "string<?" "string>?" "string<=?" "string>=?"
"string-ci<?" "string-ci>?" "string-ci<=?" "string-ci>=?"
"substring" "string-append" "string->list" "list->string"
"string-for-each"
"string-copy" "string-fill!"
"string-upcase" "string-downcase"
;; vector
"vector?" "make-vector" "vector" "vector-length" "vector-ref" "vector-set!"
"vector->list" "list->vector" "vector-fill!" "vector-map" "vector-for-each"
;; bytevector
"bytevector?" "native-endianness"
"make-bytevector" "bytevector-length" "bytevector=?" "bytevector-fill!"
"bytevector-copy!" "bytevector-copy"
;; error
"error" "assertion-violation"
;; control
"procedure?" "apply" "force"
"call-with-current-continuation" "call/cc"
"values" "call-with-values" "dynamic-wind"
"eval" "scheme-report-environment" "null-environment" "interaction-environment"
;; IO
"call-with-input-file" "call-with-output-file" "input-port?" "output-port?"
"current-input-port" "current-output-port" "with-input-from-file" "with-output-to-file"
"open-input-file" "open-output-file" "close-input-port" "close-output-port"
;; input
"read" "read-char" "peek-char" "eof-object?" "char-ready?"
;; output
"write" "display" "newline" "write-char"
;; system
"load" "transcript-on" "transcript-off"))
.
(symbol) @keyword
(#match? @keyword
"^(define-syntax|let\\*|lambda|λ|case|=>|quote-splicing|unquote-splicing|set!|let|letrec|letrec-syntax|let-values|let\\*-values|do|else|define|cond|syntax-rules|unquote|begin|quote|let-syntax|and|if|quasiquote|letrec|delay|or|when|unless|identifier-syntax|assert|library|export|import|rename|only|except|prefix)$"
))

View file

@ -0,0 +1,3 @@
(_ "[" "]") @indent
(_ "{" "}") @indent
(_ "(" ")") @indent

View file

@ -1,3 +0,0 @@
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scheme/injections.scm
(comment) @comment

View file

@ -0,0 +1,10 @@
(list
.
(symbol) @start-symbol @context
.
[
(symbol) @name
(list . (symbol) @name)
]
(#match? @start-symbol "^define")
) @item