From c0e70f32c6adcb9f6631e3692260d4c6c7749287 Mon Sep 17 00:00:00 2001 From: Amir Abushareb Date: Tue, 20 Aug 2019 18:40:25 +0300 Subject: [PATCH] gocode: fix completion for funcs with no arguments --- .gitignore | 2 ++ go/gocode.py | 18 ++++++++++++++---- tests/test_gocode.py | 11 +++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 2581909..48d2e24 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ __pycache__/ *.pyc *.sublime-package +*.mod +*.sum diff --git a/go/gocode.py b/go/gocode.py index 615ad3d..e6b7ebe 100644 --- a/go/gocode.py +++ b/go/gocode.py @@ -61,6 +61,7 @@ def parse_func(item): args, buf = parse_args(item['type']) preview_args = [] named_args = [] + snip = '' for arg in args: prev = '{name} {type}'.format(**arg) @@ -71,11 +72,17 @@ def parse_func(item): tmpl = '${{{}:{}}}'.format(i + 1, placeholder.strip()) named_args.append(tmpl) + if len(named_args) > 0: + print("named_args", args) + snip = '{}({})'.format(name, ', '.join(named_args)) + else: + snip = '{}()$0'.format(name) + return { 'name': name, 'args': ', '.join(preview_args), 'rets': '\t-> ()', - 'snip': '{}({})'.format(name, ', '.join(named_args)), + 'snip': snip, } def parse_args(buf): @@ -83,7 +90,7 @@ def parse_args(buf): Parse args parses all function arguments. """ buf = buf[len("func("):] - arg = {'name': '', 'type': ''} + arg = None all = [] while len(buf) != 0: @@ -100,11 +107,14 @@ def parse_args(buf): continue if buf[0] == ')': - all.append(arg) + if arg != None: + all.append(arg) buf = buf[1:] - arg = arg.copy() break + if arg == None: + arg = {'name': '', 'type': ''} + (v,) = re.findall(r'^ *([!\.\w{}\[\] ]+)(?:[,)]|func\()', buf) buf = buf[len(v):] diff --git a/tests/test_gocode.py b/tests/test_gocode.py index 866b84d..aaab54b 100644 --- a/tests/test_gocode.py +++ b/tests/test_gocode.py @@ -72,3 +72,14 @@ def test_parse_func_args(): 'args': [{ 'type': 'int', 'name': '' }] }] +def test_parse_func_no_args(): + completion = gocode.parse({ + 'package': '', + 'class': 'func', + 'name': 'print', + 'type': 'func()' + }) + assert completion == [ + "ƒ・print() \t\t-> ()", + 'print()$0', + ]