From 9b41083899e05decef10884f101f35b8c780d426 Mon Sep 17 00:00:00 2001 From: Graceful Potato Date: Sat, 22 Aug 2020 17:23:25 +0300 Subject: [PATCH] Fix arguments in method defifinition with parentheses. Add support for multiline arguments in method definition without parentheses. Add support for double splat operator. --- Syntaxes/Ruby.plist | 202 +++++++++++++++++--------------------- Tests/method_arguments.rb | 72 ++++++++++++++ 2 files changed, 161 insertions(+), 113 deletions(-) create mode 100644 Tests/method_arguments.rb diff --git a/Syntaxes/Ruby.plist b/Syntaxes/Ruby.plist index d8e3756..e2227cd 100644 --- a/Syntaxes/Ruby.plist +++ b/Syntaxes/Ruby.plist @@ -520,56 +520,7 @@ match - \G([&*]?)(?:([_a-zA-Z]\w*(:))|([_a-zA-Z]\w*)) - - - include - #parens - - - include - #braces - - - include - $self - - - - - repository - - braces - - begin - \{ - beginCaptures - - 0 - - name - punctuation.section.function.begin.ruby - - - end - \} - endCaptures - - 0 - - name - punctuation.section.function.end.ruby - - - patterns - - - include - #parens - - - include - #braces + \G(&|\*\*?)?(?:([_a-zA-Z]\w*(:))|([_a-zA-Z]\w*)) include @@ -577,45 +528,11 @@ - parens - begin - \( - beginCaptures - - 0 - - name - punctuation.section.function.begin.ruby - - - end - \) - endCaptures - - 0 - - name - punctuation.section.function.end.ruby - - - patterns - - - include - #parens - - - include - #braces - - - include - $self - - + include + $self - + begin @@ -644,16 +561,16 @@ comment same as the previous rule, but without parentheses around the arguments end - $ + (?=;)|(?<=[\w\])}`'"!?])(?=\s*#|\s*$) name meta.function.method.with-arguments.ruby patterns begin - (?![\s,]) + (?=[&*_a-zA-Z]) end - (?=,|$) + (?=,|;|\s*#|\s*$) patterns @@ -681,9 +598,7 @@ match - \G([&*]?)(?:([_a-zA-Z]\w*(:))|([_a-zA-Z]\w*)) - name - variable.parameter.function.ruby + \G(&|\*\*?)?(?:([_a-zA-Z]\w*(:))|([_a-zA-Z]\w*)) include @@ -691,6 +606,10 @@ + + include + $self + @@ -1956,34 +1875,91 @@ punctuation.separator.other.ruby - match + begin \{ - name - punctuation.section.scope.begin.ruby - - - match + beginCaptures + + 0 + + name + punctuation.section.scope.begin.ruby + + + end \} - name - punctuation.section.scope.end.ruby + endCaptures + + 0 + + name + punctuation.section.scope.end.ruby + + + patterns + + + include + $self + + - match + begin \[ - name - punctuation.section.array.begin.ruby - - - match + beginCaptures + + 0 + + name + punctuation.section.array.begin.ruby + + + end \] - name - punctuation.section.array.end.ruby + endCaptures + + 0 + + name + punctuation.section.array.end.ruby + + + patterns + + + include + $self + + - match - \(|\) - name - punctuation.section.function.ruby + begin + \( + beginCaptures + + 0 + + name + punctuation.section.function.ruby + + + end + \) + endCaptures + + 0 + + name + punctuation.section.function.ruby + + + patterns + + + include + $self + + repository diff --git a/Tests/method_arguments.rb b/Tests/method_arguments.rb new file mode 100644 index 0000000..9134b28 --- /dev/null +++ b/Tests/method_arguments.rb @@ -0,0 +1,72 @@ +def method; hello, world = [1,2] end # test comment + +def method_with_parentheses(a, b, c = [foo,bar,baz]); hello, world = [1,2] end # test comment + +def method_without_parentheses a, b, c = [foo,bar,baz]; hello, world = [1,2] end # test comment + +def method # test comment + hello, world = [1,2] +end + +def method_with_parentheses(a, b, c = [foo,bar,baz]) # test comment + hello, world = [1,2] +end + +def method_without_parentheses a, b, c = [foo,bar,baz] # test comment + hello, world = [1,2] +end + +def method_with_parentheses(a, b = "hello", c = ["foo", "bar"], d = (2 + 2) * 2, e = {}) # test comment + hello, world = [1,2] + do_something1 + do_something2 +end + +def method_without_parentheses a, b = "hello", c = ["foo", "bar"], d = (2 + 2) * 2, e = "" # test comment + hello, world = [1,2] + do_something1 + do_something2 +end + +def method_with_parentheses(a, + b = hello, # test comment + c = ["foo", bar, :baz], + d = (2 + 2) * 2, + e = {}) + hello, world = [1,2] + do_something1 + do_something2 +end + +def method_without_parentheses a, + b = "hello" , # test comment + c = ["foo", bar, :baz], + d = (2 + 2) * 2, + e = proc { |e| e + e } + hello, world = [1,2] + do_something1 + do_something2 +end + +def method_without_parentheses a, + b: hello , # test comment + c: ["foo", bar, :baz], + d: (2 + 2) * 2, + e: proc { |e| e + e } + hello, world = [1,2] + do_something1 + do_something2 +end + +# double splat, splat, and & opearator +def method_with_parentheses(*a, **b, &c); hello, world = [1,2] end # test comment + +def method_without_parentheses *a, **b, &c; hello, world = [1,2] end # test comment + +def method_with_parentheses(*a, **b, &c) # test comment + hello, world = [1,2] +end + +def method_without_parentheses *a, **b, &c # test comment + hello, world = [1,2] +end