fortran-language-server icon indicating copy to clipboard operation
fortran-language-server copied to clipboard

Import statement in interface block causes uncontrolled error

Open plevold opened this issue 4 years ago • 6 comments

With this minimal example:

module class_myclass
    implicit none

    private
    public myclass

    type :: myclass
        private
    contains
        procedure(my_func), deferred :: my_func
    end type

    interface
        subroutine my_func(this)
            ! error happens when I start typing "myclass" here
            import myclass
        end subroutine
    end interface

end module

I get the following tracebacks in the VSCode output view when I start typing "myclass" after "import":

[Error - 08:15:27] Request textDocument/completion failed.
  Message: 'list' object has no attribute 'only_list'
  Code: -32603 
[object Object]
error handling request {'jsonrpc': '2.0', 'id': 84, 'method': 'textDocument/completion', 'params': {'textDocument': {'uri': 'file:///c%3A/Users/palle/dev/fortran-object-metamodel/fomm_iterator.f90'}, 'position': {'line': 16, 'character': 20}, 'context': {'triggerKind': 1}}}
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 167, in handle
    resp = handler(request)
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 551, in serve_autocomplete
    line_context, context_info = get_line_context(line_prefix)
  File "c:\python39\lib\site-packages\fortls\parse_fortran.py", line 144, in get_line_context
    if len(test_match[1].only_list) > 0:
AttributeError: 'list' object has no attribute 'only_list'
[Error - 08:15:28] Request textDocument/completion failed.
  Message: 'list' object has no attribute 'only_list'
  Code: -32603 
[object Object]
error handling request {'jsonrpc': '2.0', 'id': 86, 'method': 'textDocument/completion', 'params': {'textDocument': {'uri': 'file:///c%3A/Users/palle/dev/fortran-object-metamodel/fomm_iterator.f90'}, 'position': {'line': 16, 'character': 20}, 'context': {'triggerKind': 1}}}
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 167, in handle
    resp = handler(request)
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 551, in serve_autocomplete
    line_context, context_info = get_line_context(line_prefix)
  File "c:\python39\lib\site-packages\fortls\parse_fortran.py", line 144, in get_line_context
    if len(test_match[1].only_list) > 0:
AttributeError: 'list' object has no attribute 'only_list'
[Error - 08:15:29] Request textDocument/completion failed.
  Message: 'list' object has no attribute 'only_list'
  Code: -32603 
[object Object]
error handling request {'jsonrpc': '2.0', 'id': 87, 'method': 'textDocument/completion', 'params': {'textDocument': {'uri': 'file:///c%3A/Users/palle/dev/fortran-object-metamodel/fomm_iterator.f90'}, 'position': {'line': 16, 'character': 22}, 'context': {'triggerKind': 1}}}
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 167, in handle
    resp = handler(request)
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 551, in serve_autocomplete
    line_context, context_info = get_line_context(line_prefix)
  File "c:\python39\lib\site-packages\fortls\parse_fortran.py", line 144, in get_line_context
    if len(test_match[1].only_list) > 0:
AttributeError: 'list' object has no attribute 'only_list'
[Error - 08:17:48] Request textDocument/completion failed.
  Message: 'list' object has no attribute 'only_list'
  Code: -32603 
[object Object]
error handling request {'jsonrpc': '2.0', 'id': 170, 'method': 'textDocument/completion', 'params': {'textDocument': {'uri': 'file:///c%3A/Users/palle/dev/fortran-object-metamodel/myclass.f90'}, 'position': {'line': 14, 'character': 20}, 'context': {'triggerKind': 1}}}
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 167, in handle
    resp = handler(request)
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 551, in serve_autocomplete
    line_context, context_info = get_line_context(line_prefix)
  File "c:\python39\lib\site-packages\fortls\parse_fortran.py", line 144, in get_line_context
    if len(test_match[1].only_list) > 0:
AttributeError: 'list' object has no attribute 'only_list'
[Error - 08:17:56] Request textDocument/completion failed.
  Message: 'list' object has no attribute 'only_list'
  Code: -32603 
[object Object]
error handling request {'jsonrpc': '2.0', 'id': 172, 'method': 'textDocument/completion', 'params': {'textDocument': {'uri': 'file:///c%3A/Users/palle/dev/fortran-object-metamodel/myclass.f90'}, 'position': {'line': 14, 'character': 22}, 'context': {'triggerKind': 1}}}
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 167, in handle
    resp = handler(request)
  File "c:\python39\lib\site-packages\fortls\langserver.py", line 551, in serve_autocomplete
    line_context, context_info = get_line_context(line_prefix)
  File "c:\python39\lib\site-packages\fortls\parse_fortran.py", line 144, in get_line_context
    if len(test_match[1].only_list) > 0:
AttributeError: 'list' object has no attribute 'only_list'

plevold avatar Dec 09 '20 07:12 plevold

I notice the same on my side. Any idea about how to fix it?

gbogopolsky avatar Jul 15 '21 12:07 gbogopolsky

@plevold Is the rest of the syntax for this example legal? Can I ignore the diagnostic and linting errors in :: my_func and this?

gnikit avatar Dec 21 '21 19:12 gnikit

This has now been fixed in fortls v1.14.4 . The autocomplete suggestions are not "working" as expected i.e. the suggestions will not be limited to what was included with import. That will be fixed in a future release see: https://github.com/gnikit/fortls/issues/8

gnikit avatar Dec 22 '21 12:12 gnikit

@plevold Is the rest of the syntax for this example legal? Can I ignore the diagnostic and linting errors in :: my_func and this?

The original example was missing the declaration of the this argument. Also strictly speaking the type should have been abstract since it has a deferred procedure. Here's an example that gfortran compiles with no complaints using -Wall:

module class_myclass
    implicit none

    private
    public myclass

    type, abstract :: myclass
        private
    contains
        procedure(my_func), deferred :: my_func
    end type

    interface
        subroutine my_func(this)
            ! error happens when I start typing "myclass" here
            import myclass
            class(myclass), intent(in) :: this
        end subroutine
    end interface

end module

This has now been fixed in fortls v1.14.4 .

Awsome! Thanks a lot for the effort. This project is making Fortran development much more pleasant!

plevold avatar Dec 22 '21 12:12 plevold

@plevold Thanks for the example code. I will try and sort out the autocomplete suggestions in the next few weeks.

Glad to see people using the new fortls

gnikit avatar Dec 22 '21 13:12 gnikit

@gnikit : You just need to be quite deep inside the fortran github bubble to find out about it. I updated my small guide (https://github.com/JHenneberg/Guide_VSCode-fortran) with your extension.

JHenneberg avatar Jan 03 '22 11:01 JHenneberg