From d25bae844c2a13f9d91c34a9016c3c6fd5cc26dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Sun, 22 May 2022 00:00:05 +0900 Subject: [PATCH] Add Scheme support Skipped scm for now :/ it overlaps with tree-sitter-tsq --- languages.toml | 13 ++++ runtime/queries/scheme/highlights.scm | 100 ++++++++++++++++++++++++++ runtime/queries/scheme/injections.scm | 5 ++ 3 files changed, 118 insertions(+) create mode 100644 runtime/queries/scheme/highlights.scm create mode 100644 runtime/queries/scheme/injections.scm diff --git a/languages.toml b/languages.toml index 5deed3576..d3c4ef435 100644 --- a/languages.toml +++ b/languages.toml @@ -1366,3 +1366,16 @@ roots = [] [[grammar]] name = "sshclientconfig" source = { git = "https://github.com/metio/tree-sitter-ssh-client-config", rev = "769d7a01a2e5493b4bb5a51096c6bf4be130b024" } + +[[language]] +name = "scheme" +scope = "source.scheme" +injection-regex = "scheme" +file-types = ["ss", "rkt"] # "scm", +roots = [] +comment-token = ";" +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "scheme" +source = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "27fb77db05f890c2823b4bd751c6420378df146b" } diff --git a/runtime/queries/scheme/highlights.scm b/runtime/queries/scheme/highlights.scm new file mode 100644 index 000000000..3b7a42755 --- /dev/null +++ b/runtime/queries/scheme/highlights.scm @@ -0,0 +1,100 @@ +(number) @constant.numeric +(character) @constant.character +(boolean) @constant.builtin.boolean + +[(string) + (character)] @string + +(escape_sequence) @constant.character.escape + +[(comment) + (block_comment) + (directive)] @comment + +[(boolean) + (character)] @constant + +((symbol) @function.builtin + (#match? @function.builtin "^(eqv\\?|eq\\?|equal\\?)")) ; TODO + +; keywords + +((symbol) @keyword.conditional + (#match? @keyword.conditional "^(if|cond|case|when|unless)$")) + +((symbol) @keyword + (#match? @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)$")) + +; special forms + +(list + "[" + (symbol)+ @variable + "]") + +(list + . + (symbol) @_f + . + (list + (symbol) @variable) + (#eq? @_f "lambda")) + +(list + . + (symbol) @_f + . + (list + (list + (symbol) @variable)) + (#match? @_f + "^(let|let\\*|let-syntax|let-values|let\\*-values|letrec|letrec\\*|letrec-syntax)$")) + +; operators + +(list + . + (symbol) @operator + (#match? @operator "^([+*/<>=-]|(<=)|(>=))$")) + +; quote + +(abbreviation + "'" (symbol)) @constant + +(list + . + (symbol) @_f + (#eq? @_f "quote")) @symbol + +; library + +(list + . + (symbol) @_lib + . + (symbol) @namespace + + (#eq? @_lib "library")) + +; procedure + +(list + . + (symbol) @function) + +;; variables + +((symbol) @variable.builtin + (#eq? @variable.builtin "...")) + +(symbol) @variable +((symbol) @variable.builtin + (#eq? @variable.builtin ".")) + +(symbol) @variable + + +["(" ")" "[" "]" "{" "}"] @punctuation.bracket + diff --git a/runtime/queries/scheme/injections.scm b/runtime/queries/scheme/injections.scm new file mode 100644 index 000000000..aebb54d93 --- /dev/null +++ b/runtime/queries/scheme/injections.scm @@ -0,0 +1,5 @@ +((comment) @injection.content + (#set! injection.language "comment")) + +((block_comment) @injection.content + (#set! injection.language "comment"))