From 6944173e8778795863eda56a3bd2f98efdd82c10 Mon Sep 17 00:00:00 2001 From: "Connor Lay (Clay)" Date: Sun, 1 Aug 2021 13:09:41 -0600 Subject: [PATCH] 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 --- ftdetect/elixir.vim | 2 ++ ftdetect/surface.vim | 1 + lua/nvim-treesitter/parsers.lua | 10 +++++++ queries/elixir/highlights.scm | 4 +++ queries/elixir/injections.scm | 5 ++++ queries/surface/folds.scm | 5 ++++ queries/surface/highlights.scm | 46 +++++++++++++++++++++++++++++++++ queries/surface/indents.scm | 12 +++++++++ queries/surface/injections.scm | 8 ++++++ 9 files changed, 93 insertions(+) create mode 100644 ftdetect/elixir.vim create mode 100644 ftdetect/surface.vim create mode 100644 queries/surface/folds.scm create mode 100644 queries/surface/highlights.scm create mode 100644 queries/surface/indents.scm create mode 100644 queries/surface/injections.scm diff --git a/ftdetect/elixir.vim b/ftdetect/elixir.vim new file mode 100644 index 000000000..b06597ce2 --- /dev/null +++ b/ftdetect/elixir.vim @@ -0,0 +1,2 @@ +au BufRead,BufNewFile *.ex,*.exs,mix.lock set filetype=elixir +au BufRead,BufNewFile *.eex,*.leex,*.heex set filetype=eelixir diff --git a/ftdetect/surface.vim b/ftdetect/surface.vim new file mode 100644 index 000000000..6fb2a69be --- /dev/null +++ b/ftdetect/surface.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.sface set filetype=surface diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 2fa20fd79..afe02f708 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -261,6 +261,16 @@ list.elixir = { maintainers = { "@nifoc" }, } +list.surface = { + install_info = { + url = "https://github.com/connorlay/tree-sitter-surface", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "sface", + maintainers = { "@connorlay" }, +} + list.ocaml = { install_info = { url = "https://github.com/tree-sitter/tree-sitter-ocaml", diff --git a/queries/elixir/highlights.scm b/queries/elixir/highlights.scm index bcbc43918..51c57494d 100644 --- a/queries/elixir/highlights.scm +++ b/queries/elixir/highlights.scm @@ -78,6 +78,10 @@ remote: [(atom) (module)] @type function: (function_identifier) @method) +(dot_call + remote: (identifier) @variable + function: (function_identifier) @method) + "fn" @keyword.function ; def, defp, defguard, ... everything that starts with def diff --git a/queries/elixir/injections.scm b/queries/elixir/injections.scm index 0f12cdbad..02709add0 100644 --- a/queries/elixir/injections.scm +++ b/queries/elixir/injections.scm @@ -8,3 +8,8 @@ (sigil_start) @_start (sigil_content) @regex) (#match? @_start "~(r|R)[/