From 1f7db485231b79f5f95b6464b70bdc55c63f84ff Mon Sep 17 00:00:00 2001 From: Mads Kjeldgaard Date: Tue, 2 Feb 2021 18:58:07 +0100 Subject: Add supercollider support --- lua/nvim-treesitter/parsers.lua | 1 + queries/supercollider/folds.scm | 7 +++ queries/supercollider/highlights.scm | 109 +++++++++++++++++++++++++++++++++++ queries/supercollider/indents.scm | 16 +++++ queries/supercollider/locals.scm | 36 ++++++++++++ 5 files changed, 169 insertions(+) create mode 100644 queries/supercollider/folds.scm create mode 100644 queries/supercollider/highlights.scm create mode 100644 queries/supercollider/indents.scm create mode 100644 queries/supercollider/locals.scm diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index abfef5bf..c80b0562 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -267,6 +267,7 @@ list.supercollider = { install_info = { url = "https://github.com/madskjeldgaard/tree-sitter-supercollider", files = {"src/parser.c", "src/scanner.c"}, + branch = "main", }, maintainers = {"@madskjeldgaard"}, filetype = "supercollider", diff --git a/queries/supercollider/folds.scm b/queries/supercollider/folds.scm new file mode 100644 index 00000000..214247bc --- /dev/null +++ b/queries/supercollider/folds.scm @@ -0,0 +1,7 @@ +[ +(function_call) +(code_block) +(function_block) +(control_structure) +] @fold + diff --git a/queries/supercollider/highlights.scm b/queries/supercollider/highlights.scm new file mode 100644 index 00000000..c5c3f750 --- /dev/null +++ b/queries/supercollider/highlights.scm @@ -0,0 +1,109 @@ +; highlights.scm +; See this for full list: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md + +; comments +(line_comment) @comment +(block_comment) @comment + +; Argument definition + +; Fixme: Should be attribute but nvim-treesitter doesn't supprt it at the moment +(argument name: (identifier) @parameter) +;(argument name: (identifier) @parameter) + +; Variables +(local_var name: (identifier) @variable) +(environment_var name:(identifier) @variable.builtin) +(builtin_var) @constant.builtin + +; (variable) @variable + +; Functions +(function_definition + name: (variable) @function) + +; For function calls +(named_argument + name: (identifier) @property) + +; Methods +(instance_method_call + name: (method_name) @function) +(class_method_call + name: (class_method_name) @method) + +; Classes +(class) @type + +; Literals +(number) @number +(pi_statement) @constant.builtin +(float) @float + +(string) @string +(symbol) @string.special + +; Operators +[ +"&&" +"||" +"&" +"|" +"^" +"==" +"!=" +"<" +"<=" +">" +">=" +"<<" +">>" +"+" +"-" +"*" +"/" +"%" +"=" +] @operator + + +; Keywords +[ +"arg" +"classvar" +; "const" +; "super" +; "this" +"var" +] @type.builtin + +; Brackets +[ + "(" + ")" + "[" + "]" + "{" + "}" + "|" +] @punctuation.bracket + +; Delimeters +[ + ";" + "." + "," +] @punctuation.delimiter + +; control structure +(control_structure) @conditional + +(escape_sequence) @escape + +; SinOsc.ar()!2 +(duplicated_statement) @repeat + +; Builtins +; ((identifier) @variable.builtin +; (#match? @variable.builtin "^(inf|nil|thisFunction|thisFunctionDef|thisMethod|thisProcess|thisThread|currentEnvironment|topEnvironment)$") +; (#is-not? local)) diff --git a/queries/supercollider/indents.scm b/queries/supercollider/indents.scm new file mode 100644 index 00000000..2f24df02 --- /dev/null +++ b/queries/supercollider/indents.scm @@ -0,0 +1,16 @@ +[ + (collection) + (parameter_call_list) + (function_block) + (code_block) +] @indent + +[ + (parameter_call_list (argument_calls)) + "(" + ")" + "{" + "}" + "[" + "]" +] @branch diff --git a/queries/supercollider/locals.scm b/queries/supercollider/locals.scm new file mode 100644 index 00000000..c945cfa0 --- /dev/null +++ b/queries/supercollider/locals.scm @@ -0,0 +1,36 @@ +; The local variables query is different from the highlights query in that, while the highlights query uses arbitrary capture names which can then be mapped to colors, the locals variable query uses a fixed set of capture names, each of which has a special meaning. +; The capture names are as follows: +; @local.scope - indicates that a syntax node introduces a new local scope. +; @local.definition - indicates that a syntax node contains the name of a definition within the current local scope. +; @local.reference - indicates that a syntax node contains the name which may refer to an earlier definition within some enclosing scope. + + +; Scopes +[ +(function_call) +(code_block) +(function_block) +(control_structure) +] @scope + +; Definitions +(argument + name: (identifier) @definition.parameter + (set! "definition.var.scope" "local") +) + +(variable_definition + name: (variable (local_var (identifier) @definition.var + ))) + +(variable_definition + name: (variable (environment_var (identifier) @definition.var)) + (set! "definition.var.scope" "global")) + +(function_definition name: (variable) @definition.var + (set! "definition.var.scope" "parent") +) +;(variable_definition name: (variable (local_var(identifier))) @local.definition) +;(variable) @local.definition + +(identifier) @reference -- cgit v1.2.3