Dart-code: Autocomplete not inserting parentheses or arguments for some items

Created on 7 Dec 2020  路  5Comments  路  Source: Dart-Code/Dart-Code

Describe the bug
Autocomplete seems to be working for some items, not for others.

So far I have tested these:

| Working | Not working |
|:----------------:|:-------------:|
| Custom functions | print |
| .forEach | widgets |

So this is working as expected for something like a function I wrote myself, or myList.forEach(). Not sure why others aren't working.

To Reproduce
Steps to reproduce the behavior:

  1. In a function, eg main(), type prin
  2. Press Tab to accept 'Print' autocomplete

Expected behavior
The item, eg print() or Text() should be completed with parentheses and arguments if appropriate.

Screenshots
UdRW4b6cJu

9SWkoLOBev

Versions (please complete the following information):

  • VS Code version: 1.51.1
  • Dart extension version: 3.17.0
  • Dart/Flutter SDK version:
    Dart: 2.12.0-76.0.dev
    Flutter: 1.25.0-4.0.pre
in editor in lsanalysis server is bug

All 5 comments

Thanks - tracked this down. We're not currently supported this for things that come via SuggestionSets. I'd actually accidentally fixed this while implementing something else, but that change is not ready to land yet, so I've extracted the fix t o its own change.

https://dart-review.googlesource.com/c/sdk/+/175251/

Awesome!

Thank you for all your hard work Danny, very much appreciated 馃巻

I guess it is a related issue that parenthesis are not added for example to ChangeNotifier.notifyListeners()? This stopped working today after I upgraded Dart Code to the latest version (and enabled LSP).

So this will be fixed too by dart-lang/sdk@2f2f9fc? I guess it will take months before that will be available in Flutter stable, so are there any workarounds? I think this is quite an annoying issue, I already wrote some bugs due to this, see https://github.com/dart-lang/linter/issues/2364.

I guess it is a related issue that parenthesis are not added for example to ChangeNotifier.notifyListeners()?

If you're on the Flutter stable channel, it seems likely. Support for dart.completeFunctionCalls is not yet available in Flutter's stable channel.

So this will be fixed too by dart-lang/sdk@2f2f9fc?

I just tested it on a recent Flutter master and I'm getting parens accepting notifyListeners with dart.completeFunctionCalls enabled, so I believe it's either fix by that change (or the previous one that first added the functionality).

are there any workarounds?

You could either switch back from LSP, or use a different Flutter channel. Unfortunately I don't believe there are any other workarounds. The LSP functionality is not complete in current Flutter stable (this is the reason it's still behind the preview flag). LSP won't be made default until after these fixes all make the Flutter stable channel, though I'd encourage using LSP if there's nothing breaking to you to help identify any remaining issues/gaps. If this is sufficiently annoying, I would recommend switching back.

Was this page helpful?
0 / 5 - 0 ratings