Added experimental support for scheme, racket, and commonlisp
This commit is contained in:
parent
11c1254e71
commit
30872d3992
16 changed files with 613 additions and 14 deletions
30
Cargo.lock
generated
30
Cargo.lock
generated
|
@ -6461,6 +6461,15 @@ dependencies = [
|
||||||
"tree-sitter",
|
"tree-sitter",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tree-sitter-commonlisp"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "git+https://github.com/theHamsta/tree-sitter-commonlisp?rev=c7e814975ab0d0d04333d1f32391c41180c58919#c7e814975ab0d0d04333d1f32391c41180c58919"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"tree-sitter",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-cpp"
|
name = "tree-sitter-cpp"
|
||||||
version = "0.20.0"
|
version = "0.20.0"
|
||||||
|
@ -6566,6 +6575,15 @@ dependencies = [
|
||||||
"tree-sitter",
|
"tree-sitter",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tree-sitter-racket"
|
||||||
|
version = "0.0.1"
|
||||||
|
source = "git+https://github.com/6cdh/tree-sitter-racket?rev=69ca563af3bcf9d67220532e0814786f2dc34db1#69ca563af3bcf9d67220532e0814786f2dc34db1"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"tree-sitter",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-ruby"
|
name = "tree-sitter-ruby"
|
||||||
version = "0.20.0"
|
version = "0.20.0"
|
||||||
|
@ -6586,6 +6604,15 @@ dependencies = [
|
||||||
"tree-sitter",
|
"tree-sitter",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tree-sitter-scheme"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "git+https://github.com/6cdh/tree-sitter-scheme?rev=af0fd1fa452cb2562dc7b5c8a8c55551c39273b9#af0fd1fa452cb2562dc7b5c8a8c55551c39273b9"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"tree-sitter",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-toml"
|
name = "tree-sitter-toml"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
|
@ -7796,6 +7823,7 @@ dependencies = [
|
||||||
"toml",
|
"toml",
|
||||||
"tree-sitter",
|
"tree-sitter",
|
||||||
"tree-sitter-c",
|
"tree-sitter-c",
|
||||||
|
"tree-sitter-commonlisp",
|
||||||
"tree-sitter-cpp",
|
"tree-sitter-cpp",
|
||||||
"tree-sitter-css",
|
"tree-sitter-css",
|
||||||
"tree-sitter-elixir",
|
"tree-sitter-elixir",
|
||||||
|
@ -7805,8 +7833,10 @@ dependencies = [
|
||||||
"tree-sitter-json 0.20.0",
|
"tree-sitter-json 0.20.0",
|
||||||
"tree-sitter-markdown",
|
"tree-sitter-markdown",
|
||||||
"tree-sitter-python",
|
"tree-sitter-python",
|
||||||
|
"tree-sitter-racket",
|
||||||
"tree-sitter-ruby",
|
"tree-sitter-ruby",
|
||||||
"tree-sitter-rust",
|
"tree-sitter-rust",
|
||||||
|
"tree-sitter-scheme",
|
||||||
"tree-sitter-toml",
|
"tree-sitter-toml",
|
||||||
"tree-sitter-typescript",
|
"tree-sitter-typescript",
|
||||||
"unindent",
|
"unindent",
|
||||||
|
|
|
@ -104,6 +104,9 @@ tree-sitter-toml = { git = "https://github.com/tree-sitter/tree-sitter-toml", re
|
||||||
tree-sitter-typescript = "0.20.1"
|
tree-sitter-typescript = "0.20.1"
|
||||||
tree-sitter-ruby = "0.20.0"
|
tree-sitter-ruby = "0.20.0"
|
||||||
tree-sitter-html = "0.19.0"
|
tree-sitter-html = "0.19.0"
|
||||||
|
tree-sitter-scheme = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "af0fd1fa452cb2562dc7b5c8a8c55551c39273b9"}
|
||||||
|
tree-sitter-racket = { git = "https://github.com/6cdh/tree-sitter-racket", rev = "69ca563af3bcf9d67220532e0814786f2dc34db1"}
|
||||||
|
tree-sitter-commonlisp = { git = "https://github.com/theHamsta/tree-sitter-commonlisp", rev = "c7e814975ab0d0d04333d1f32391c41180c58919" }
|
||||||
url = "2.2"
|
url = "2.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -14,6 +14,7 @@ mod language_plugin;
|
||||||
mod python;
|
mod python;
|
||||||
mod ruby;
|
mod ruby;
|
||||||
mod rust;
|
mod rust;
|
||||||
|
|
||||||
mod typescript;
|
mod typescript;
|
||||||
|
|
||||||
// 1. Add tree-sitter-{language} parser to zed crate
|
// 1. Add tree-sitter-{language} parser to zed crate
|
||||||
|
@ -127,6 +128,9 @@ pub async fn init(languages: Arc<LanguageRegistry>, _executor: Arc<Background>)
|
||||||
tree_sitter_embedded_template::language(),
|
tree_sitter_embedded_template::language(),
|
||||||
Some(CachedLspAdapter::new(ruby::RubyLanguageServer).await),
|
Some(CachedLspAdapter::new(ruby::RubyLanguageServer).await),
|
||||||
),
|
),
|
||||||
|
("scheme", tree_sitter_scheme::language(), None),
|
||||||
|
// ("racket", tree_sitter_racket::language(), None),
|
||||||
|
("commonlisp", tree_sitter_commonlisp::language(), None),
|
||||||
] {
|
] {
|
||||||
languages.add(language(name, grammar, lsp_adapter));
|
languages.add(language(name, grammar, lsp_adapter));
|
||||||
}
|
}
|
||||||
|
|
9
crates/zed/src/languages/commonlisp/config.toml
Normal file
9
crates/zed/src/languages/commonlisp/config.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
name = "Racket"
|
||||||
|
path_suffixes = ["lisp", "lsp", "l", "cl"]
|
||||||
|
line_comment = "; "
|
||||||
|
autoclose_before = "])"
|
||||||
|
brackets = [
|
||||||
|
{ start = "[", end = "]", close = true, newline = true },
|
||||||
|
{ start = "(", end = ")", close = true, newline = true },
|
||||||
|
{ start = "'", end = "'", close = false, newline = false },
|
||||||
|
]
|
3
crates/zed/src/languages/commonlisp/folds.scm
Normal file
3
crates/zed/src/languages/commonlisp/folds.scm
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
;; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/commonlisp/folds.scm
|
||||||
|
|
||||||
|
(source (list_lit) @fold)
|
189
crates/zed/src/languages/commonlisp/highlights.scm
Normal file
189
crates/zed/src/languages/commonlisp/highlights.scm
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
;; Copied from nvim: https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/master/queries/commonlisp/highlights.scm
|
||||||
|
|
||||||
|
(sym_lit) @variable
|
||||||
|
|
||||||
|
;; A highlighting for functions/macros in th cl namespace is available in theHamsta/nvim-treesitter-commonlisp
|
||||||
|
;(list_lit . (sym_lit) @function.builtin (#cl-standard-function? @function.builtin))
|
||||||
|
;(list_lit . (sym_lit) @function.builtin (#cl-standard-macro? @function.macro))
|
||||||
|
|
||||||
|
(dis_expr) @comment
|
||||||
|
|
||||||
|
(defun_keyword) @function.macro
|
||||||
|
(defun_header
|
||||||
|
function_name: (_) @function)
|
||||||
|
(defun_header
|
||||||
|
lambda_list: (list_lit (sym_lit) @parameter))
|
||||||
|
(defun_header
|
||||||
|
keyword: (defun_keyword "defmethod")
|
||||||
|
lambda_list: (list_lit (list_lit . (sym_lit) . (sym_lit) @symbol)))
|
||||||
|
(defun_header
|
||||||
|
lambda_list: (list_lit (list_lit . (sym_lit) @parameter . (_))))
|
||||||
|
(defun_header
|
||||||
|
specifier: (sym_lit) @symbol)
|
||||||
|
|
||||||
|
[":" "::" "."] @punctuation.special
|
||||||
|
|
||||||
|
[
|
||||||
|
(accumulation_verb)
|
||||||
|
(for_clause_word)
|
||||||
|
"for"
|
||||||
|
"and"
|
||||||
|
"finally"
|
||||||
|
"thereis"
|
||||||
|
"always"
|
||||||
|
"when"
|
||||||
|
"if"
|
||||||
|
"unless"
|
||||||
|
"else"
|
||||||
|
"do"
|
||||||
|
"loop"
|
||||||
|
"below"
|
||||||
|
"in"
|
||||||
|
"from"
|
||||||
|
"across"
|
||||||
|
"repeat"
|
||||||
|
"being"
|
||||||
|
"into"
|
||||||
|
"with"
|
||||||
|
"as"
|
||||||
|
"while"
|
||||||
|
"until"
|
||||||
|
"return"
|
||||||
|
"initially"
|
||||||
|
] @function.macro
|
||||||
|
"=" @operator
|
||||||
|
|
||||||
|
(include_reader_macro) @symbol
|
||||||
|
["#C" "#c"] @number
|
||||||
|
|
||||||
|
[(kwd_lit) (self_referential_reader_macro)] @symbol
|
||||||
|
|
||||||
|
(package_lit
|
||||||
|
package: (_) @namespace)
|
||||||
|
"cl" @namespace
|
||||||
|
|
||||||
|
(str_lit) @string
|
||||||
|
|
||||||
|
(num_lit) @number
|
||||||
|
|
||||||
|
((sym_lit) @boolean (#match? @boolean "^(t|T)$"))
|
||||||
|
|
||||||
|
(nil_lit) @constant.builtin
|
||||||
|
|
||||||
|
(comment) @comment
|
||||||
|
|
||||||
|
;; dynamic variables
|
||||||
|
((sym_lit) @variable.builtin
|
||||||
|
(#match? @variable.builtin "^[*].+[*]$"))
|
||||||
|
|
||||||
|
;; quote
|
||||||
|
"'" @string.escape
|
||||||
|
(format_specifier) @string.escape
|
||||||
|
(quoting_lit) @string.escape
|
||||||
|
|
||||||
|
;; syntax quote
|
||||||
|
"`" @string.escape
|
||||||
|
"," @string.escape
|
||||||
|
",@" @string.escape
|
||||||
|
(syn_quoting_lit) @string.escape
|
||||||
|
(unquoting_lit) @none
|
||||||
|
(unquote_splicing_lit) @none
|
||||||
|
|
||||||
|
|
||||||
|
["(" ")"] @punctuation.bracket
|
||||||
|
|
||||||
|
(block_comment) @comment
|
||||||
|
|
||||||
|
|
||||||
|
(with_clause
|
||||||
|
type: (_) @type)
|
||||||
|
(for_clause
|
||||||
|
type: (_) @type)
|
||||||
|
|
||||||
|
;; defun-like things
|
||||||
|
(list_lit
|
||||||
|
.
|
||||||
|
(sym_lit) @function.macro
|
||||||
|
.
|
||||||
|
(sym_lit) @function
|
||||||
|
(#eq? @function.macro "deftest"))
|
||||||
|
|
||||||
|
;;; Macros and Special Operators
|
||||||
|
(list_lit
|
||||||
|
.
|
||||||
|
(sym_lit) @function.macro
|
||||||
|
;; For a complete and more efficient version install theHamsta/nvim-treesitter-commonlisp
|
||||||
|
(#any-of? @function.macro
|
||||||
|
"let"
|
||||||
|
"function"
|
||||||
|
"the"
|
||||||
|
"unwind-protect"
|
||||||
|
"labels"
|
||||||
|
"flet"
|
||||||
|
"tagbody"
|
||||||
|
"go"
|
||||||
|
"symbol-macrolet"
|
||||||
|
"symbol-macrolet"
|
||||||
|
"progn"
|
||||||
|
"prog1"
|
||||||
|
"error"
|
||||||
|
"or"
|
||||||
|
"and"
|
||||||
|
"defvar"
|
||||||
|
"defparameter"
|
||||||
|
"in-package"
|
||||||
|
"defpackage"
|
||||||
|
"case"
|
||||||
|
"ecase"
|
||||||
|
"typecase"
|
||||||
|
"etypecase"
|
||||||
|
"defstruct"
|
||||||
|
"defclass"
|
||||||
|
"if"
|
||||||
|
"when"
|
||||||
|
"unless"
|
||||||
|
"cond"
|
||||||
|
"switch"
|
||||||
|
"declaim"
|
||||||
|
"optimize"))
|
||||||
|
|
||||||
|
;; constant
|
||||||
|
((sym_lit) @constant
|
||||||
|
(#match? @constant "^[+].+[+]$"))
|
||||||
|
|
||||||
|
(var_quoting_lit
|
||||||
|
marker: "#'" @symbol
|
||||||
|
value: (_) @symbol)
|
||||||
|
|
||||||
|
["#" "#p" "#P"] @symbol
|
||||||
|
|
||||||
|
(list_lit
|
||||||
|
.
|
||||||
|
(sym_lit) @function.builtin
|
||||||
|
;; For a complete and more efficient version install theHamsta/nvim-treesitter-commonlisp
|
||||||
|
(#any-of? @function.builtin
|
||||||
|
"mapcar"
|
||||||
|
"reduce"
|
||||||
|
"remove-if-not"
|
||||||
|
"cons"
|
||||||
|
"car"
|
||||||
|
"last"
|
||||||
|
"nth"
|
||||||
|
"equal"
|
||||||
|
"cdr"
|
||||||
|
"first"
|
||||||
|
"rest"
|
||||||
|
"format"))
|
||||||
|
|
||||||
|
(list_lit
|
||||||
|
.
|
||||||
|
(sym_lit) @operator
|
||||||
|
(#match? @operator "^([+*-+=<>]|<=|>=|/=)$"))
|
||||||
|
|
||||||
|
|
||||||
|
((sym_lit) @symbol
|
||||||
|
(#match? @symbol "^[&]"))
|
||||||
|
|
||||||
|
[(array_dimension) "#0A" "#0a"] @number
|
||||||
|
|
||||||
|
(char_lit) @character
|
|
@ -35,6 +35,18 @@ pub(crate) struct GithubReleaseAsset {
|
||||||
pub browser_download_url: String,
|
pub browser_download_url: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub(crate) struct CodebergReleaseAsset {
|
||||||
|
pub name: String,
|
||||||
|
pub assets: Vec<GithubReleaseAsset>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub(crate) struct CodebergRelease {
|
||||||
|
pub name: String,
|
||||||
|
pub browser_download_url: String,
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn npm_package_latest_version(name: &str) -> Result<String> {
|
pub async fn npm_package_latest_version(name: &str) -> Result<String> {
|
||||||
let output = smol::process::Command::new("npm")
|
let output = smol::process::Command::new("npm")
|
||||||
.args(["info", name, "--json"])
|
.args(["info", name, "--json"])
|
||||||
|
@ -103,3 +115,12 @@ pub(crate) async fn latest_github_release(
|
||||||
serde_json::from_slice(body.as_slice()).context("error deserializing latest release")?;
|
serde_json::from_slice(body.as_slice()).context("error deserializing latest release")?;
|
||||||
Ok(release)
|
Ok(release)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pub(crate) async fn latest_codeberg_release(
|
||||||
|
// repo_name_with_owner: &str,
|
||||||
|
// http: Arc<dyn HttpClient>,
|
||||||
|
// ) -> anyhow::Result<CodebergRelease> {
|
||||||
|
// let mut response = http.get(uri, body, follow_redirects);
|
||||||
|
|
||||||
|
// bail!("unimplemented :(");
|
||||||
|
// }
|
||||||
|
|
9
crates/zed/src/languages/racket/config.toml
Normal file
9
crates/zed/src/languages/racket/config.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
name = "Racket"
|
||||||
|
path_suffixes = ["rkt"]
|
||||||
|
line_comment = "; "
|
||||||
|
autoclose_before = "])"
|
||||||
|
brackets = [
|
||||||
|
{ start = "[", end = "]", close = true, newline = true },
|
||||||
|
{ start = "(", end = ")", close = true, newline = true },
|
||||||
|
{ start = "'", end = "'", close = false, newline = false },
|
||||||
|
]
|
3
crates/zed/src/languages/racket/folds.scm
Normal file
3
crates/zed/src/languages/racket/folds.scm
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/racket/folds.scm
|
||||||
|
|
||||||
|
(program (list) @fold)
|
140
crates/zed/src/languages/racket/highlights.scm
Normal file
140
crates/zed/src/languages/racket/highlights.scm
Normal file
File diff suppressed because one or more lines are too long
4
crates/zed/src/languages/racket/injections.scm
Normal file
4
crates/zed/src/languages/racket/injections.scm
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/racket/injections.scm
|
||||||
|
|
||||||
|
[(comment)
|
||||||
|
(block_comment)] @comment
|
|
@ -1,14 +0,0 @@
|
||||||
("[" @open "]" @close)
|
|
||||||
("{" @open "}" @close)
|
|
||||||
("\"" @open "\"" @close)
|
|
||||||
("do" @open "end" @close)
|
|
||||||
|
|
||||||
(block_parameters "|" @open "|" @close)
|
|
||||||
(interpolation "#{" @open "}" @close)
|
|
||||||
|
|
||||||
(if "if" @open "end" @close)
|
|
||||||
(unless "unless" @open "end" @close)
|
|
||||||
(begin "begin" @open "end" @close)
|
|
||||||
(module "module" @open "end" @close)
|
|
||||||
(_ . "def" @open "end" @close)
|
|
||||||
(_ . "class" @open "end" @close)
|
|
9
crates/zed/src/languages/scheme/config.toml
Normal file
9
crates/zed/src/languages/scheme/config.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
name = "Scheme"
|
||||||
|
path_suffixes = ["scm", "ss", "mjs"]
|
||||||
|
line_comment = "; "
|
||||||
|
autoclose_before = "])"
|
||||||
|
brackets = [
|
||||||
|
{ start = "[", end = "]", close = true, newline = true },
|
||||||
|
{ start = "(", end = ")", close = true, newline = true },
|
||||||
|
{ start = "'", end = "'", close = false, newline = false },
|
||||||
|
]
|
3
crates/zed/src/languages/scheme/folds.scm
Normal file
3
crates/zed/src/languages/scheme/folds.scm
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scheme/folds.scm
|
||||||
|
|
||||||
|
(program (list) @fold)
|
183
crates/zed/src/languages/scheme/highlights.scm
Normal file
183
crates/zed/src/languages/scheme/highlights.scm
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
;; 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
|
||||||
|
|
||||||
|
(symbol) @variable
|
||||||
|
((symbol) @variable.builtin
|
||||||
|
(#any-of? @variable.builtin "..." "."))
|
||||||
|
|
||||||
|
;; procedure
|
||||||
|
|
||||||
|
(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
|
||||||
|
|
||||||
|
((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
|
||||||
|
|
||||||
|
(list
|
||||||
|
.
|
||||||
|
(symbol) @_f
|
||||||
|
(#eq? @_f "quote")) @symbol
|
||||||
|
|
||||||
|
;; library
|
||||||
|
|
||||||
|
(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"))
|
3
crates/zed/src/languages/scheme/injections.scm
Normal file
3
crates/zed/src/languages/scheme/injections.scm
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
; Copied from nvim: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/scheme/injections.scm
|
||||||
|
|
||||||
|
(comment) @comment
|
Loading…
Add table
Add a link
Reference in a new issue