diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index aa9fc1417eab..ba3b8af014b8 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -15,10 +15,10 @@ | edoc | ✓ | | | | | eex | ✓ | | | | | ejs | ✓ | | | | -| elixir | ✓ | | | `elixir-ls` | +| elixir | ✓ | ✓ | | `elixir-ls` | | elm | ✓ | | | `elm-language-server` | | erb | ✓ | | | | -| erlang | ✓ | | | `erlang_ls` | +| erlang | ✓ | ✓ | | `erlang_ls` | | fish | ✓ | ✓ | ✓ | | | gdscript | ✓ | | ✓ | | | git-attributes | ✓ | | | | @@ -27,7 +27,7 @@ | git-diff | ✓ | | | | | git-ignore | ✓ | | | | | git-rebase | ✓ | | | | -| gleam | ✓ | | | | +| gleam | ✓ | ✓ | | | | glsl | ✓ | | ✓ | | | go | ✓ | ✓ | ✓ | `gopls` | | gomod | ✓ | | | `gopls` | diff --git a/languages.toml b/languages.toml index 1f42ddcc0049..0382ed785f68 100644 --- a/languages.toml +++ b/languages.toml @@ -1049,7 +1049,7 @@ language-server = { command = "erlang_ls" } [[grammar]] name = "erlang" -source = { git = "https://github.com/the-mikedavis/tree-sitter-erlang", rev = "481e7f8ddf27f07a47d1531b6e2b154b89ece31d" } +source = { git = "https://github.com/the-mikedavis/tree-sitter-erlang", rev = "c0ebc82600caaf4339f2b00691f958e9df97c065" } [[language]] name = "kotlin" diff --git a/runtime/queries/elixir/textobjects.scm b/runtime/queries/elixir/textobjects.scm new file mode 100644 index 000000000000..52a6f66de4fb --- /dev/null +++ b/runtime/queries/elixir/textobjects.scm @@ -0,0 +1,27 @@ +; Function heads and guards have no body at all, so `keywords` and `do_block` nodes are both optional +((call + target: (identifier) @_keyword + (arguments + [ + (call + (arguments (_)? @parameter.inside)) + ; function has a guard + (binary_operator + left: + (call + (arguments (_)? @parameter.inside))) + ] + ; body is "do: body" instead of a do-block + (keywords + (pair + value: (_) @function.inside))?)? + (do_block (_)* @function.inside)?) + (#match? @_keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp|test|describe|setup)$")) @function.around + +(anonymous_function + (stab_clause right: (body) @function.inside)) @function.around + +((call + target: (identifier) @_keyword + (do_block (_)* @class.inside)) + (#match? @_keyword "^(defmodule|defprotocol|defimpl)$")) @class.around diff --git a/runtime/queries/erlang/highlights.scm b/runtime/queries/erlang/highlights.scm index bea3871a683b..0cb60ca99977 100644 --- a/runtime/queries/erlang/highlights.scm +++ b/runtime/queries/erlang/highlights.scm @@ -58,7 +58,7 @@ (#eq? @keyword "(spec|callback)")) ; Functions -(function name: (atom) @function) +(function_clause name: (atom) @function) (call module: (atom) @module) (call function: (atom) @function) (stab_clause name: (atom) @function) diff --git a/runtime/queries/erlang/textobjects.scm b/runtime/queries/erlang/textobjects.scm new file mode 100644 index 000000000000..c46b5c6f64c3 --- /dev/null +++ b/runtime/queries/erlang/textobjects.scm @@ -0,0 +1,8 @@ +(function_clause + pattern: (arguments (_)? @parameter.inside) + body: (_) @function.inside) @function.around + +(anonymous_function + (stab_clause body: (_) @function.inside)) @function.around + +(comment (comment_content) @comment.inside) @comment.around diff --git a/runtime/queries/gleam/textobjects.scm b/runtime/queries/gleam/textobjects.scm new file mode 100644 index 000000000000..b382f4bd0078 --- /dev/null +++ b/runtime/queries/gleam/textobjects.scm @@ -0,0 +1,6 @@ +(function + parameters: (function_parameters (function_parameter)? @parameter.inside) + body: (function_body) @function.inside) @function.around + +(anonymous_function + body: (function_body) @function.inside) @function.around diff --git a/runtime/queries/rust/textobjects.scm b/runtime/queries/rust/textobjects.scm index b2769c1393ef..ba86050b5177 100644 --- a/runtime/queries/rust/textobjects.scm +++ b/runtime/queries/rust/textobjects.scm @@ -7,6 +7,8 @@ (function_item body: (_) @function.inside)) @function.around +(closure_expression body: (_) @function.inside) @function.around + ( [ (attribute_item)+