From bf8d2ad35d1d1a687eae6c065c3d524f7ab61b23 Mon Sep 17 00:00:00 2001 From: Nikita Revenco <154856872+nikitarevenco@users.noreply.github.com> Date: Sun, 8 Sep 2024 09:22:38 +0100 Subject: [PATCH 01/38] feat: modify behaviour of `@assignment.outer` so it includes keywords like `const`, `local` etc. and semicolon (#682) * feat(ecma): update assignment.outer to include lexical declaration * feat(go): update assignment.outer to include keyword * feat(lua): update assignment.outer to include keyword * feat(apex): update assignment.outer to include field and local variable declarations * feat(julia): assignment.outer includes local, const and global keywords --- queries/apex/textobjects.scm | 12 +++++++++--- queries/ecma/textobjects.scm | 7 ++++--- queries/go/textobjects.scm | 34 +++++++++++++++++++--------------- queries/julia/textobjects.scm | 21 +++++++++++++++++---- queries/lua/textobjects.scm | 7 ++++--- 5 files changed, 53 insertions(+), 28 deletions(-) diff --git a/queries/apex/textobjects.scm b/queries/apex/textobjects.scm index 03c04a85..27941ef0 100644 --- a/queries/apex/textobjects.scm +++ b/queries/apex/textobjects.scm @@ -99,6 +99,12 @@ ] @comment.outer ; assignment -(variable_declarator - name: (identifier) @assignment.lhs - value: (_) @assignment.rhs) @assignment.inner @assignment.outer +(field_declaration + (variable_declarator + name: (identifier) @assignment.lhs + value: (_) @assignment.rhs) @assignment.inner) @assignment.outer + +(local_variable_declaration + (variable_declarator + name: (identifier) @assignment.lhs + value: (_) @assignment.rhs) @assignment.inner) @assignment.outer diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index c274990e..43fcd807 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -239,9 +239,10 @@ ; number (number) @number.inner -(variable_declarator - name: (_) @assignment.lhs - value: (_) @assignment.inner @assignment.rhs) @assignment.outer +(lexical_declaration + (variable_declarator + name: (_) @assignment.lhs + value: (_) @assignment.inner @assignment.rhs)) @assignment.outer (variable_declarator name: (_) @assignment.inner) diff --git a/queries/go/textobjects.scm b/queries/go/textobjects.scm index 719505bf..93817040 100644 --- a/queries/go/textobjects.scm +++ b/queries/go/textobjects.scm @@ -157,18 +157,22 @@ left: (_) @assignment.lhs right: (_) @assignment.rhs @assignment.inner) @assignment.outer -(var_spec - name: (_) @assignment.lhs - value: (_) @assignment.rhs @assignment.inner) @assignment.outer - -(var_spec - name: (_) @assignment.inner - type: (_)) @assignment.outer - -(const_spec - name: (_) @assignment.lhs - value: (_) @assignment.rhs @assignment.inner) @assignment.outer - -(const_spec - name: (_) @assignment.inner - type: (_)) @assignment.outer +(var_declaration + (var_spec + name: (_) @assignment.lhs + value: (_) @assignment.rhs @assignment.inner)) @assignment.outer + +(var_declaration + (var_spec + name: (_) @assignment.inner + type: (_))) @assignment.outer + +(const_declaration + (const_spec + name: (_) @assignment.lhs + value: (_) @assignment.rhs @assignment.inner)) @assignment.outer + +(const_declaration + (const_spec + name: (_) @assignment.inner + type: (_))) @assignment.outer diff --git a/queries/julia/textobjects.scm b/queries/julia/textobjects.scm index efcaa0df..7086bdca 100644 --- a/queries/julia/textobjects.scm +++ b/queries/julia/textobjects.scm @@ -217,10 +217,23 @@ (#make-range! "parameter.outer" @parameter.inner @_end)) ; Assignment -(assignment - . - (_) @assignment.lhs - (_) @assignment.inner @assignment.rhs .) @assignment.outer +(local_statement + (assignment + . + (_) @assignment.lhs + (_) @assignment.inner @assignment.rhs .)) @assignment.outer + +(const_statement + (assignment + . + (_) @assignment.lhs + (_) @assignment.inner @assignment.rhs .)) @assignment.outer + +(global_statement + (assignment + . + (_) @assignment.lhs + (_) @assignment.inner @assignment.rhs .)) @assignment.outer (assignment . diff --git a/queries/lua/textobjects.scm b/queries/lua/textobjects.scm index fa1b77db..3b375974 100644 --- a/queries/lua/textobjects.scm +++ b/queries/lua/textobjects.scm @@ -103,9 +103,10 @@ ; number (number) @number.inner -(assignment_statement - (variable_list) @assignment.lhs - (expression_list) @assignment.inner @assignment.rhs) @assignment.outer +(variable_declaration + (assignment_statement + (variable_list) @assignment.lhs + (expression_list) @assignment.inner @assignment.rhs)) @assignment.outer (assignment_statement (variable_list) @assignment.inner) From a5c1cdb022749b637bde8c322ba90599f876222c Mon Sep 17 00:00:00 2001 From: Nikita Revenco <154856872+nikitarevenco@users.noreply.github.com> Date: Fri, 27 Sep 2024 02:11:18 +0100 Subject: [PATCH 02/38] feat(ecma): add support for @return.inner, @return.outer and @statement.outer (#683) --- queries/ecma/textobjects.scm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 43fcd807..50919b0e 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -251,3 +251,18 @@ (pair key: (_) @assignment.lhs value: (_) @assignment.inner @assignment.rhs) @assignment.outer) + +(return_statement + (_) @return.inner) @return.outer + +(return_statement) @statement.outer + +[ + (if_statement) + (expression_statement) + (for_statement) + (while_statement) + (do_statement) + (for_in_statement) + (export_statement) +] @statement.outer From b1db8d528241739effeac01e4e3542770b25c3aa Mon Sep 17 00:00:00 2001 From: Juhan <92646057+Juhan280@users.noreply.github.com> Date: Fri, 27 Sep 2024 08:39:33 +0600 Subject: [PATCH 03/38] feat(ecma): add `@function.*` capture for generator function (#689) --- queries/ecma/textobjects.scm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 50919b0e..13d23758 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -1,6 +1,9 @@ (function_declaration body: (statement_block)) @function.outer +(generator_function_declaration + body: (statement_block)) @function.outer + (function_expression body: (statement_block)) @function.outer @@ -15,6 +18,17 @@ "}" (#make-range! "function.inner" @_start @_end))) +(generator_function_declaration + body: (statement_block + . + "{" + . + (_) @_start @_end + (_)? @_end + . + "}" + (#make-range! "function.inner" @_start @_end))) + (function_expression body: (statement_block . From c1a6b121e67231d6cfe230584691bd7ffa157110 Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Thu, 26 Sep 2024 19:40:01 -0700 Subject: [PATCH 04/38] fix(go): exclude braces for loops, conditions, class (#694) --- queries/go/textobjects.scm | 62 +++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/queries/go/textobjects.scm b/queries/go/textobjects.scm index 93817040..9b7ac620 100644 --- a/queries/go/textobjects.scm +++ b/queries/go/textobjects.scm @@ -46,25 +46,54 @@ body: (block)?) @function.outer ; struct and interface declaration as class textobject? +(type_declaration + (type_spec + (type_identifier) + (struct_type))) @class.outer + (type_declaration (type_spec (type_identifier) (struct_type (field_declaration_list - (_)?) @class.inner))) @class.outer + "{" + . + _ @_start @_end + _? @_end + . + "}" + (#make-range! "class.inner" @_start @_end))))) + +(type_declaration + (type_spec + (type_identifier) + (interface_type))) @class.outer (type_declaration (type_spec (type_identifier) - (interface_type) @class.inner)) @class.outer + (interface_type + "{" + . + _ @_start @_end + _? @_end + . + "}" + (#make-range! "class.inner" @_start @_end)))) ; struct literals as class textobject (composite_literal - (type_identifier)? - (struct_type - (_))? + (literal_value)) @class.outer + +(composite_literal (literal_value - (_)) @class.inner) @class.outer + "{" + . + _ @_start @_end + _? @_end + . + "}") + (#make-range! "class.inner" @_start @_end)) ; conditionals (if_statement @@ -72,14 +101,31 @@ (_) @conditional.inner)?) @conditional.outer (if_statement - consequence: (block)? @conditional.inner) + consequence: (block + "{" + . + _ @_start @_end + _? @_end + . + "}" + (#make-range! "conditional.inner" @_start @_end))) (if_statement condition: (_) @conditional.inner) ; loops +(for_statement) @loop.outer + (for_statement - body: (block)? @loop.inner) @loop.outer + body: (block + . + "{" + . + _ @_start @_end + _? @_end + . + "}" + (#make-range! "loop.inner" @_start @_end))) ; blocks (_ From 4a2d05ec24eaa6b655c7d19092a3b6c0219d46b9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:43:37 -0700 Subject: [PATCH 05/38] docs: update queries in README (#693) Co-authored-by: Github Actions --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 44d8c3a3..a6cd40cc 100644 --- a/README.md +++ b/README.md @@ -370,7 +370,7 @@ Here are some rules about the query names that should be noted. java 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -javascript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +javascript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 julia🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 @@ -426,11 +426,11 @@ Here are some rules about the query names that should be noted. toml 🟩 🟩 🟩 -tsx🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +tsx🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 twig 🟩 🟩 🟩 🟩 -typescript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +typescript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 v🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From b91c98afa6c42819aea6cbc1ba38272f5456a5cf Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Fri, 27 Sep 2024 12:18:06 -0700 Subject: [PATCH 06/38] fix(lua): better @parameter.outer capture for fields Now includes the preceding comma for the final field of a table. --- queries/lua/textobjects.scm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/queries/lua/textobjects.scm b/queries/lua/textobjects.scm index 3b375974..4b2dfba6 100644 --- a/queries/lua/textobjects.scm +++ b/queries/lua/textobjects.scm @@ -84,7 +84,9 @@ (#make-range! "parameter.outer" @parameter.inner @_end)) (table_constructor + . (field) @parameter.inner + . ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end)) @@ -100,6 +102,12 @@ (_) @parameter.inner (#make-range! "parameter.outer" @_start @parameter.inner)) +(table_constructor + "," @_start + . + (field) @parameter.inner + (#make-range! "parameter.outer" @_start @parameter.inner)) + ; number (number) @number.inner From 5d6069bd064a17b8587ae41d5cee3bb9c8f00c1a Mon Sep 17 00:00:00 2001 From: henrykvdb Date: Wed, 16 Oct 2024 11:02:33 +0200 Subject: [PATCH 07/38] feat(verilog): add queries (#678) NOTE: based on upstream parser switch in https://github.com/nvim-treesitter/nvim-treesitter/commit/b139d21726e95ac484318dfb20d1aa031097e05f --- queries/verilog/textobjects.scm | 55 ++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/queries/verilog/textobjects.scm b/queries/verilog/textobjects.scm index 600125a1..ff3d1ee2 100644 --- a/queries/verilog/textobjects.scm +++ b/queries/verilog/textobjects.scm @@ -1,17 +1,48 @@ -[ - (loop_generate_construct) - (loop_statement) -] @loop.outer +(function_declaration + (function_body_declaration + (tf_port_list) + . + (_) @_start @_end + (_)? @_end + . + "endfunction" + (#make-range! "function.inner" @_start @_end))) @function.outer -[ - (conditional_statement) - (case_item) -] @conditional.outer +(task_declaration + (task_body_declaration + (tf_port_list) + . + (_) @_start @_end + (_)? @_end + . + "endtask" + (#make-range! "function.inner" @_start @_end))) @function.outer -(comment) @comment.outer +[ + (seq_block) + (generate_block) +] @block.outer -(function_declaration) @function.outer +(seq_block + "begin" + (simple_identifier)? + . + (_) @_start @_end + (#not-kind-eq? @_start "simple_identifier") + (_)? @_end + . + "end" + (#make-range! "block.inner" @_start @_end)) -(always_construct) @block.outer +(generate_block + "begin" + (simple_identifier)? + . + (_) @_start @_end + (#not-kind-eq? @_start "simple_identifier") + (_)? @_end + . + "end" + (#make-range! "block.inner" @_start @_end)) -(module_declaration) @class.outer +(comment) @comment.outer From 0d79d169fcd45a8da464727ac893044728f121d4 Mon Sep 17 00:00:00 2001 From: Github Actions Date: Wed, 16 Oct 2024 09:09:43 +0000 Subject: [PATCH 08/38] docs: update queries in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a6cd40cc..2b7beddd 100644 --- a/README.md +++ b/README.md @@ -434,7 +434,7 @@ Here are some rules about the query names that should be noted. v🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -verilog 🟩 🟩 🟩 🟩 🟩 🟩 +verilog 🟩 🟩 🟩 🟩 🟩 vim🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From 3e450cd85243da99dc23ebbf14f9c70e9a0c26a4 Mon Sep 17 00:00:00 2001 From: Juhan Ahmed Date: Fri, 25 Oct 2024 12:53:32 +0600 Subject: [PATCH 09/38] docs: add `local` prefix for locals group to match upstream --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2b7beddd..e29df4da 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ require'nvim-treesitter.configs'.setup { -- nvim_buf_set_keymap) which plugins like which-key display ["ic"] = { query = "@class.inner", desc = "Select inner part of a class region" }, -- You can also use captures from other query groups like `locals.scm` - ["as"] = { query = "@scope", query_group = "locals", desc = "Select language scope" }, + ["as"] = { query = "@local.scope", query_group = "locals", desc = "Select language scope" }, }, -- You can choose the select mode (default is charwise 'v') -- @@ -129,7 +129,7 @@ require'nvim-treesitter.configs'.setup { -- -- You can pass a query group to use query from `queries//.scm file in your runtime path. -- Below example nvim-treesitter's `locals.scm` and `folds.scm`. They also provide highlights.scm and indent.scm. - ["]s"] = { query = "@scope", query_group = "locals", desc = "Next scope" }, + ["]s"] = { query = "@local.scope", query_group = "locals", desc = "Next scope" }, ["]z"] = { query = "@fold", query_group = "folds", desc = "Next fold" }, }, goto_next_end = { From ad8f0a472148c3e0ae9851e26a722ee4e29b1595 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Fri, 22 Nov 2024 00:57:38 +0100 Subject: [PATCH 10/38] fix(julia): adapt queries to parser changes This patch adapts the julia queries to the breaking changes in https://github.com/tree-sitter/tree-sitter-julia/pull/153. fixes #716 --- queries/julia/textobjects.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/queries/julia/textobjects.scm b/queries/julia/textobjects.scm index 7086bdca..bb713118 100644 --- a/queries/julia/textobjects.scm +++ b/queries/julia/textobjects.scm @@ -80,7 +80,7 @@ (struct_definition) @class.outer ((struct_definition - name: (_) + (type_head) . (_) @_start (_)? @_end .) @@ -101,7 +101,7 @@ (operator) (_) @function.inner) @function.outer -(function_expression +(arrow_function_expression [ (identifier) (argument_list) From 88fce4e6496950dab867a7c63a819df0ead56751 Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Mon, 17 Feb 2025 12:50:27 +0100 Subject: [PATCH 11/38] fix(ci): adapt to renamed nvim releases --- .github/workflows/check_query_files.yml | 13 ++++++++----- .github/workflows/lint.yml | 2 +- .github/workflows/tests.yml | 2 -- .github/workflows/update-readme.yml | 10 ++++++---- scripts/ci-install-ubuntu-latest.sh | 8 ++++---- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.github/workflows/check_query_files.yml b/.github/workflows/check_query_files.yml index 053bb0db..5f7f9f7b 100644 --- a/.github/workflows/check_query_files.yml +++ b/.github/workflows/check_query_files.yml @@ -1,7 +1,6 @@ name: Check loading of syntax files on: - push: pull_request: schedule: - cron: '0 0 * * *' # every day at midnight @@ -10,6 +9,9 @@ jobs: luacheck: name: Check Query Files runs-on: ubuntu-latest + env: + NVIM_TAG: stable + APPIMAGE: nvim-linux-x86_64.appimage steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 @@ -20,11 +22,12 @@ jobs: - name: Prepare env: NVIM_TAG: stable + APPIMAGE: nvim-linux-x86_64.appimage run: | sudo apt-get update && sudo apt-get install libfuse2 sudo add-apt-repository universe - wget https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim.appimage - chmod u+x nvim.appimage + wget https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/${APPIMAGE} + chmod u+x ${APPIMAGE} mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter-textobject/start ln -s $(pwd) ~/.local/share/nvim/site/pack/nvim-treesitter-textobject/start mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start @@ -32,7 +35,7 @@ jobs: git clone https://github.com/nvim-treesitter/nvim-treesitter.git - name: Compile parsers - run: ./nvim.appimage --headless -c "TSInstallSync all" -c "q" + run: ./${APPIMAGE} --headless -c "TSInstallSync all" -c "q" - name: Check query files - run: ./nvim.appimage --headless -c "luafile ./scripts/check-queries.lua" -c "q" + run: ./${APPIMAGE} --headless -c "luafile ./scripts/check-queries.lua" -c "q" diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4edfe3cf..159a4b88 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,6 @@ name: Linting and style checking -on: [push, pull_request] +on: pull_request jobs: luacheck: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cf0d912b..972138fe 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,9 +1,7 @@ name: Tests on: - push: pull_request: - types: [opened, synchronize, reopened, ready_for_review] branches: - 'master' diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml index ede52333..3f80fc6b 100644 --- a/.github/workflows/update-readme.yml +++ b/.github/workflows/update-readme.yml @@ -9,6 +9,8 @@ jobs: update-readme: name: Update README.md runs-on: ubuntu-latest + env: + APPIMAGE: nvim-linux-x86_64.appimage steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 @@ -20,8 +22,8 @@ jobs: run: | sudo apt-get update && sudo apt-get install libfuse2 sudo add-apt-repository universe - wget https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage - chmod u+x nvim.appimage + wget https://github.com/neovim/neovim/releases/download/nightly/${APPIMAGE} + chmod u+x ${APPIMAGE} mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter-textobject/start ln -s $(pwd) ~/.local/share/nvim/site/pack/nvim-treesitter-textobject/start mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start @@ -29,14 +31,14 @@ jobs: git clone https://github.com/nvim-treesitter/nvim-treesitter.git - name: Compile parsers - run: ./nvim.appimage --headless -c "TSInstallSync all" -c "q" + run: ./${APPIMAGE} --headless -c "TSInstallSync all" -c "q" # inspired by nvim-lspconfigs - name: Check README run: | git config user.email "actions@github" git config user.name "Github Actions" - ./nvim.appimage --headless -c "luafile ./scripts/update-readme.lua" -c "q" || echo "Needs update" + ./${APPIMAGE} --headless -c "luafile ./scripts/update-readme.lua" -c "q" || echo "Needs update" git add README.md git commit -m "docs: update queries in README" || echo 'No commit necessary!' git clean -xf diff --git a/scripts/ci-install-ubuntu-latest.sh b/scripts/ci-install-ubuntu-latest.sh index d658ea41..83e916ba 100755 --- a/scripts/ci-install-ubuntu-latest.sh +++ b/scripts/ci-install-ubuntu-latest.sh @@ -1,6 +1,6 @@ -wget "https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim-linux64.tar.gz" -tar -zxf nvim-linux64.tar.gz -sudo ln -s "$(pwd)/nvim-linux64/bin/nvim" /usr/local/bin -rm -rf "$(pwd)/nvim-linux64/lib/nvim/parser" +wget "https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim-linux-x86_64.tar.gz" +tar -zxf nvim-linux-x86_64.tar.gz +sudo ln -s "$(pwd)/nvim-linux-x86_64/bin/nvim" /usr/local/bin +rm -rf "$(pwd)/nvim-linux-x86_64/lib/nvim/parser" mkdir -p ~/.local/share/nvim/site/pack/ci/opt ln -s "$(pwd)" ~/.local/share/nvim/site/pack/ci/opt From 8b4e32e34d94fd2c4e2c898c6a0a1e60d2a0a181 Mon Sep 17 00:00:00 2001 From: Leon Strauss Date: Fri, 28 Feb 2025 16:45:15 +0100 Subject: [PATCH 12/38] feat(lua): `@comment.inner` and `@statement.outer` (#728) --- queries/lua/textobjects.scm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/queries/lua/textobjects.scm b/queries/lua/textobjects.scm index 4b2dfba6..5719e85e 100644 --- a/queries/lua/textobjects.scm +++ b/queries/lua/textobjects.scm @@ -22,7 +22,8 @@ ; class ; comment -(comment) @comment.outer +(comment + (comment_content) @comment.inner) @comment.outer ; conditional (if_statement @@ -121,3 +122,6 @@ ; scopename ; statement +(statement) @statement.outer + +(return_statement) @statement.outer From ab0950c53d1ae04da8e488aa762b450d5241dca2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Mar 2025 00:53:18 +0900 Subject: [PATCH 13/38] docs: update queries in README (#735) Co-authored-by: Github Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e29df4da..4e18c115 100644 --- a/README.md +++ b/README.md @@ -378,7 +378,7 @@ Here are some rules about the query names that should be noted. latex 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -lua🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +lua🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 matlab 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From 447ea2b67ed24a7d070b92bcd955e8ba279e8bbb Mon Sep 17 00:00:00 2001 From: Quang Phan Date: Tue, 4 Mar 2025 07:40:19 +0700 Subject: [PATCH 14/38] feat(svelte): add queries for template blocks (#737) --- queries/svelte/textobjects.scm | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 queries/svelte/textobjects.scm diff --git a/queries/svelte/textobjects.scm b/queries/svelte/textobjects.scm new file mode 100644 index 00000000..c1a9b530 --- /dev/null +++ b/queries/svelte/textobjects.scm @@ -0,0 +1,66 @@ +; inherits: html + +; Svelte-specific text objects +; based on grammar defined at +; https://github.com/tree-sitter-grammars/tree-sitter-svelte +; if block +(if_statement) @block.outer @conditional.outer + +(if_statement + (if_start) + . + (_) @_start + (_)? @_end + . + (if_end) + (#make-range! "block.inner" @_start @_end) + (#make-range! "conditional.inner" @_start @_end)) + +; each block +(each_statement) @block.outer @loop.outer + +(each_statement + (each_start) + . + (_) @_start + (_)? @_end + . + (each_end) + (#make-range! "block.inner" @_start @_end) + (#make-range! "loop.inner" @_start @_end)) + +; key block +(key_statement) @block.outer + +(key_statement + (key_start) + . + (_) @_start + (_)? @_end + . + (key_end) + (#make-range! "block.inner" @_start @_end)) + +; await block +(await_statement) @block.outer + +(await_statement + (await_start) + . + (_) @_start + (_)? @_end + . + (await_end) + (#make-range! "block.inner" @_start @_end)) + +; snippet block +(snippet_statement) @block.outer + +(snippet_statement + (snippet_start) + . + (_) @_start + (_)? @_end + . + (snippet_end) + (#make-range! "block.inner" @_start @_end)) From 4fc5b1e9a1c6b514de55281f817dfb2208f2ec0b Mon Sep 17 00:00:00 2001 From: Rocky Date: Mon, 3 Mar 2025 16:49:40 -0800 Subject: [PATCH 15/38] fix: offset_encoding is required now (#721) Adapt to the upstream change https://github.com/neovim/neovim/commit/629483e24eed3f2c07e55e0540c553361e0345a2 --- lua/nvim-treesitter/textobjects/lsp_interop.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/nvim-treesitter/textobjects/lsp_interop.lua b/lua/nvim-treesitter/textobjects/lsp_interop.lua index d89d2ead..aa9a1a01 100644 --- a/lua/nvim-treesitter/textobjects/lsp_interop.lua +++ b/lua/nvim-treesitter/textobjects/lsp_interop.lua @@ -111,7 +111,11 @@ function M.peek_definition_code(query_string, query_group, lsp_request, context) if vim.tbl_contains(vim.api.nvim_list_wins(), floating_win) then vim.api.nvim_set_current_win(floating_win) else - local params = vim.lsp.util.make_position_params() + local win_id = vim.api.nvim_get_current_win() + local params = vim.fn.has "nvim-0.11" == 0 and vim.lsp.util.make_position_params() + or function(client) + return vim.api.util.make_position_params(win_id, client.offset_encoding) + end return vim.lsp.buf_request( 0, lsp_request, From 9b261d4ebbd7249c6f51fe24e8893182862f7ad0 Mon Sep 17 00:00:00 2001 From: Cezary Kupaj Date: Tue, 4 Mar 2025 01:51:23 +0100 Subject: [PATCH 16/38] Update @statement.outer query for Ecma to also include lexical declarations (#717) --- queries/ecma/textobjects.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 13d23758..f8714bf6 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -279,4 +279,5 @@ (do_statement) (for_in_statement) (export_statement) + (lexical_declaration) ] @statement.outer From 8b2d4d519f3516d09910f5baf48d1a47b594f0ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:28:34 +0900 Subject: [PATCH 17/38] docs: update queries in README (#738) Co-authored-by: Github Actions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4e18c115..5bbb04e5 100644 --- a/README.md +++ b/README.md @@ -418,6 +418,8 @@ Here are some rules about the query names that should be noted. supercollider 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +svelte 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 + swift 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 tact🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From a68af6f493a89e4f1ddd72c4f14ea80a2a876b78 Mon Sep 17 00:00:00 2001 From: Jean-Michel Bea Date: Sat, 8 Mar 2025 00:49:01 +0000 Subject: [PATCH 18/38] feat(ocaml): Add OCaml queries (#723) --- queries/ocaml/textobjects.scm | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 queries/ocaml/textobjects.scm diff --git a/queries/ocaml/textobjects.scm b/queries/ocaml/textobjects.scm new file mode 100644 index 00000000..1351d6c9 --- /dev/null +++ b/queries/ocaml/textobjects.scm @@ -0,0 +1,57 @@ +(value_definition + (let_binding + body: (_) @function.inner)) @function.outer + +(method_definition + body: (_) @function.inner) @function.outer + +(class_definition + (class_binding + body: (_) @class.inner)) @class.outer + +(for_expression + (do_clause + (_) @loop.inner)) @loop.outer + +(while_expression + (do_clause + (_) @loop.inner)) @loop.outer + +(if_expression + condition: (_) + (then_clause + (_) @conditional.inner) + (else_clause + (_) @conditional.inner)) @conditional.outer + +(if_expression + condition: (_) + (then_clause + (_) @conditional.inner)) @conditional.outer + +(function_expression + (match_case) @_start @_end + (match_case)* @_end + (#make-range! "conditional.inner" @_start @_end)) @conditional.outer + +(match_expression + (match_case) @_start @_end + (match_case)* @_end + (#make-range! "conditional.inner" @_start @_end)) @conditional.outer + +(comment) @comment.outer + +(parameter) @parameter.outer + +(application_expression + argument: (_) @parameter.outer) @call.outer + +(application_expression + argument: (_) @_start @_end + argument: (_)* @_end + (#make-range! "call.inner" @_start @_end)) + +(parenthesized_expression + (_) @_start @_end + (_)? @_end + (#make-range! "block.inner" @_start @_end)) @block.outer From 143856b1cee509a190cc8c17ddb0638002171235 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 8 Mar 2025 09:59:48 +0900 Subject: [PATCH 19/38] docs: update queries in README (#740) Co-authored-by: Github Actions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5bbb04e5..32f2ead2 100644 --- a/README.md +++ b/README.md @@ -388,6 +388,8 @@ Here are some rules about the query names that should be noted. nix 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +ocaml 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 + odin🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 perl 🟩 🟩 From 9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4 Mon Sep 17 00:00:00 2001 From: Carmine Colucci <68693237+carminecolucci@users.noreply.github.com> Date: Mon, 17 Mar 2025 02:46:01 +0100 Subject: [PATCH 20/38] fix: typo `vim.api.util` to `vim.lsp.util` (#742) --- lua/nvim-treesitter/textobjects/lsp_interop.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/nvim-treesitter/textobjects/lsp_interop.lua b/lua/nvim-treesitter/textobjects/lsp_interop.lua index aa9a1a01..ca8b8bbb 100644 --- a/lua/nvim-treesitter/textobjects/lsp_interop.lua +++ b/lua/nvim-treesitter/textobjects/lsp_interop.lua @@ -114,7 +114,7 @@ function M.peek_definition_code(query_string, query_group, lsp_request, context) local win_id = vim.api.nvim_get_current_win() local params = vim.fn.has "nvim-0.11" == 0 and vim.lsp.util.make_position_params() or function(client) - return vim.api.util.make_position_params(win_id, client.offset_encoding) + return vim.lsp.util.make_position_params(win_id, client.offset_encoding) end return vim.lsp.buf_request( 0, From 698b5f805722254bca3c509591c1806d268b6c2f Mon Sep 17 00:00:00 2001 From: Alpha Tawanda Shuro Date: Sun, 6 Apr 2025 15:21:53 +0200 Subject: [PATCH 21/38] fix (kotlin): textobj for bodyless class (#748) In Kotlin data classes, the body is optional, This makes `@class.outer` work in those cases --- queries/kotlin/textobjects.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/queries/kotlin/textobjects.scm b/queries/kotlin/textobjects.scm index c1e43f07..a6d7ed83 100644 --- a/queries/kotlin/textobjects.scm +++ b/queries/kotlin/textobjects.scm @@ -2,7 +2,7 @@ [ (class_body) (enum_class_body) - ] @class.inner) @class.outer + ]? @class.inner) @class.outer [ (function_declaration From e4a71b47325963fccc1006ba57f2aff221d850f3 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Tue, 15 Apr 2025 10:47:23 +0900 Subject: [PATCH 22/38] fix: jsx attribute to use `@attribute.*` over `@parameter.*` (#751) --- queries/jsx/textobjects.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/queries/jsx/textobjects.scm b/queries/jsx/textobjects.scm index daa78a5c..a69f8246 100644 --- a/queries/jsx/textobjects.scm +++ b/queries/jsx/textobjects.scm @@ -1,5 +1,8 @@ ; inherits: ecma +(jsx_attribute) @attribute.outer + (jsx_attribute (property_identifier) - (_) @parameter.inner) @parameter.outer + (_ + (_) @attribute.inner)) From 205e3369bc83d8cb83f7409c36120e24611f8c5c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:57:55 +0900 Subject: [PATCH 23/38] docs: update queries in README (#752) Co-authored-by: Github Actions --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32f2ead2..e6c0edfc 100644 --- a/README.md +++ b/README.md @@ -370,7 +370,7 @@ Here are some rules about the query names that should be noted. java 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -javascript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +javascript🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 julia🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 @@ -430,7 +430,7 @@ Here are some rules about the query names that should be noted. toml 🟩 🟩 🟩 -tsx🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +tsx🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 twig 🟩 🟩 🟩 🟩 From 3ef4fd16ab8388d1c653bbca64c6264a0d8bfc70 Mon Sep 17 00:00:00 2001 From: Chris Grieser <73286100+chrisgrieser@users.noreply.github.com> Date: Sun, 27 Apr 2025 05:50:05 +0200 Subject: [PATCH 24/38] feat(toml): add `@comment.outer` (#755) --- queries/toml/textobjects.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/queries/toml/textobjects.scm b/queries/toml/textobjects.scm index a7f1a2ce..09acb6dd 100644 --- a/queries/toml/textobjects.scm +++ b/queries/toml/textobjects.scm @@ -31,3 +31,5 @@ . ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) + +(comment) @comment.outer From ed373482db797bbf71bdff37a15c7555a84dce47 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 17:07:59 +0900 Subject: [PATCH 25/38] docs: update queries in README (#756) Co-authored-by: Github Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e6c0edfc..06a67205 100644 --- a/README.md +++ b/README.md @@ -428,7 +428,7 @@ Here are some rules about the query names that should be noted. terraform🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -toml 🟩 🟩 🟩 +toml 🟩 🟩 🟩 🟩 tsx🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From 1a28a7715699719edf2b4b8bc3854dfd54bb8070 Mon Sep 17 00:00:00 2001 From: Chris Grieser <73286100+chrisgrieser@users.noreply.github.com> Date: Wed, 7 May 2025 03:11:32 +0200 Subject: [PATCH 26/38] feat(css): add `@comment.outer` (#757) --- queries/css/textobjects.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/queries/css/textobjects.scm b/queries/css/textobjects.scm index 4d132431..bd5f6b85 100644 --- a/queries/css/textobjects.scm +++ b/queries/css/textobjects.scm @@ -18,3 +18,5 @@ (declaration (property_name) @assignment.inner) + +(comment) @comment.outer From 0e3be38005e9673d044e994b1e4b123adb040179 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 10:24:16 +0900 Subject: [PATCH 27/38] docs: update queries in README (#758) Co-authored-by: Github Actions --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 06a67205..4443a816 100644 --- a/README.md +++ b/README.md @@ -332,7 +332,7 @@ Here are some rules about the query names that should be noted. cpp🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -css🟩 🟩 🟩 🟩 🟩 +css🟩 🟩 🟩 🟩 🟩 🟩 cuda🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 @@ -414,7 +414,7 @@ Here are some rules about the query names that should be noted. scala 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 -scss🟩 🟩 🟩 🟩 🟩 +scss🟩 🟩 🟩 🟩 🟩 🟩 slang🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From e10df91b312c86af6d7ea9b0d525a3f5762b5dec Mon Sep 17 00:00:00 2001 From: Bowei Chen Date: Tue, 13 May 2025 13:30:42 +0800 Subject: [PATCH 28/38] feat(ecma): refine class.inner text object selection (#747) * feat(ecma): refine class.inner text object selection Replace basic node capture for class.inner with make-range! implementation to select class body content without including braces. This makes class.inner behavior consistent with function.inner, providing a more intuitive text object selection for editing class contents. * feat(ecma): separate class.outer and class.inner text objects --- queries/ecma/textobjects.scm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index f8714bf6..5c9b6047 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -72,7 +72,18 @@ (#make-range! "function.inner" @_start @_end))) (class_declaration - body: (class_body) @class.inner) @class.outer + body: (class_body)) @class.outer + +(class_declaration + body: (class_body + . + "{" + . + (_) @_start @_end + (_)? @_end + . + "}" + (#make-range! "class.inner" @_start @_end))) (export_statement (class_declaration)) @class.outer From a7168a6492e96affe82767da8e338502f4951d4a Mon Sep 17 00:00:00 2001 From: simonvic Date: Tue, 13 May 2025 08:23:53 +0200 Subject: [PATCH 29/38] feat(enforce): add queries (#731) * feat(enforce): add queries * feat(enforce): add return textobject query * feat(enforce): inner class capture --- queries/enforce/textobjects.scm | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 queries/enforce/textobjects.scm diff --git a/queries/enforce/textobjects.scm b/queries/enforce/textobjects.scm new file mode 100644 index 00000000..24d0a355 --- /dev/null +++ b/queries/enforce/textobjects.scm @@ -0,0 +1,58 @@ +[ + (comment_line) + (comment_block) + (doc_line) + (doc_block) +] @comment.outer + +[ + (literal_int) + (literal_float) +] @number.inner + +; TODO: capture inside braces +(decl_class + body: (_) @class.inner) @class.outer + +(decl_method + body: (_) @function.inner) @function.outer + +(for + body: (_) @loop.inner) @loop.outer + +(while + body: (_) @loop.inner) @loop.outer + +(return + (_)? @return.inner) @return.outer + +; blocks +(block) @block.outer + +(invokation) @call.outer + +(formal_parameters + "," @_start + . + (formal_parameter) @parameter.inner + (#make-range! "parameter.outer" @_start @parameter.inner)) + +(formal_parameters + . + (formal_parameter) @parameter.inner + . + ","? @_end + (#make-range! "parameter.outer" @parameter.inner @_end)) + +(actual_parameters + "," @_start + . + (actual_parameter) @parameter.inner + (#make-range! "parameter.outer" @_start @parameter.inner)) + +(actual_parameters + . + (actual_parameter) @parameter.inner + . + ","? @_end + (#make-range! "parameter.outer" @parameter.inner @_end)) From ddb054f93d9fdeda287bdd73e13d97b1753a9957 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Tue, 13 May 2025 15:33:45 +0900 Subject: [PATCH 30/38] feat(ecma): import statements (#759) --- queries/ecma/textobjects.scm | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 5c9b6047..b91f10b5 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -292,3 +292,48 @@ (export_statement) (lexical_declaration) ] @statement.outer + +; 1. default import +(import_statement + (import_clause + (identifier) @parameter.inner @parameter.outer)) + +; 2. namespace import e.g. `* as React` +(import_statement + (import_clause + (namespace_import + (identifier) @parameter.inner) @parameter.outer)) + +; 3. named import e.g. `import { Bar, Baz } from ...` +(import_statement + (import_clause + (named_imports + (import_specifier) @parameter.inner))) + +; 3‑A. named import followed by a comma +((import_statement + (import_clause + (named_imports + (import_specifier) @_start + . + "," @_end))) + (#make-range! "parameter.outer" @_start @_end)) + +; 3‑B. comma followed by named import +((import_statement + (import_clause + (named_imports + "," @_start + . + (import_specifier) @_end))) + (#make-range! "parameter.outer" @_start @_end)) + +; 3-C. only one named import without a comma +(import_statement + (import_clause + (named_imports + "{" + . + (import_specifier) @parameter.outer + . + "}"))) From b0debd5c424969b4baeabdc8f54db3036c691732 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 15:35:44 +0900 Subject: [PATCH 31/38] docs: update queries in README (#760) Co-authored-by: Github Actions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4443a816..c6299f64 100644 --- a/README.md +++ b/README.md @@ -344,6 +344,8 @@ Here are some rules about the query names that should be noted. elm 🟩 🟩 🟩 🟩 🟩 🟩 🟩 +enforce 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 + fennel🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 fish🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 From a91cd95f50bf991106403cb02c5851b92e45820e Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Mon, 19 May 2025 11:22:52 +0900 Subject: [PATCH 32/38] feat(ecma): list or object elements as `@paramter` (#763) --- queries/ecma/textobjects.scm | 47 +++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index b91f10b5..91568284 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -332,8 +332,47 @@ (import_statement (import_clause (named_imports - "{" - . - (import_specifier) @parameter.outer . - "}"))) + (import_specifier) @parameter.outer .))) + +; Treat list or object elements as @parameter +; 1. parameter.inner +(object + (_) @parameter.inner) + +(array + (_) @parameter.inner) + +; 2. parameter.outer: Only one element, no comma +(object + . + (_) @parameter.outer .) + +(array + . + (_) @parameter.outer .) + +; 3. parameter.outer: Comma before or after +([ + (object + "," @_start + . + (_) @_end) + (array + "," @_start + . + (_) @_end) +] + (#make-range! "parameter.outer" @_start @_end)) + +([ + (object + (_) @_start + . + "," @_end) + (array + (_) @_start + . + "," @_end) +] + (#make-range! "parameter.outer" @_start @_end)) From 379c0bca0efb834a652fb1f133a63a065d0235a9 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Wed, 21 May 2025 11:23:51 +0900 Subject: [PATCH 33/38] feat(ecma): array pattern, obejct pattern as `@parameter` --- queries/ecma/textobjects.scm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 91568284..08ff5cde 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -343,6 +343,12 @@ (array (_) @parameter.inner) +(object_pattern + (_) @parameter.inner) + +(array_pattern + (_) @parameter.inner) + ; 2. parameter.outer: Only one element, no comma (object . @@ -352,6 +358,14 @@ . (_) @parameter.outer .) +(object_pattern + . + (_) @parameter.outer .) + +(array_pattern + . + (_) @parameter.outer .) + ; 3. parameter.outer: Comma before or after ([ (object @@ -362,6 +376,14 @@ "," @_start . (_) @_end) + (object_pattern + "," @_start + . + (_) @_end) + (array_pattern + "," @_start + . + (_) @_end) ] (#make-range! "parameter.outer" @_start @_end)) @@ -374,5 +396,13 @@ (_) @_start . "," @_end) + (object_pattern + (_) @_start + . + "," @_end) + (array_pattern + (_) @_start + . + "," @_end) ] (#make-range! "parameter.outer" @_start @_end)) From 15f945eabde2a293ccf48eb28c214a69b643d6e1 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Wed, 21 May 2025 11:27:08 +0900 Subject: [PATCH 34/38] refactor(ecma): remove unnecessary queries --- queries/ecma/textobjects.scm | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/queries/ecma/textobjects.scm b/queries/ecma/textobjects.scm index 08ff5cde..820953e5 100644 --- a/queries/ecma/textobjects.scm +++ b/queries/ecma/textobjects.scm @@ -207,39 +207,6 @@ ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end)) -; If the array/object pattern is the first parameter, treat its elements as the argument list -(formal_parameters - . - (_ - [ - (object_pattern - "," @_start - . - (_) @parameter.inner) - (array_pattern - "," @_start - . - (_) @parameter.inner) - ]) - (#make-range! "parameter.outer" @_start @parameter.inner)) - -(formal_parameters - . - (_ - [ - (object_pattern - . - (_) @parameter.inner - . - ","? @_end) - (array_pattern - . - (_) @parameter.inner - . - ","? @_end) - ]) - (#make-range! "parameter.outer" @parameter.inner @_end)) - ; arguments (arguments "," @_start From 0f051e9813a36481f48ca1f833897210dbcfffde Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Fri, 23 May 2025 12:34:37 +0900 Subject: [PATCH 35/38] feat(rust): `array_expression` as `@parameter`, fix trailing comma at last --- queries/rust/textobjects.scm | 136 +++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/queries/rust/textobjects.scm b/queries/rust/textobjects.scm index 5d6a1550..592028c5 100644 --- a/queries/rust/textobjects.scm +++ b/queries/rust/textobjects.scm @@ -226,6 +226,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((parameters + (self_parameter) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((parameters "," @_start . @@ -239,6 +246,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((parameters + (parameter) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((parameters "," @_start . @@ -252,6 +266,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((parameters + (type_identifier) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((type_parameters "," @_start . @@ -265,6 +286,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((type_parameters + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((tuple_pattern "," @_start . @@ -278,6 +306,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((tuple_pattern + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((tuple_struct_pattern "," @_start . @@ -291,6 +326,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((tuple_struct_pattern + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + (tuple_expression "," @_start . @@ -304,6 +346,13 @@ ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((tuple_expression + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((tuple_type "," @_start . @@ -317,6 +366,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((tuple_type + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + (struct_item body: (field_declaration_list "," @_start @@ -332,6 +388,15 @@ ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end))) +; last element, with trailing comma +(struct_item + body: (field_declaration_list + (_) @_start + . + "," @_end + . + (#make-range! "parameter.outer" @_start @_end))) + (struct_expression body: (field_initializer_list "," @_start @@ -347,6 +412,15 @@ ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end))) +; last element, with trailing comma +(struct_expression + body: (field_initializer_list + (_) @_start + . + "," @_end + . + (#make-range! "parameter.outer" @_start @_end))) + ((closure_parameters "," @_start . @@ -360,6 +434,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((closure_parameters + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((arguments "," @_start . @@ -373,6 +454,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((arguments + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((type_arguments "," @_start . @@ -386,6 +474,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((type_arguments + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + ((token_tree "," @_start . @@ -399,6 +494,13 @@ ","? @_end) (#make-range! "parameter.outer" @parameter.inner @_end)) +; last element, with trailing comma +((token_tree + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + (scoped_use_list list: (use_list "," @_start @@ -414,6 +516,40 @@ ","? @_end (#make-range! "parameter.outer" @parameter.inner @_end))) +; last element, with trailing comma +(scoped_use_list + list: (use_list + (_) @_start + . + "," @_end + . + (#make-range! "parameter.outer" @_start @_end))) + +(array_expression + (_) @parameter.inner) + +; first element, with or without comma +((array_expression + . + (_) @_start + . + ","? @_end) + (#make-range! "parameter.outer" @_start @_end)) + +; second to last element (with leading comma) +((array_expression + "," @_start + . + (_) @_end) + (#make-range! "parameter.outer" @_start @_end)) + +; last element, with trailing comma +((array_expression + (_) @_start + . + "," @_end .) + (#make-range! "parameter.outer" @_start @_end)) + [ (integer_literal) (float_literal) From 89ebe73cd2836db80a22d9748999ace0241917a5 Mon Sep 17 00:00:00 2001 From: Kiyoon Kim Date: Sat, 14 Jun 2025 18:43:27 +0900 Subject: [PATCH 36/38] feat(typescript): `type` and `interface` as `@parameter.*` (#779) Addresses https://github.com/nvim-treesitter/nvim-treesitter-textobjects/issues/86#issuecomment-2970072351 --- queries/typescript/textobjects.scm | 62 ++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/queries/typescript/textobjects.scm b/queries/typescript/textobjects.scm index 3fb8ce21..264ed216 100644 --- a/queries/typescript/textobjects.scm +++ b/queries/typescript/textobjects.scm @@ -38,3 +38,65 @@ . "}" (#make-range! "class.inner" @_start @_end))) + +; type, interface items as @parameter +; 1. parameter.inner +(property_signature) @parameter.inner + +; 2. parameter.outer: Only one element, no comma +(object_type + . + (property_signature) @parameter.outer .) + +(interface_body + . + (property_signature) @parameter.outer .) + +; 3. parameter.outer: Comma/semicolon before or after +([ + (object_type + "," @_start + . + (property_signature) @_end) + (interface_body + "," @_start + . + (property_signature) @_end) +] + (#make-range! "parameter.outer" @_start @_end)) + +([ + (object_type + (property_signature) @_start + . + "," @_end) + (interface_body + (property_signature) @_start + . + "," @_end) +] + (#make-range! "parameter.outer" @_start @_end)) + +([ + (object_type + ";" @_start + . + (property_signature) @_end) + (interface_body + ";" @_start + . + (property_signature) @_end) +] + (#make-range! "parameter.outer" @_start @_end)) + +([ + (object_type + (property_signature) @_start + . + ";" @_end) + (interface_body + (property_signature) @_start + . + ";" @_end) +] + (#make-range! "parameter.outer" @_start @_end)) From 71385f191ec06ffc60e80e6b0c9a9d5daed4824c Mon Sep 17 00:00:00 2001 From: G Roques Date: Tue, 29 Jul 2025 09:02:00 -0500 Subject: [PATCH 37/38] feat(java): add @return.inner & @return.outer text objects (#788) The query handles methods with a typical return as you'd expect: ```java class Example { private String example() { return "example"; } } ``` I made the wildcard child node optional `(_)?` in the query so `@return.outer` matches `void` returns: ```java class Example { private void example() { return; } } ``` --- queries/java/textobjects.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/queries/java/textobjects.scm b/queries/java/textobjects.scm index 5a16b35c..04fdd13e 100644 --- a/queries/java/textobjects.scm +++ b/queries/java/textobjects.scm @@ -27,6 +27,9 @@ "}" (#make-range! "function.inner" @_start @_end))) +(return_statement + (_)? @return.inner) @return.outer + (for_statement body: (_)? @loop.inner) @loop.outer From d2bf609aa1fabf18f868eed60163edd706c05274 Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 12 Oct 2025 22:14:56 +0800 Subject: [PATCH 38/38] Add Java support for `@statement.outer` --- queries/java/textobjects.scm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/queries/java/textobjects.scm b/queries/java/textobjects.scm index 04fdd13e..bc3e9811 100644 --- a/queries/java/textobjects.scm +++ b/queries/java/textobjects.scm @@ -108,3 +108,9 @@ (binary_integer_literal) (octal_integer_literal) ] @number.inner + +; scopename +; statement +(statement) @statement.outer + +(return_statement) @statement.outer