From e75a3df2c20b3a98c786f5e61587d74a7a6b61d6 Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Tue, 23 Jul 2024 17:29:06 -0700 Subject: [PATCH] fix(ruby): missing methods in treesitter backend (#382) --- queries/ruby/aerial.scm | 6 + tests/symbols/ruby_test.json | 475 ++++++++++++++++++---------------- tests/treesitter/ruby_test.rb | 8 +- 3 files changed, 258 insertions(+), 231 deletions(-) diff --git a/queries/ruby/aerial.scm b/queries/ruby/aerial.scm index afd2791..1496922 100644 --- a/queries/ruby/aerial.scm +++ b/queries/ruby/aerial.scm @@ -25,6 +25,12 @@ name: (_) @name (#set! "kind" "Method")) @symbol) +; handle methods not caught by the above query that includes the scope +(body_statement + (method + name: (_) @name + (#set! "kind" "Method")) @symbol) + (singleton_method object: [ (constant) diff --git a/tests/symbols/ruby_test.json b/tests/symbols/ruby_test.json index 0cb7ba3..5d8a0a5 100644 --- a/tests/symbols/ruby_test.json +++ b/tests/symbols/ruby_test.json @@ -35,68 +35,83 @@ }, { "col": 2, - "end_col": 18, - "end_lnum": 6, - "kind": "Method", - "level": 1, - "lnum": 6, - "name": "meth_2", - "selection_range": { - "col": 6, - "end_col": 12, - "end_lnum": 6, - "lnum": 6 - } - }, - { - "col": 2, - "end_col": 22, - "end_lnum": 8, + "end_col": 5, + "end_lnum": 9, "kind": "Method", "level": 1, "lnum": 8, - "name": "name=", + "name": "self.meth_2", "selection_range": { - "col": 6, - "end_col": 11, + "col": 11, + "end_col": 17, "end_lnum": 8, "lnum": 8 } }, { "col": 2, - "end_col": 19, - "end_lnum": 10, + "end_col": 5, + "end_lnum": 12, "kind": "Method", "level": 1, - "lnum": 10, + "lnum": 11, + "name": "meth_3", + "selection_range": { + "col": 6, + "end_col": 12, + "end_lnum": 11, + "lnum": 11 + } + }, + { + "col": 2, + "end_col": 22, + "end_lnum": 14, + "kind": "Method", + "level": 1, + "lnum": 14, + "name": "name=", + "selection_range": { + "col": 6, + "end_col": 11, + "end_lnum": 14, + "lnum": 14 + } + }, + { + "col": 2, + "end_col": 19, + "end_lnum": 16, + "kind": "Method", + "level": 1, + "lnum": 16, "name": "==", "selection_range": { "col": 6, "end_col": 8, - "end_lnum": 10, - "lnum": 10 + "end_lnum": 16, + "lnum": 16 } }, { "col": 2, "end_col": 21, - "end_lnum": 12, + "end_lnum": 18, "kind": "Method", "level": 1, - "lnum": 12, + "lnum": 18, "name": "oneline", "selection_range": { "col": 6, "end_col": 13, - "end_lnum": 12, - "lnum": 12 + "end_lnum": 18, + "lnum": 18 } } ], "col": 0, "end_col": 3, - "end_lnum": 13, + "end_lnum": 19, "kind": "Module", "level": 0, "lnum": 1, @@ -113,61 +128,61 @@ { "col": 2, "end_col": 5, - "end_lnum": 17, + "end_lnum": 23, "kind": "Method", "level": 1, - "lnum": 16, + "lnum": 22, "name": "before :all", "selection_range": { "col": 2, "end_col": 5, - "end_lnum": 17, - "lnum": 16 + "end_lnum": 23, + "lnum": 22 } }, { "col": 2, "end_col": 5, - "end_lnum": 19, + "end_lnum": 25, "kind": "Method", "level": 1, - "lnum": 18, + "lnum": 24, "name": "after", "selection_range": { "col": 2, "end_col": 5, - "end_lnum": 19, - "lnum": 18 + "end_lnum": 25, + "lnum": 24 } }, { "col": 2, "end_col": 5, - "end_lnum": 21, + "end_lnum": 27, "kind": "Method", "level": 1, - "lnum": 20, + "lnum": 26, "name": "it should describe the test", "selection_range": { "col": 2, "end_col": 5, - "end_lnum": 21, - "lnum": 20 + "end_lnum": 27, + "lnum": 26 } } ], "col": 0, "end_col": 3, - "end_lnum": 22, + "end_lnum": 28, "kind": "Method", "level": 0, - "lnum": 15, + "lnum": 21, "name": "describe UnitTest", "selection_range": { "col": 0, "end_col": 3, - "end_lnum": 22, - "lnum": 15 + "end_lnum": 28, + "lnum": 21 } }, { @@ -175,123 +190,91 @@ { "col": 2, "end_col": 29, - "end_lnum": 25, + "end_lnum": 31, "kind": "Method", "level": 1, - "lnum": 25, + "lnum": 31, "name": "task :simple_task", "selection_range": { "col": 2, "end_col": 29, - "end_lnum": 25, - "lnum": 25 + "end_lnum": 31, + "lnum": 31 } }, { "col": 2, "end_col": 43, - "end_lnum": 26, + "end_lnum": 32, "kind": "Method", "level": 1, - "lnum": 26, + "lnum": 32, "name": "task inline_task", "selection_range": { "col": 2, "end_col": 43, - "end_lnum": 26, - "lnum": 26 + "end_lnum": 32, + "lnum": 32 } }, { "col": 2, "end_col": 37, - "end_lnum": 27, + "end_lnum": 33, "kind": "Method", "level": 1, - "lnum": 27, + "lnum": 33, "name": "task rake_task", "selection_range": { "col": 2, "end_col": 37, - "end_lnum": 27, - "lnum": 27 + "end_lnum": 33, + "lnum": 33 } }, { "col": 2, "end_col": 58, - "end_lnum": 28, + "end_lnum": 34, "kind": "Method", "level": 1, - "lnum": 28, + "lnum": 34, "name": "multitask parallel_prereqs", "selection_range": { "col": 2, "end_col": 58, - "end_lnum": 28, - "lnum": 28 + "end_lnum": 34, + "lnum": 34 } }, { "col": 2, "end_col": 30, - "end_lnum": 29, + "end_lnum": 35, "kind": "Method", "level": 1, - "lnum": 29, + "lnum": 35, "name": "file create_file", "selection_range": { "col": 2, "end_col": 30, - "end_lnum": 29, - "lnum": 29 - } - } - ], - "col": 0, - "end_col": 3, - "end_lnum": 30, - "kind": "Method", - "level": 0, - "lnum": 24, - "name": "namespace rake_namespace", - "selection_range": { - "col": 0, - "end_col": 3, - "end_lnum": 30, - "lnum": 24 - } - }, - { - "children": [ - { - "col": 2, - "end_col": 5, - "end_lnum": 35, - "kind": "Class", - "level": 1, - "lnum": 34, - "name": "Long::Class::Name", - "selection_range": { - "col": 8, - "end_col": 25, - "end_lnum": 34, - "lnum": 34 + "end_lnum": 35, + "lnum": 35 } } ], "col": 0, "end_col": 3, "end_lnum": 36, - "kind": "Module", + "kind": "Method", "level": 0, - "lnum": 33, - "name": "Long::Mod::Name", + "lnum": 30, + "name": "namespace rake_namespace", "selection_range": { - "col": 7, - "end_col": 22, - "end_lnum": 33, - "lnum": 33 + "col": 0, + "end_col": 3, + "end_lnum": 36, + "lnum": 30 } }, { @@ -299,48 +282,35 @@ { "col": 2, "end_col": 5, - "end_lnum": 40, - "kind": "Method", + "end_lnum": 41, + "kind": "Class", "level": 1, - "lnum": 39, - "name": "setup", + "lnum": 40, + "name": "Long::Class::Name", "selection_range": { - "col": 2, - "end_col": 5, + "col": 8, + "end_col": 25, "end_lnum": 40, - "lnum": 39 + "lnum": 40 } - }, - { - "col": 2, - "end_col": 5, - "end_lnum": 42, - "kind": "Method", - "level": 1, - "lnum": 41, - "name": "teardown", - "selection_range": { - "col": 2, - "end_col": 5, - "end_lnum": 42, - "lnum": 41 - } - }, - { - "col": 2, - "end_col": 5, - "end_lnum": 44, - "kind": "Method", - "level": 1, - "lnum": 43, - "name": "should test something", - "selection_range": { - "col": 2, - "end_col": 5, - "end_lnum": 44, - "lnum": 43 - } - }, + } + ], + "col": 0, + "end_col": 3, + "end_lnum": 42, + "kind": "Module", + "level": 0, + "lnum": 39, + "name": "Long::Mod::Name", + "selection_range": { + "col": 7, + "end_col": 22, + "end_lnum": 39, + "lnum": 39 + } + }, + { + "children": [ { "col": 2, "end_col": 5, @@ -348,7 +318,7 @@ "kind": "Method", "level": 1, "lnum": 45, - "name": "should_eventually actually work", + "name": "setup", "selection_range": { "col": 2, "end_col": 5, @@ -358,32 +328,77 @@ }, { "col": 2, - "end_col": 41, - "end_lnum": 47, + "end_col": 5, + "end_lnum": 48, "kind": "Method", "level": 1, "lnum": 47, + "name": "teardown", + "selection_range": { + "col": 2, + "end_col": 5, + "end_lnum": 48, + "lnum": 47 + } + }, + { + "col": 2, + "end_col": 5, + "end_lnum": 50, + "kind": "Method", + "level": 1, + "lnum": 49, + "name": "should test something", + "selection_range": { + "col": 2, + "end_col": 5, + "end_lnum": 50, + "lnum": 49 + } + }, + { + "col": 2, + "end_col": 5, + "end_lnum": 52, + "kind": "Method", + "level": 1, + "lnum": 51, + "name": "should_eventually actually work", + "selection_range": { + "col": 2, + "end_col": 5, + "end_lnum": 52, + "lnum": 51 + } + }, + { + "col": 2, + "end_col": 41, + "end_lnum": 53, + "kind": "Method", + "level": 1, + "lnum": 53, "name": "should_not validate_presence_of(:title)", "selection_range": { "col": 2, "end_col": 41, - "end_lnum": 47, - "lnum": 47 + "end_lnum": 53, + "lnum": 53 } } ], "col": 0, "end_col": 3, - "end_lnum": 48, + "end_lnum": 54, "kind": "Method", "level": 0, - "lnum": 38, + "lnum": 44, "name": "context Shoulda Context", "selection_range": { "col": 0, "end_col": 3, - "end_lnum": 48, - "lnum": 38 + "end_lnum": 54, + "lnum": 44 } }, { @@ -391,48 +406,32 @@ { "col": 10, "end_col": 5, - "end_lnum": 52, + "end_lnum": 58, "kind": "Method", "level": 1, - "lnum": 51, + "lnum": 57, "name": "inline_private", "scope": "private", "selection_range": { "col": 14, "end_col": 28, - "end_lnum": 51, - "lnum": 51 + "end_lnum": 57, + "lnum": 57 } }, { "col": 2, "end_col": 5, - "end_lnum": 55, + "end_lnum": 61, "kind": "Method", "level": 1, - "lnum": 54, + "lnum": 60, "name": "public_1", "selection_range": { "col": 6, "end_col": 14, - "end_lnum": 54, - "lnum": 54 - } - }, - { - "col": 2, - "end_col": 5, - "end_lnum": 59, - "kind": "Method", - "level": 1, - "lnum": 58, - "name": "private_1", - "scope": "private", - "selection_range": { - "col": 6, - "end_col": 15, - "end_lnum": 58, - "lnum": 58 + "end_lnum": 60, + "lnum": 60 } }, { @@ -442,11 +441,11 @@ "kind": "Method", "level": 1, "lnum": 64, - "name": "protected_1", - "scope": "protected", + "name": "private_1", + "scope": "private", "selection_range": { "col": 6, - "end_col": 17, + "end_col": 15, "end_lnum": 64, "lnum": 64 } @@ -454,48 +453,32 @@ { "col": 2, "end_col": 5, - "end_lnum": 70, - "kind": "Class", + "end_lnum": 71, + "kind": "Method", "level": 1, - "lnum": 69, - "name": "DoNotBreakScope", + "lnum": 70, + "name": "protected_1", + "scope": "protected", "selection_range": { - "col": 8, - "end_col": 23, - "end_lnum": 69, - "lnum": 69 + "col": 6, + "end_col": 17, + "end_lnum": 70, + "lnum": 70 } }, { "col": 2, "end_col": 5, - "end_lnum": 74, - "kind": "Method", + "end_lnum": 76, + "kind": "Class", "level": 1, - "lnum": 73, - "name": "protected_2", - "scope": "protected", + "lnum": 75, + "name": "DoNotBreakScope", "selection_range": { - "col": 6, - "end_col": 17, - "end_lnum": 73, - "lnum": 73 - } - }, - { - "col": 9, - "end_col": 5, - "end_lnum": 77, - "kind": "Method", - "level": 1, - "lnum": 76, - "name": "inline_public", - "scope": "public", - "selection_range": { - "col": 13, - "end_col": 26, - "end_lnum": 76, - "lnum": 76 + "col": 8, + "end_col": 23, + "end_lnum": 75, + "lnum": 75 } }, { @@ -505,7 +488,7 @@ "kind": "Method", "level": 1, "lnum": 79, - "name": "protected_3", + "name": "protected_2", "scope": "protected", "selection_range": { "col": 6, @@ -515,66 +498,98 @@ } }, { - "col": 2, + "col": 9, "end_col": 5, - "end_lnum": 84, + "end_lnum": 83, "kind": "Method", "level": 1, - "lnum": 83, + "lnum": 82, + "name": "inline_public", + "scope": "public", + "selection_range": { + "col": 13, + "end_col": 26, + "end_lnum": 82, + "lnum": 82 + } + }, + { + "col": 2, + "end_col": 5, + "end_lnum": 86, + "kind": "Method", + "level": 1, + "lnum": 85, + "name": "protected_3", + "scope": "protected", + "selection_range": { + "col": 6, + "end_col": 17, + "end_lnum": 85, + "lnum": 85 + } + }, + { + "col": 2, + "end_col": 5, + "end_lnum": 90, + "kind": "Method", + "level": 1, + "lnum": 89, "name": "public_2", "scope": "public", "selection_range": { "col": 6, "end_col": 14, - "end_lnum": 83, - "lnum": 83 + "end_lnum": 89, + "lnum": 89 } }, { "col": 2, "end_col": 5, - "end_lnum": 87, + "end_lnum": 93, "kind": "Method", "level": 1, - "lnum": 86, + "lnum": 92, "name": "public_setter=", "scope": "public", "selection_range": { "col": 6, "end_col": 20, - "end_lnum": 86, - "lnum": 86 + "end_lnum": 92, + "lnum": 92 } }, { "col": 2, "end_col": 5, - "end_lnum": 91, + "end_lnum": 97, "kind": "Method", "level": 1, - "lnum": 90, + "lnum": 96, "name": "private_setter=", "scope": "private", "selection_range": { "col": 6, "end_col": 21, - "end_lnum": 90, - "lnum": 90 + "end_lnum": 96, + "lnum": 96 } } ], "col": 0, "end_col": 3, - "end_lnum": 92, + "end_lnum": 98, "kind": "Class", "level": 0, - "lnum": 50, + "lnum": 56, "name": "Privateers", "selection_range": { "col": 6, "end_col": 16, - "end_lnum": 50, - "lnum": 50 + "end_lnum": 56, + "lnum": 56 } } ] diff --git a/tests/treesitter/ruby_test.rb b/tests/treesitter/ruby_test.rb index 6a2e7d9..3e1884e 100644 --- a/tests/treesitter/ruby_test.rb +++ b/tests/treesitter/ruby_test.rb @@ -3,7 +3,13 @@ module Mod def meth_1() end end - def meth_2() end + call_some_function + + def self.meth_2 + end + + def meth_3 + end def name=(value) end