summaryrefslogtreecommitdiff
path: root/queries/surface
diff options
context:
space:
mode:
authorConnor Lay (Clay) <connorlay@users.noreply.github.com>2021-08-01 13:09:41 -0600
committerGitHub <noreply@github.com>2021-08-01 19:09:41 +0000
commit6944173e8778795863eda56a3bd2f98efdd82c10 (patch)
treef8e5dc111b93c3e7f845c8374f39aba51c41d8cf /queries/surface
parent8ab1a5e5f7087c4ed49c42e8d14ecb9d91d58363 (diff)
Feature: Add Surface language and integrate with Elixir (#1645)
* Add initial surface highlights & injections * Additional surface highlights * Filetype detection, fix injections * Fix Elixir function highlight when left is an identifier * Add surface parser * Fix comment highlights * Surface folds, indents, better highlights * Highlight surface components & directives * Restore comments Elixir injections
Diffstat (limited to 'queries/surface')
-rw-r--r--queries/surface/folds.scm5
-rw-r--r--queries/surface/highlights.scm46
-rw-r--r--queries/surface/indents.scm12
-rw-r--r--queries/surface/injections.scm8
4 files changed, 71 insertions, 0 deletions
diff --git a/queries/surface/folds.scm b/queries/surface/folds.scm
new file mode 100644
index 00000000..57763a6e
--- /dev/null
+++ b/queries/surface/folds.scm
@@ -0,0 +1,5 @@
+; Surface folds similar to HTML and includes blocks
+[
+ (tag)
+ (block)
+] @fold
diff --git a/queries/surface/highlights.scm b/queries/surface/highlights.scm
new file mode 100644
index 00000000..77b88c05
--- /dev/null
+++ b/queries/surface/highlights.scm
@@ -0,0 +1,46 @@
+; Surface text is highlighted as such
+(text) @text
+
+; Surface has two types of comments, both are highlighted as such
+(comment) @comment
+
+; Surface attributes are highlighted as HTML attributes
+(attribute_name) @tag.attribute
+
+; Attributes are highlighted as strings
+(attribute_value) @string
+
+; Surface blocks are highlighted as keywords
+[
+ (start_block)
+ (end_block)
+ (subblock)
+] @keyword
+
+; Surface supports HTML tags and are highlighted as such
+[
+ (start_tag)
+ (end_tag)
+ (self_closing_tag)
+ (start_component)
+ (end_component)
+ (self_closing_component)
+] @tag.delimiter
+
+; Expressions are similar to string interpolation, and are highloghted as such
+(expression) @punctuation.special
+
+; Expressions should be highlighted as Elixir, fallback to special strings
+(expression_value) @string.special
+
+; Surface tags are highlighted as HTML
+(tag_name) @tag
+
+; Surface components are highlighted as types (Elixir modules)
+(component_name) @type
+
+; Surface directives are highlighted as keywords
+(directive_name) @keyword
+
+; Surface operators
+["="] @operator
diff --git a/queries/surface/indents.scm b/queries/surface/indents.scm
new file mode 100644
index 00000000..ad683575
--- /dev/null
+++ b/queries/surface/indents.scm
@@ -0,0 +1,12 @@
+; Surface indents like HTML, with the addition of blocks
+[
+ (tag)
+ (block)
+] @indent
+
+; Dedent at the end of each tag, as well as a subblock
+[
+ (end_tag)
+ (end_block)
+ (subblock)
+] @branch
diff --git a/queries/surface/injections.scm b/queries/surface/injections.scm
new file mode 100644
index 00000000..928977a3
--- /dev/null
+++ b/queries/surface/injections.scm
@@ -0,0 +1,8 @@
+; Surface expressions and components are Elixir code
+[
+ (expression_value)
+ (component_name)
+] @elixir
+
+; Surface comments are nvim-treesitter comments
+(comment) @comment