Skip to content

Renaming files sometimes leaves stale analysis errors saying the file does not exist #51159

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
navaronbracke opened this issue Jan 29, 2023 · 23 comments
Labels
devexp-lsp Issues with analysis server's support of Language Server Protocol legacy-area-analyzer Use area-devexp instead. P2 A bug or feature request we're likely to work on

Comments

@navaronbracke
Copy link

navaronbracke commented Jan 29, 2023

I recently did the switch from Dart 2.18.6 to 2.19.0 and I noticed that
the analyzer now loses track of some of its context information when renaming files.

Expected results:

In Dart 2.18.6 and earlier I was able to use my IDE to rename files and the analyzer would update the relevant imports
so I could just continue as if nothing happened.

For example:

  1. Right click on a file in my IDE
  2. Select rename file
  3. Rename the file, e.g. foo.dart -> bar.dart
  4. Confirm the prompt (for my case specifically I get a prompt in VSCode)
  5. The analyzer forwards a bunch of file edits to update imports in affected files
  6. If I open the file I just renamed, everything works as expected. I can perform actions on symbols in the file etc.

Actual results

Step 1 - 4 happen as expected, but the analyzer gets confused for a while and is not able to do step 5 until after a delay.

Does this have to do with #51015 ?
I have seen the analyzer only catch up when reopening the renamed file (even after waiting longer than ten seconds)

Dart SDK version: 2.19.0 (stable) (Mon Jan 23 11:29:09 2023 -0800) on "macos_x64"

Video: https://drive.google.com/file/d/1yXe80zYXPCQ2ltMX0WTDZrJsfSgiKye7/view?usp=sharing

@lrhn lrhn added the legacy-area-analyzer Use area-devexp instead. label Jan 29, 2023
@navaronbracke
Copy link
Author

After some further digging I cannot reproduce the issue with a clean dart create bug and the following sample:

// lib/main.dart

import 'package:bug/foo.dart';

void main() {
 final Foo foo = Foo();
}

// lib/foo.dart
class Foo {}

Maybe it has to do with the size of the codebase?
Can I inspect the memory footprint of the analyzer somewhere? (So I can give a hint at what magnitude of project size this occurs)

@keertip keertip added analyzer-editing-experience P2 A bug or feature request we're likely to work on labels Jan 30, 2023
@keertip
Copy link
Contributor

keertip commented Jan 30, 2023

/cc @bwilkerson @DanTup

@DanTup
Copy link
Collaborator

DanTup commented Jan 30, 2023

@navaronbracke are you able to reproduce this on any public codebase?

Does this have to do with #51015 ?

That code shouldn't affect the LSP server, only the original server protocol. Can you confirm if you hover over the {} next to Dart in the bottom-right of your status bar, you see LSP (and not "DAS") written next to the analysis server?

@navaronbracke
Copy link
Author

I recorded the video while working on https://github.com/navaronbracke/weforza which is one of my own projects.

When I hover over the {} I see Dart Language Server - Started. I assume that is what you are referring to? No mention of DAS in the tooltip.

@DanTup
Copy link
Collaborator

DanTup commented Feb 2, 2023

@navaronbracke apologies - apparently when I moved things into that menu I lost the LSP/DAS tag that was shown. If you run the Dart: Open Extension Log command shortly after opening a project and search for "Analyzer type:" you should see which protocol is being used. You could also run the Dart: Open Analyzer Diagnostics command and look for "Server type:" on the first Status page.

I'll have a go at trying to repro using that code, thanks!

@DanTup
Copy link
Collaborator

DanTup commented Feb 2, 2023

I was able to reproduce this once, but I'm struggling to trigger it again with logging enabled. FWIW, I'm using LSP so I don't believe it's related to #51015.

Can you reproduce the issue reliably, or is it intermittent?

@navaronbracke
Copy link
Author

navaronbracke commented Feb 2, 2023

It says LSP for me too. I can reproduce it reliably (tested it on an arbitrary class and I also get the File does not exist when trying to rename a class symbol shortly after renaming the file where is is defined)

I tried to capture logs and reproduced the bug (on yet another arbitrary class, so that's the 3rd one where I reproduced it)

Steps to reproduce

  1. CMD-Shift-P
  2. Select Dart: Capture Logs (I kept the default settings)
  3. Press OK on the right
  4. Open an arbitrary class file in the project
  5. Rename the file
  6. Press OK in the VSCode dialog
  7. Right click on the name of the class
  8. Select rename symbol
  9. Now I get the File does not exist tooltip
  10. Cancel the capture logs command (just mentioning it for completeness)

These are the logs from the Capture Logs command:

!! PLEASE REVIEW THIS LOG FOR SENSITIVE INFORMATION BEFORE SHARING !!

Dart Code extension: 3.58.0
Flutter extension: 3.58.0 (activated)

App: Visual Studio Code
Version: 1.74.3
Platform: mac

Workspace type: Flutter
Analyzer type: LSP
Multi-root?: false

Dart SDK:
    Loc: /Users/navaronbracke/Documents/flutter/bin/cache/dart-sdk
    Ver: 2.19.0
Flutter SDK:
    Loc: /Users/navaronbracke/Documents/flutter
    Ver: 3.7.0

HTTP_PROXY: undefined
NO_PROXY: undefined

Logging Categories:
    General, Analyzer, AnalyzerTiming, CommandProcesses, DartTest, DAP, VmService, DevTools, FlutterDaemon, FlutterRun, FlutterTest, WebDaemon

Thu Feb 02 2023 [13:46:07 GMT+0100 (Central European Standard Time)] Log file started
[13:46:27] [Analyzer] [Info] ==> Content-Length: 326
[13:46:27] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":71,"method":"workspace/willRenameFiles","params":{"files":[{"oldUri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart","newUri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}]},"clientRequestTime":1675341987128}
[13:46:27] [Analyzer] [Info] <== Content-Length: 98
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:27] [Analyzer] [Info] <== {"id":17,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}
[13:46:27] [Analyzer] [Info] ==> Content-Length: 73
[13:46:27] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":17,"result":null,"clientRequestTime":1675341987173}
[13:46:27] [Analyzer] [Info] <== Content-Length: 175
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}
[13:46:27] [Analyzer] [Info] <== Content-Length: 333
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":71,"jsonrpc":"2.0","result":{"documentChanges":[{"edits":[{"newText":"'package:weforza/widgets/pages/rider_list/foo_page.dart'","range":{"end":{"character":70,"line":4},"start":{"character":7,"line":4}}}],"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart","version":null}}]}}Content-Length: 118
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}
[13:46:27] [Analyzer] [Info] <== Content-Length: 93
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 4706
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart","languageId":"dart","version":1,"text":"import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:weforza/generated/l10n.dart';\nimport 'package:weforza/widgets/pages/ride_list/ride_list_page.dart';\nimport 'package:weforza/widgets/pages/rider_list/rider_list_page.dart';\nimport 'package:weforza/widgets/pages/settings/settings_page.dart';\nimport 'package:weforza/widgets/platform/platform_aware_widget.dart';\n\n/// The home page of the application.\n/// This page provides access to the ride list page, the riders list page\n/// and the settings page.\n///\n/// By default the ride list page is shown.\nclass HomePage extends StatefulWidget {\n  const HomePage({super.key});\n\n  @override\n  State<HomePage> createState() => _HomePageState();\n}\n\nclass _HomePageState extends State<HomePage>\n    with SingleTickerProviderStateMixin {\n  int _selectedIndex = 0;\n\n  late PageController _pageController;\n\n  final _pages = [\n    const RideListPage(),\n    const RiderListPage(),\n    const SettingsPage(),\n  ];\n\n  @override\n  void initState() {\n    super.initState();\n    _pageController = PageController(initialPage: _selectedIndex);\n  }\n\n  @override\n  void dispose() {\n    _pageController.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return PlatformAwareWidget(\n      android: _buildAndroidWidget,\n      ios: _buildIosWidget,\n    );\n  }\n\n  Widget _buildPageView(BuildContext context) {\n    return PageView(\n      controller: _pageController,\n      onPageChanged: (page) {\n        // When switching pages in the page view, the old page gives up focus.\n        // The riders list page has a search field,\n        // and the settings page has several text fields.\n        // Only the ride list page has nothing that can have keyboard focus.\n        if (_selectedIndex != 0) {\n          FocusScope.of(context).unfocus();\n        }\n\n        setState(() {\n          _selectedIndex = page;\n        });\n      },\n      children: _pages,\n    );\n  }\n\n  Widget _buildAndroidWidget(BuildContext context) {\n    return Scaffold(\n      body: _buildPageView(context),\n      bottomNavigationBar: Theme(\n        data: ThemeData(\n          // The NavigationBar needs Material 3 to style its selected icon properly.\n          useMaterial3: true,\n          navigationBarTheme: Theme.of(context).navigationBarTheme,\n        ),\n        child: NavigationBar(\n          destinations: <NavigationDestination>[\n            NavigationDestination(\n              icon: const Icon(Icons.directions_bike),\n              label: S.of(context).Rides,\n            ),\n            NavigationDestination(\n              icon: const Icon(Icons.people),\n              label: S.of(context).Riders,\n            ),\n            NavigationDestination(\n              icon: const Icon(Icons.settings),\n              label: S.of(context).Settings,\n            ),\n          ],\n          labelBehavior: NavigationDestinationLabelBehavior.alwaysShow,\n          onDestinationSelected: (index) {\n            _pageController.animateToPage(\n              index,\n              duration: const Duration(milliseconds: 300),\n              curve: Curves.easeInOut,\n            );\n          },\n          selectedIndex: _selectedIndex,\n        ),\n      ),\n    );\n  }\n\n  Widget _buildIosWidget(BuildContext context) {\n    return CupertinoPageScaffold(\n      resizeToAvoidBottomInset: false,\n      child: Column(\n        children: <Widget>[\n          Expanded(child: _buildPageView(context)),\n          CupertinoTabBar(\n            currentIndex: _selectedIndex,\n            items: [\n              BottomNavigationBarItem(\n                icon: const Icon(Icons.directions_bike),\n                label: S.of(context).Rides,\n              ),\n              BottomNavigationBarItem(\n                icon: const Icon(CupertinoIcons.person_2_fill),\n                label: S.of(context).Riders,\n              ),\n              BottomNavigationBarItem(\n                icon: const Icon(CupertinoIcons.settings),\n                label: S.of(context).Settings,\n              ),\n            ],\n            onTap: (index) {\n              _pageController.animateToPage(\n                index,\n                duration: const Duration(milliseconds: 300),\n                curve: Curves.easeInOut,\n              );\n            },\n          )\n        ],\n      ),\n    );\n  }\n}\n"}},"clientRequestTime":1675341989293}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 391
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart","version":2},"contentChanges":[{"range":{"start":{"line":4,"character":7},"end":{"line":4,"character":70}},"rangeLength":63,"text":"'package:weforza/widgets/pages/rider_list/foo_page.dart'"}]},"clientRequestTime":1675341989297}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 218
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":72,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}},"clientRequestTime":1675341989300}
[13:46:29] [Analyzer] [Info] <== Content-Length: 98
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] ==> Content-Length: 216
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","method":"textDocument/didClose","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}},"clientRequestTime":1675341989323}
[13:46:29] [Analyzer] [Info] <== {"id":18,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 192
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}Content-Length: 3019
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] ==> Content-Length: 73
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":18,"result":null,"clientRequestTime":1675341989344}
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"Scaffold","range":{"end":{"character":5,"line":119},"start":{"character":11,"line":66}}},{"label":"AppBar","range":{"end":{"character":7,"line":98},"start":{"character":14,"line":68}}},{"label":"<Widget>[]","range":{"end":{"character":9,"line":97},"start":{"character":17,"line":70}}},{"label":"Consumer","range":{"end":{"character":11,"line":80},"start":{"character":10,"line":71}}},{"label":"IconButton","range":{"end":{"character":15,"line":78},"start":{"character":21,"line":73}}},{"label":"IconButton","range":{"end":{"character":11,"line":88},"start":{"character":10,"line":81}}},{"label":"MaterialPageRoute","range":{"end":{"character":15,"line":86},"start":{"character":14,"line":84}}},{"label":"IconButton","range":{"end":{"character":11,"line":96},"start":{"character":10,"line":89}}},{"label":"MaterialPageRoute","range":{"end":{"character":15,"line":94},"start":{"character":14,"line":92}}},{"label":"RiderList","range":{"end":{"character":7,"line":118},"start":{"character":12,"line":99}}},{"label":"TextFormField","range":{"end":{"character":9,"line":117},"start":{"character":21,"line":103}}},{"label":"InputDecoration","range":{"end":{"character":11,"line":116},"start":{"character":22,"line":110}}},{"label":"CupertinoPageScaffold","range":{"end":{"character":5,"line":177},"start":{"character":11,"line":123}}},{"label":"CupertinoNavigationBar","range":{"end":{"character":7,"line":159},"start":{"character":21,"line":125}}},{"label":"Row","range":{"end":{"character":9,"line":158},"start":{"character":16,"line":127}}},{"label":"<Widget>[]","range":{"end":{"character":11,"line":157},"start":{"character":20,"line":128}}},{"label":"Expanded","range":{"end":{"character":13,"line":134},"start":{"character":12,"line":129}}},{"label":"Padding","range":{"end":{"character":15,"line":133},"start":{"character":21,"line":130}}},{"label":"CupertinoIconButton","range":{"end":{"character":13,"line":140},"start":{"character":12,"line":135}}},{"label":"CupertinoIconButton","range":{"end":{"character":13,"line":148},"start":{"character":12,"line":141}}},{"label":"MaterialPageRoute","range":{"end":{"character":17,"line":146},"start":{"character":16,"line":144}}},{"label":"CupertinoIconButton","range":{"end":{"character":13,"line":156},"start":{"character":12,"line":149}}},{"label":"MaterialPageRoute","range":{"end":{"character":17,"line":154},"start":{"character":16,"line":152}}},{"label":"SafeArea","range":{"end":{"character":7,"line":176},"start":{"character":13,"line":160}}},{"label":"RiderList","range":{"end":{"character":9,"line":175},"start":{"character":15,"line":162}}},{"label":"Padding","range":{"end":{"character":11,"line":174},"start":{"character":23,"line":166}}},{"label":"CupertinoSearchTextField","range":{"end":{"character":13,"line":173},"start":{"character":19,"line":168}}}],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}Content-Length: 15674
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":35,"line":17},"start":{"character":2,"line":17}},"element":{"kind":"CONSTRUCTOR","name":"RiderListPage","parameters":"({super.key})","range":{"end":{"character":21,"line":17},"start":{"character":8,"line":17}}},"range":{"end":{"character":35,"line":17},"start":{"character":2,"line":17}}},{"codeRange":{"end":{"character":70,"line":20},"start":{"character":2,"line":20}},"element":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":42,"line":20},"start":{"character":31,"line":20}},"returnType":"ConsumerState<RiderListPage>"},"range":{"end":{"character":70,"line":20},"start":{"character":2,"line":19}}}],"codeRange":{"end":{"character":1,"line":21},"start":{"character":0,"line":16}},"element":{"kind":"CLASS","name":"RiderListPage","range":{"end":{"character":19,"line":16},"start":{"character":6,"line":16}}},"range":{"end":{"character":1,"line":21},"start":{"character":0,"line":15}}},{"children":[{"codeRange":{"end":{"character":45,"line":24},"start":{"character":8,"line":24}},"element":{"kind":"FIELD","name":"_controller","range":{"end":{"character":19,"line":24},"start":{"character":8,"line":24}},"returnType":""},"range":{"end":{"character":46,"line":24},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":52,"line":26},"start":{"character":8,"line":26}},"element":{"kind":"FIELD","name":"_searchController","range":{"end":{"character":25,"line":26},"start":{"character":8,"line":26}},"returnType":""},"range":{"end":{"character":53,"line":26},"start":{"character":2,"line":26}}},{"children":[{"codeRange":{"end":{"character":70,"line":36},"start":{"character":46,"line":36}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderDetailsPage","range":{"end":{"character":46,"line":36},"start":{"character":46,"line":36}}},"range":{"end":{"character":70,"line":36},"start":{"character":46,"line":36}}}],"codeRange":{"end":{"character":3,"line":38},"start":{"character":2,"line":28}},"element":{"kind":"METHOD","name":"_onRiderSelected","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":28},"start":{"character":7,"line":28}},"returnType":"void"},"range":{"end":{"character":3,"line":38},"start":{"character":2,"line":28}}},{"codeRange":{"end":{"character":3,"line":63},"start":{"character":2,"line":41}},"element":{"kind":"METHOD","name":"_filterOnSearchQuery","parameters":"(List<Rider> list, String searchQuery)","range":{"end":{"character":34,"line":41},"start":{"character":14,"line":41}},"returnType":"List<Rider>"},"range":{"end":{"character":3,"line":63},"start":{"character":2,"line":40}}},{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":37,"line":69},"start":{"character":15,"line":69}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderListTitle","range":{"end":{"character":15,"line":69},"start":{"character":15,"line":69}}},"range":{"end":{"character":37,"line":69},"start":{"character":15,"line":69}}},{"children":[{"children":[{"codeRange":{"end":{"character":50,"line":74},"start":{"character":22,"line":74}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.person_add)","range":{"end":{"character":22,"line":74},"start":{"character":22,"line":74}}},"range":{"end":{"character":50,"line":74},"start":{"character":22,"line":74}}},{"codeRange":{"end":{"character":75,"line":76},"start":{"character":58,"line":76}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderForm","range":{"end":{"character":58,"line":76},"start":{"character":58,"line":76}}},"range":{"end":{"character":75,"line":76},"start":{"character":58,"line":76}}}],"codeRange":{"end":{"character":15,"line":78},"start":{"character":21,"line":73}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"IconButton","range":{"end":{"character":21,"line":73},"start":{"character":21,"line":73}}},"range":{"end":{"character":15,"line":78},"start":{"character":21,"line":73}}}],"codeRange":{"end":{"character":11,"line":80},"start":{"character":10,"line":71}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Consumer","range":{"end":{"character":10,"line":71},"start":{"character":10,"line":71}}},"range":{"end":{"character":11,"line":80},"start":{"character":10,"line":71}}},{"children":[{"codeRange":{"end":{"character":49,"line":82},"start":{"character":18,"line":82}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.file_download)","range":{"end":{"character":18,"line":82},"start":{"character":18,"line":82}}},"range":{"end":{"character":49,"line":82},"start":{"character":18,"line":82}}},{"codeRange":{"end":{"character":62,"line":85},"start":{"character":38,"line":85}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"ImportRidersPage","range":{"end":{"character":38,"line":85},"start":{"character":38,"line":85}}},"range":{"end":{"character":62,"line":85},"start":{"character":38,"line":85}}}],"codeRange":{"end":{"character":11,"line":88},"start":{"character":10,"line":81}},"element":{"kind":"CONSTRUCTOR_INVOCATI
[13:46:29] [Analyzer] [Info] <== ON","name":"IconButton","range":{"end":{"character":10,"line":81},"start":{"character":10,"line":81}}},"range":{"end":{"character":11,"line":88},"start":{"character":10,"line":81}}},{"children":[{"codeRange":{"end":{"character":47,"line":90},"start":{"character":18,"line":90}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.file_upload)","range":{"end":{"character":18,"line":90},"start":{"character":18,"line":90}}},"range":{"end":{"character":47,"line":90},"start":{"character":18,"line":90}}},{"codeRange":{"end":{"character":62,"line":93},"start":{"character":38,"line":93}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"ExportRidersPage","range":{"end":{"character":38,"line":93},"start":{"character":38,"line":93}}},"range":{"end":{"character":62,"line":93},"start":{"character":38,"line":93}}}],"codeRange":{"end":{"character":11,"line":96},"start":{"character":10,"line":89}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"IconButton","range":{"end":{"character":10,"line":89},"start":{"character":10,"line":89}}},"range":{"end":{"character":11,"line":96},"start":{"character":10,"line":89}}}],"codeRange":{"end":{"character":7,"line":98},"start":{"character":14,"line":68}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"AppBar","range":{"end":{"character":14,"line":68},"start":{"character":14,"line":68}}},"range":{"end":{"character":7,"line":98},"start":{"character":14,"line":68}}},{"children":[{"children":[{"codeRange":{"end":{"character":48,"line":111},"start":{"character":24,"line":111}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.search)","range":{"end":{"character":24,"line":111},"start":{"character":24,"line":111}}},"range":{"end":{"character":48,"line":111},"start":{"character":24,"line":111}}}],"codeRange":{"end":{"character":9,"line":117},"start":{"character":21,"line":103}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"TextFormField","range":{"end":{"character":21,"line":103},"start":{"character":21,"line":103}}},"range":{"end":{"character":9,"line":117},"start":{"character":21,"line":103}}}],"codeRange":{"end":{"character":7,"line":118},"start":{"character":12,"line":99}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderList","range":{"end":{"character":12,"line":99},"start":{"character":12,"line":99}}},"range":{"end":{"character":7,"line":118},"start":{"character":12,"line":99}}}],"codeRange":{"end":{"character":5,"line":119},"start":{"character":11,"line":66}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Scaffold","range":{"end":{"character":11,"line":66},"start":{"character":11,"line":66}}},"range":{"end":{"character":5,"line":119},"start":{"character":11,"line":66}}}],"codeRange":{"end":{"character":3,"line":120},"start":{"character":2,"line":65}},"element":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":65},"start":{"character":9,"line":65}},"returnType":"Widget"},"range":{"end":{"character":3,"line":120},"start":{"character":2,"line":65}}},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":39,"line":132},"start":{"character":23,"line":132}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderListTitle","range":{"end":{"character":23,"line":132},"start":{"character":23,"line":132}}},"range":{"end":{"character":39,"line":132},"start":{"character":23,"line":132}}}],"codeRange":{"end":{"character":15,"line":133},"start":{"character":21,"line":130}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Padding","range":{"end":{"character":21,"line":130},"start":{"character":21,"line":130}}},"range":{"end":{"character":15,"line":133},"start":{"character":21,"line":130}}}],"codeRange":{"end":{"character":13,"line":134},"start":{"character":12,"line":129}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Expanded","range":{"end":{"character":12,"line":129},"start":{"character":12,"line":129}}},"range":{"end":{"character":13,"line":134},"start":{"character":12,"line":129}}},{"children":[{"codeRange":{"end":{"character":73,"line":138},"start":{"character":56,"line":138}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderForm","range":{"end":{"character":56,"line":138},"start":{"character":56,"line":138}}},"range":{"end":{"character":73,"line":138},"start":{"character":56,"line":138}}}],"codeRange":{"end":{"character":13,"line":140},"start":{"character":12,"line":135}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoIconButton","range":{"end":{"character":12,"line":135},"start":{"character":12,"line":135}}},"range":{"end":{"character":13,"line":140},"start":{"character":12,"line":135}}},{"children":[{"codeRange":{"end":{"character":64,"line":145},"start":{"character":40,"line":145}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"ImportRidersPage","range":{"end":{"character":40,"line":145},"start":{"character":40,"line":145}}},"range":{"end":{"character":64,"line":145},"start":{"character":40,"line":145}}}],"codeRange":{"end":{"character":13,"line":148},"start":{"character":12,"line":141}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoIconButton","range":{"end":{"character":12,"line":141},"start":{"character":12,"line":141}}},"range":{"end":{"character":13,"line":148},"start":{"character":12,"line":141}}},{"children":[{"codeRange":{"end":{"character":64,"line":153},"start":{"character":40,"line":153}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"ExportRidersPage","range":{"end":{"character":40,"line":153},"start":{"character":40,"line":153}}},"range":{"end":{"character":64,"line":153},"start":{"character":40,"line":153}}}],"codeRange":{"end":{"character":13,"line":156},"start":{"character":12,"line":149}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoIconButton","range":{"end":{"character":12,"line":149},"start":{"character":12,"line":149}}},"range":{"end":{"character":13,"line":156},"start":{"character":12,"line":149}}}],"codeRange":{"end":{"character":9,"line":158},"start":{"character":16,"line":127}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Row","range":{"end":{"character":16,"line":127},"start":{"character":16,"line":127}}},"range":{"end":{"character":9,"line":158},"start":{"character":16,"line":127}}}],"codeRange":{"end":{"character":7,"line":159},"start":{"character":21,"line":125}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoNavigationBar","range":{"end":{"character":21,"line":125},"start":{"character":21,"line":125}}},"range":{"end":{"character":7,"line":159},"start":{"character":21,"line":125}}},{"children":[{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":59,"line":170},"start":{"character":26,"line":170}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(CupertinoIcons.search)","range":{"end":{"character":26,"line":170},"start":{"character":26,"line":170}}},"range":{"end":{"character":59,"line":170},"start":{"character":26,"line":170}}}],"codeRange":{"end":{"character":13,"line":173},"start":{"character":19,"line":168}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoSearchTextField","range":{"end":{"character":19,"line":168},"start":{"character":19,"line":168}}},"range":{"end":{"character":13,"line":173},"start":{"character":19,"line":168}}}],"codeRange":{"end":{"character":11,"line":174},"start":{"character":23,"line":166}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Padding","range":{"end":{"character":23,"line":166},"start":{"character":23,"line":166}}},"range":{"end":{"character":11,"line":174},"start":{"character":23,"line":166}}}],"codeRange":{"end":{"character":9,"line":175},"start":{"character":15,"line":162}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"RiderList","range":{"end":{"character":15,"line":162},"start":{"character":15,"line":162}}},"range":{"end":{"character":9,"line":175},"start":{"character":15,"line":162}}}],"codeRange":{"end":{"character":7,"line":176},"start":{"character":13,"line":160}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"SafeArea","range":{"end":{"character":13,"line":160},"start":{"character":13,"line":160}}},"range":{"end":{"character":7,"line":176},"sta
[13:46:29] [Analyzer] [Info] <== rt":{"character":13,"line":160}}}],"codeRange":{"end":{"character":5,"line":177},"start":{"character":11,"line":123}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoPageScaffold","range":{"end":{"character":11,"line":123},"start":{"character":11,"line":123}}},"range":{"end":{"character":5,"line":177},"start":{"character":11,"line":123}}}],"codeRange":{"end":{"character":3,"line":178},"start":{"character":2,"line":122}},"element":{"kind":"METHOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":122},"start":{"character":9,"line":122}},"returnType":"Widget"},"range":{"end":{"character":3,"line":178},"start":{"character":2,"line":122}}},{"children":[{"codeRange":{"end":{"character":5,"line":185},"start":{"character":11,"line":182}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"PlatformAwareWidget","range":{"end":{"character":11,"line":182},"start":{"character":11,"line":182}}},"range":{"end":{"character":5,"line":185},"start":{"character":11,"line":182}}}],"codeRange":{"end":{"character":3,"line":186},"start":{"character":2,"line":181}},"element":{"kind":"METHOD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":181},"start":{"character":9,"line":181}},"returnType":"Widget"},"range":{"end":{"character":3,"line":186},"start":{"character":2,"line":180}}},{"codeRange":{"end":{"character":3,"line":193},"start":{"character":2,"line":189}},"element":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":189},"start":{"character":7,"line":189}},"returnType":"void"},"range":{"end":{"character":3,"line":193},"start":{"character":2,"line":188}}}],"codeRange":{"end":{"character":1,"line":194},"start":{"character":0,"line":23}},"element":{"kind":"CLASS","name":"_RiderListPageState","range":{"end":{"character":25,"line":23},"start":{"character":6,"line":23}}},"range":{"end":{"character":1,"line":194},"start":{"character":0,"line":23}}}],"codeRange":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}Content-Length: 17549
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishFlutterOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":35,"line":17},"start":{"character":2,"line":17}},"dartElement":{"kind":"CONSTRUCTOR","name":"RiderListPage","parameters":"({super.key})","range":{"end":{"character":21,"line":17},"start":{"character":8,"line":17}}},"kind":"DART_ELEMENT","range":{"end":{"character":35,"line":17},"start":{"character":2,"line":17}}},{"codeRange":{"end":{"character":70,"line":20},"start":{"character":2,"line":20}},"dartElement":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":42,"line":20},"start":{"character":31,"line":20}},"returnType":"ConsumerState<RiderListPage>"},"kind":"DART_ELEMENT","range":{"end":{"character":70,"line":20},"start":{"character":2,"line":19}}}],"codeRange":{"end":{"character":1,"line":21},"start":{"character":0,"line":16}},"dartElement":{"kind":"CLASS","name":"RiderListPage","range":{"end":{"character":19,"line":16},"start":{"character":6,"line":16}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":21},"start":{"character":0,"line":15}}},{"children":[{"codeRange":{"end":{"character":45,"line":24},"start":{"character":8,"line":24}},"dartElement":{"kind":"FIELD","name":"_controller","range":{"end":{"character":19,"line":24},"start":{"character":8,"line":24}},"returnType":""},"kind":"DART_ELEMENT","range":{"end":{"character":46,"line":24},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":52,"line":26},"start":{"character":8,"line":26}},"dartElement":{"kind":"FIELD","name":"_searchController","range":{"end":{"character":25,"line":26},"start":{"character":8,"line":26}},"returnType":""},"kind":"DART_ELEMENT","range":{"end":{"character":53,"line":26},"start":{"character":2,"line":26}}},{"children":[{"attributes":[],"children":[],"className":"RiderDetailsPage","codeRange":{"end":{"character":70,"line":36},"start":{"character":46,"line":36}},"kind":"NEW_INSTANCE","range":{"end":{"character":70,"line":36},"start":{"character":46,"line":36}}}],"codeRange":{"end":{"character":3,"line":38},"start":{"character":2,"line":28}},"dartElement":{"kind":"METHOD","name":"_onRiderSelected","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":28},"start":{"character":7,"line":28}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":38},"start":{"character":2,"line":28}}},{"codeRange":{"end":{"character":3,"line":63},"start":{"character":2,"line":41}},"dartElement":{"kind":"METHOD","name":"_filterOnSearchQuery","parameters":"(List<Rider> list, String searchQuery)","range":{"end":{"character":34,"line":41},"start":{"character":14,"line":41}},"returnType":"List<Rider>"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":63},"start":{"character":2,"line":40}}},{"children":[{"attributes":[{"label":"false","name":"resizeToAvoidBottomInset","valueRange":{"end":{"character":37,"line":67},"start":{"character":32,"line":67}}}],"children":[{"attributes":[],"children":[{"attributes":[],"children":[],"className":"RiderListTitle","codeRange":{"end":{"character":37,"line":69},"start":{"character":15,"line":69}},"kind":"NEW_INSTANCE","range":{"end":{"character":37,"line":69},"start":{"character":15,"line":69}}},{"attributes":[],"children":[{"attributes":[],"children":[{"attributes":[{"label":"Icons.person_add","name":"icon","valueRange":{"end":{"character":49,"line":74},"start":{"character":33,"line":74}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":50,"line":74},"start":{"character":22,"line":74}},"kind":"NEW_INSTANCE","range":{"end":{"character":50,"line":74},"start":{"character":22,"line":74}}},{"attributes":[],"children":[],"className":"RiderForm","codeRange":{"end":{"character":75,"line":76},"start":{"character":58,"line":76}},"kind":"NEW_INSTANCE","range":{"end":{"character":75,"line":76},"start":{"character":58,"line":76}}}],"className":"IconButton","codeRange":{"end":{"character":15,"line":78},"start":{"character":21,"line":73}},"kind":"NEW_INSTANCE","range":{"end":{"character":15,"line":78},"start":{"character":21,"line":73}}}],"className":"Consumer","codeRange":{"end":{"character":11,"line":80},"start":{"character":10,"line":71}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":80},"start":{"character":10,"line":71}}},{"attributes":[],"children":[{"attributes":[{"label":"Icons.file_download","name":"icon","valueRange":{"end":{"character":48,"line":82},"start":{"character":29,"line":82}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":49,"line":82},"start":{"character":18,"line":82}},"kind":"NEW_INSTANCE","range":{"end":{"character":49,"line":82},"start":{"character":18,"line":82}}},{"attributes":[],"children":[],"className":"ImportRidersPage","codeRange":{"end":{"character":62,"line":85},"start":{"character":38,"line":85}},"kind":"NEW_INSTANCE","range":{"end":{"character":62,"line":85},"start":{"character":38,"line":85}}}],"className":"IconButton","codeRange":{"end":{"character":11,"line":88},"start":{"character":10,"line":81}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":88},"start":{"character":10,"line":81}}},{"attributes":[],"children":[{"attributes":[{"label":"Icons.file_upload","name":"icon","valueRange":{"end":{"character":46,"line":90},"start":{"character":29,"line":90}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":47,"line":90},"start":{"character":18,"line":90}},"kind":"NEW_INSTANCE","range":{"end":{"character":47,"line":90},"start":{"character":18,"line":90}}},{"attributes":[],"children":[],"className":"ExportRidersPage","codeRange":{"end":{"character":62,"line":93},"start":
[13:46:29] [Analyzer] [Info] <== {"character":38,"line":93}},"kind":"NEW_INSTANCE","range":{"end":{"character":62,"line":93},"start":{"character":38,"line":93}}}],"className":"IconButton","codeRange":{"end":{"character":11,"line":96},"start":{"character":10,"line":89}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":96},"start":{"character":10,"line":89}}}],"className":"AppBar","codeRange":{"end":{"character":7,"line":98},"start":{"character":14,"line":68}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":98},"start":{"character":14,"line":68}}},{"attributes":[{"label":"() => …","name":"onRiderSelected","valueRange":{"end":{"character":56,"line":100},"start":{"character":25,"line":100}}},{"label":"_filterOnSearchQuery","name":"filter","valueRange":{"end":{"character":36,"line":101},"start":{"character":16,"line":101}}},{"label":"_searchController.searchQuery","name":"searchQueryStream","valueRange":{"end":{"character":56,"line":102},"start":{"character":27,"line":102}}}],"children":[{"attributes":[{"label":"_controller","name":"controller","valueRange":{"end":{"character":33,"line":104},"start":{"character":22,"line":104}}},{"label":"TextInputAction.search","name":"textInputAction","valueRange":{"end":{"character":49,"line":105},"start":{"character":27,"line":105}}},{"label":"TextInputType.text","name":"keyboardType","valueRange":{"end":{"character":42,"line":106},"start":{"character":24,"line":106}}},{"label":"false","name":"autocorrect","valueRange":{"end":{"character":28,"line":107},"start":{"character":23,"line":107}}},{"label":"AutovalidateMode.disabled","name":"autovalidateMode","valueRange":{"end":{"character":53,"line":108},"start":{"character":28,"line":108}}},{"label":"_searchController.onQueryChanged","name":"onChanged","valueRange":{"end":{"character":53,"line":109},"start":{"character":21,"line":109}}}],"children":[{"attributes":[{"label":"Icons.search","name":"icon","valueRange":{"end":{"character":47,"line":111},"start":{"character":35,"line":111}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":48,"line":111},"start":{"character":24,"line":111}},"kind":"NEW_INSTANCE","range":{"end":{"character":48,"line":111},"start":{"character":24,"line":111}}}],"className":"TextFormField","codeRange":{"end":{"character":9,"line":117},"start":{"character":21,"line":103}},"kind":"NEW_INSTANCE","range":{"end":{"character":9,"line":117},"start":{"character":21,"line":103}}}],"className":"RiderList","codeRange":{"end":{"character":7,"line":118},"start":{"character":12,"line":99}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":118},"start":{"character":12,"line":99}}}],"className":"Scaffold","codeRange":{"end":{"character":5,"line":119},"start":{"character":11,"line":66}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":119},"start":{"character":11,"line":66}}}],"codeRange":{"end":{"character":3,"line":120},"start":{"character":2,"line":65}},"dartElement":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":65},"start":{"character":9,"line":65}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":120},"start":{"character":2,"line":65}}},{"children":[{"attributes":[{"label":"false","name":"resizeToAvoidBottomInset","valueRange":{"end":{"character":37,"line":124},"start":{"character":32,"line":124}}}],"children":[{"attributes":[{"label":"false","name":"transitionBetweenRoutes","valueRange":{"end":{"character":38,"line":126},"start":{"character":33,"line":126}}}],"children":[{"attributes":[],"children":[{"attributes":[],"children":[{"attributes":[{"label":"EdgeInsets.only(left: 8)","name":"padding","valueRange":{"end":{"character":49,"line":131},"start":{"character":25,"line":131}}}],"children":[{"attributes":[],"children":[],"className":"RiderListTitle","codeRange":{"end":{"character":39,"line":132},"start":{"character":23,"line":132}},"kind":"NEW_INSTANCE","range":{"end":{"character":39,"line":132},"start":{"character":23,"line":132}}}],"className":"Padding","codeRange":{"end":{"character":15,"line":133},"start":{"character":21,"line":130}},"kind":"NEW_INSTANCE","range":{"end":{"character":15,"line":133},"start":{"character":21,"line":130}}}],"className":"Expanded","codeRange":{"end":{"character":13,"line":134},"start":{"character":12,"line":129}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":134},"start":{"character":12,"line":129}}},{"attributes":[{"label":"CupertinoIcons.person_badge_plus_fill","name":"icon","valueRange":{"end":{"character":57,"line":136},"start":{"character":20,"line":136}}}],"children":[{"attributes":[],"children":[],"className":"RiderForm","codeRange":{"end":{"character":73,"line":138},"start":{"character":56,"line":138}},"kind":"NEW_INSTANCE","range":{"end":{"character":73,"line":138},"start":{"character":56,"line":138}}}],"className":"CupertinoIconButton","codeRange":{"end":{"character":13,"line":140},"start":{"character":12,"line":135}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":140},"start":{"character":12,"line":135}}},{"attributes":[{"label":"CupertinoIcons.arrow_down_doc_fill","name":"icon","valueRange":{"end":{"character":54,"line":142},"start":{"character":20,"line":142}}}],"children":[{"attributes":[],"children":[],"className":"ImportRidersPage","codeRange":{"end":{"character":64,"line":145},"start":{"character":40,"line":145}},"kind":"NEW_INSTANCE","range":{"end":{"character":64,"line":145},"start":{"character":40,"line":145}}}],"className":"CupertinoIconButton","codeRange":{"end":{"character":13,"line":148},"start":{"character":12,"line":141}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":148},"start":{"character":12,"line":141}}},{"attributes":[{"label":"CupertinoIcons.arrow_up_doc_fill","name":"icon","valueRange":{"end":{"character":52,"line":150},"start":{"character":20,"line":150}}}],"children":[{"attributes":[],"children":[],"className":"ExportRidersPage","codeRange":{"end":{"character":64,"line":153},"start":{"character":40,"line":153}},"kind":"NEW_INSTANCE","range":{"end":{"character":64,"line":153},"start":{"character":40,"line":153}}}],"className":"CupertinoIconButton","codeRange":{"end":{"character":13,"line":156},"start":{"character":12,"line":149}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":156},"start":{"character":12,"line":149}}}],"className":"Row","codeRange":{"end":{"character":9,"line":158},"start":{"character":16,"line":127}},"kind":"NEW_INSTANCE","range":{"end":{"character":9,"line":158},"start":{"character":16,"line":127}}}],"className":"CupertinoNavigationBar","codeRange":{"end":{"character":7,"line":159},"start":{"character":21,"line":125}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":159},"start":{"character":21,"line":125}}},{"attributes":[{"label":"false","name":"bottom","valueRange":{"end":{"character":21,"line":161},"start":{"character":16,"line":161}}}],"children":[{"attributes":[{"label":"() => …","name":"onRiderSelected","valueRange":{"end":{"character":58,"line":163},"start":{"character":27,"line":163}}},{"label":"_filterOnSearchQuery","name":"filter","valueRange":{"end":{"character":38,"line":164},"start":{"character":18,"line":164}}},{"label":"_searchController.searchQuery","name":"searchQueryStream","valueRange":{"end":{"character":58,"line":165},"start":{"character":29,"line":165}}}],"children":[{"attributes":[{"label":"const EdgeInsets.all(8)","name":"padding","valueRange":{"end":{"character":44,"line":167},"start":{"character":21,"line":167}}}],"children":[{"attributes":[{"label":"_controller","name":"controller","valueRange":{"end":{"character":37,"line":169},"start":{"character":26,"line":169}}},{"label":"_searchController.onQueryChanged","name":"onChanged","valueRange":{"end":{"character":57,"line":171},"start":{"character":25,"line":171}}},{"label":"S.of(context).SearchRiders","name":"placeholder","valueRange":{"end":{"character":53,"line":172},"start":{"character":27,"line":172}}}],"children":[{"attributes":[{"label":"CupertinoIcons.search","name":"icon","valueRange":{"end":{"character":58,"line":170},"start":{"character":37,"line":170}}}],"children":[],"class
[13:46:29] [Analyzer] [Info] <== Name":"Icon","codeRange":{"end":{"character":59,"line":170},"start":{"character":26,"line":170}},"kind":"NEW_INSTANCE","range":{"end":{"character":59,"line":170},"start":{"character":26,"line":170}}}],"className":"CupertinoSearchTextField","codeRange":{"end":{"character":13,"line":173},"start":{"character":19,"line":168}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":173},"start":{"character":19,"line":168}}}],"className":"Padding","codeRange":{"end":{"character":11,"line":174},"start":{"character":23,"line":166}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":174},"start":{"character":23,"line":166}}}],"className":"RiderList","codeRange":{"end":{"character":9,"line":175},"start":{"character":15,"line":162}},"kind":"NEW_INSTANCE","range":{"end":{"character":9,"line":175},"start":{"character":15,"line":162}}}],"className":"SafeArea","codeRange":{"end":{"character":7,"line":176},"start":{"character":13,"line":160}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":176},"start":{"character":13,"line":160}}}],"className":"CupertinoPageScaffold","codeRange":{"end":{"character":5,"line":177},"start":{"character":11,"line":123}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":177},"start":{"character":11,"line":123}}}],"codeRange":{"end":{"character":3,"line":178},"start":{"character":2,"line":122}},"dartElement":{"kind":"METHOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":122},"start":{"character":9,"line":122}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":178},"start":{"character":2,"line":122}}},{"children":[{"attributes":[{"label":"_buildAndroidWidget","name":"android","valueRange":{"end":{"character":34,"line":183},"start":{"character":15,"line":183}}},{"label":"_buildIosWidget","name":"ios","valueRange":{"end":{"character":26,"line":184},"start":{"character":11,"line":184}}}],"children":[],"className":"PlatformAwareWidget","codeRange":{"end":{"character":5,"line":185},"start":{"character":11,"line":182}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":185},"start":{"character":11,"line":182}}}],"codeRange":{"end":{"character":3,"line":186},"start":{"character":2,"line":181}},"dartElement":{"kind":"METHOD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":181},"start":{"character":9,"line":181}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":186},"start":{"character":2,"line":180}}},{"codeRange":{"end":{"character":3,"line":193},"start":{"character":2,"line":189}},"dartElement":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":189},"start":{"character":7,"line":189}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":193},"start":{"character":2,"line":188}}}],"codeRange":{"end":{"character":1,"line":194},"start":{"character":0,"line":23}},"dartElement":{"kind":"CLASS","name":"_RiderListPageState","range":{"end":{"character":25,"line":23},"start":{"character":6,"line":23}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":194},"start":{"character":0,"line":23}}}],"codeRange":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}},"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}}},"kind":"DART_ELEMENT","range":{"end":{"character":0,"line":195},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 6854
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","languageId":"dart","version":1,"text":"import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:weforza/generated/l10n.dart';\nimport 'package:weforza/model/debounce_search_delegate.dart';\nimport 'package:weforza/model/rider/rider.dart';\nimport 'package:weforza/widgets/pages/export_data_page/export_riders_page.dart';\nimport 'package:weforza/widgets/pages/import_riders_page.dart';\nimport 'package:weforza/widgets/pages/rider_details/rider_details_page.dart';\nimport 'package:weforza/widgets/pages/rider_form.dart';\nimport 'package:weforza/widgets/pages/rider_list/rider_list.dart';\nimport 'package:weforza/widgets/pages/rider_list/rider_list_title.dart';\nimport 'package:weforza/widgets/platform/cupertino_icon_button.dart';\nimport 'package:weforza/widgets/platform/platform_aware_widget.dart';\n\n/// This widget represents the list of riders.\nclass RiderListPage extends ConsumerStatefulWidget {\n  const RiderListPage({super.key});\n\n  @override\n  ConsumerState<RiderListPage> createState() => _RiderListPageState();\n}\n\nclass _RiderListPageState extends ConsumerState<RiderListPage> {\n  final _controller = TextEditingController();\n\n  final _searchController = DebounceSearchDelegate();\n\n  void _onRiderSelected(BuildContext context) {\n    // Clear the search query.\n    _controller.clear();\n\n    // Unfocus the search field before exiting this page.\n    FocusScope.of(context).unfocus();\n\n    Navigator.of(context).push(\n      MaterialPageRoute(builder: (context) => const RiderDetailsPage()),\n    );\n  }\n\n  /// Filter the given [list] on the current [searchQuery].\n  List<Rider> _filterOnSearchQuery(List<Rider> list, String searchQuery) {\n    final query = searchQuery.trim().toLowerCase();\n\n    if (query.isEmpty) {\n      return list;\n    }\n\n    return list.where((rider) {\n      final firstName = rider.firstName.toLowerCase();\n      final lastName = rider.lastName.toLowerCase();\n      final alias = rider.alias.toLowerCase();\n\n      if (firstName.contains(query) || lastName.contains(query)) {\n        return true;\n      }\n\n      if (alias.isNotEmpty && alias.contains(query)) {\n        return true;\n      }\n\n      return false;\n    }).toList();\n  }\n\n  Widget _buildAndroidWidget(BuildContext context) {\n    return Scaffold(\n      resizeToAvoidBottomInset: false,\n      appBar: AppBar(\n        title: const RiderListTitle(),\n        actions: <Widget>[\n          Consumer(\n            builder: (context, ref, child) {\n              return IconButton(\n                icon: const Icon(Icons.person_add),\n                onPressed: () => Navigator.of(context).push(\n                  MaterialPageRoute(builder: (context) => const RiderForm()),\n                ),\n              );\n            },\n          ),\n          IconButton(\n            icon: const Icon(Icons.file_download),\n            onPressed: () => Navigator.of(context).push(\n              MaterialPageRoute(\n                builder: (context) => const ImportRidersPage(),\n              ),\n            ),\n          ),\n          IconButton(\n            icon: const Icon(Icons.file_upload),\n            onPressed: () => Navigator.of(context).push(\n              MaterialPageRoute(\n                builder: (context) => const ExportRidersPage(),\n              ),\n            ),\n          ),\n        ],\n      ),\n      body: RiderList(\n        onRiderSelected: () => _onRiderSelected(context),\n        filter: _filterOnSearchQuery,\n        searchQueryStream: _searchController.searchQuery,\n        searchField: TextFormField(\n          controller: _controller,\n          textInputAction: TextInputAction.search,\n          keyboardType: TextInputType.text,\n          autocorrect: false,\n          autovalidateMode: AutovalidateMode.disabled,\n          onChanged: _searchController.onQueryChanged,\n          decoration: InputDecoration(\n            suffixIcon: const Icon(Icons.search),\n            labelText: S.of(context).SearchRiders,\n            border: InputBorder.none,\n            contentPadding: const EdgeInsets.symmetric(horizontal: 4),\n            floatingLabelBehavior: FloatingLabelBehavior.never,\n          ),\n        ),\n      ),\n    );\n  }\n\n  Widget _buildIosWidget(BuildContext context) {\n    return CupertinoPageScaffold(\n      resizeToAvoidBottomInset: false,\n      navigationBar: CupertinoNavigationBar(\n        transitionBetweenRoutes: false,\n        middle: Row(\n          children: <Widget>[\n            const Expanded(\n              child: Padding(\n                padding: EdgeInsets.only(left: 8),\n                child: RiderListTitle(),\n              ),\n            ),\n            CupertinoIconButton(\n              icon: CupertinoIcons.person_badge_plus_fill,\n              onPressed: () => Navigator.of(context).push(\n                MaterialPageRoute(builder: (context) => const RiderForm()),\n              ),\n            ),\n            CupertinoIconButton(\n              icon: CupertinoIcons.arrow_down_doc_fill,\n              onPressed: () => Navigator.of(context).push(\n                MaterialPageRoute(\n                  builder: (context) => const ImportRidersPage(),\n                ),\n              ),\n            ),\n            CupertinoIconButton(\n              icon: CupertinoIcons.arrow_up_doc_fill,\n              onPressed: () => Navigator.of(context).push(\n                MaterialPageRoute(\n                  builder: (context) => const ExportRidersPage(),\n                ),\n              ),\n            ),\n          ],\n        ),\n      ),\n      child: SafeArea(\n        bottom: false,\n        child: RiderList(\n          onRiderSelected: () => _onRiderSelected(context),\n          filter: _filterOnSearchQuery,\n          searchQueryStream: _searchController.searchQuery,\n          searchField: Padding(\n            padding: const EdgeInsets.all(8),\n            child: CupertinoSearchTextField(\n              controller: _controller,\n              suffixIcon: const Icon(CupertinoIcons.search),\n              onChanged: _searchController.onQueryChanged,\n              placeholder: S.of(context).SearchRiders,\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return PlatformAwareWidget(\n      android: _buildAndroidWidget,\n      ios: _buildIosWidget,\n    );\n  }\n\n  @override\n  void dispose() {\n    _searchController.dispose();\n    _controller.dispose();\n    super.dispose();\n  }\n}\n"}},"clientRequestTime":1675341989373}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 222
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":73,"method":"textDocument/documentColor","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}},"clientRequestTime":1675341989382}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 338
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":74,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1675341989382}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 223
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":75,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}},"clientRequestTime":1675341989383}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 264
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":76,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":19,"character":11}},"clientRequestTime":1675341989383}
[13:46:29] [Analyzer] [Info] <== Content-Length: 118
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 1240
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"uri_does_not_exist","codeDescription":{"href":"https://dart.dev/diagnostics/uri_does_not_exist"},"message":"Target of URI doesn't exist: 'package:weforza/widgets/pages/rider_list/foo_page.dart'.\nTry creating the file referenced by the URI, or try using a URI for a file that does exist.","range":{"end":{"character":63,"line":4},"start":{"character":7,"line":4}},"severity":1,"source":"dart"},{"code":"creation_with_non_type","codeDescription":{"href":"https://dart.dev/diagnostics/creation_with_non_type"},"message":"The name 'RiderListPage' isn't a class.\nTry correcting the name to match an existing class.","range":{"end":{"character":23,"line":28},"start":{"character":10,"line":28}},"severity":1,"source":"dart"},{"code":"argument_type_not_assignable","codeDescription":{"href":"https://dart.dev/diagnostics/argument_type_not_assignable"},"message":"The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<Widget>'.","range":{"end":{"character":22,"line":68},"start":{"character":16,"line":68}},"severity":1,"source":"dart"}],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 1795
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"Scaffold","range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}},{"label":"Theme","range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}},{"label":"ThemeData","range":{"end":{"character":9,"line":80},"start":{"character":14,"line":76}}},{"label":"NavigationBar","range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}},{"label":"<NavigationDestination>[]","range":{"end":{"character":11,"line":95},"start":{"character":24,"line":82}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}},{"label":"CupertinoPageScaffold","range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}},{"label":"Column","range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}},{"label":"<Widget>[]","range":{"end":{"character":9,"line":140},"start":{"character":18,"line":114}}},{"label":"CupertinoTabBar","range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":122},"start":{"character":14,"line":119}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":126},"start":{"character":14,"line":123}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":130},"start":{"character":14,"line":127}}}],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 10485
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}},"element":{"kind":"CONSTRUCTOR","name":"HomePage","parameters":"({super.key})","range":{"end":{"character":16,"line":14},"start":{"character":8,"line":14}}},"range":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}}},{"codeRange":{"end":{"character":52,"line":17},"start":{"character":2,"line":17}},"element":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":29,"line":17},"start":{"character":18,"line":17}},"returnType":"State<HomePage>"},"range":{"end":{"character":52,"line":17},"start":{"character":2,"line":16}}}],"codeRange":{"end":{"character":1,"line":18},"start":{"character":0,"line":13}},"element":{"kind":"CLASS","name":"HomePage","range":{"end":{"character":14,"line":13},"start":{"character":6,"line":13}}},"range":{"end":{"character":1,"line":18},"start":{"character":0,"line":8}}},{"children":[{"codeRange":{"end":{"character":24,"line":22},"start":{"character":6,"line":22}},"element":{"kind":"FIELD","name":"_selectedIndex","range":{"end":{"character":20,"line":22},"start":{"character":6,"line":22}},"returnType":"int"},"range":{"end":{"character":25,"line":22},"start":{"character":2,"line":22}}},{"codeRange":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"element":{"kind":"FIELD","name":"_pageController","range":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"returnType":"PageController"},"range":{"end":{"character":38,"line":24},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":3,"line":30},"start":{"character":8,"line":26}},"element":{"kind":"FIELD","name":"_pages","range":{"end":{"character":14,"line":26},"start":{"character":8,"line":26}},"returnType":""},"range":{"end":{"character":4,"line":30},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":3,"line":36},"start":{"character":2,"line":33}},"element":{"kind":"METHOD","name":"initState","parameters":"()","range":{"end":{"character":16,"line":33},"start":{"character":7,"line":33}},"returnType":"void"},"range":{"end":{"character":3,"line":36},"start":{"character":2,"line":32}}},{"codeRange":{"end":{"character":3,"line":42},"start":{"character":2,"line":39}},"element":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":39},"start":{"character":7,"line":39}},"returnType":"void"},"range":{"end":{"character":3,"line":42},"start":{"character":2,"line":38}}},{"children":[{"codeRange":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"PlatformAwareWidget","range":{"end":{"character":11,"line":46},"start":{"character":11,"line":46}}},"range":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}}}],"codeRange":{"end":{"character":3,"line":50},"start":{"character":2,"line":45}},"element":{"kind":"METHOD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":45},"start":{"character":9,"line":45}},"returnType":"Widget"},"range":{"end":{"character":3,"line":50},"start":{"character":2,"line":44}}},{"children":[{"codeRange":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"PageView","range":{"end":{"character":11,"line":53},"start":{"character":11,"line":53}}},"range":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}}}],"codeRange":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}},"element":{"kind":"METHOD","name":"_buildPageView","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":52},"start":{"character":9,"line":52}},"returnType":"Widget"},"range":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}}},{"children":[{"children":[{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.directions_bike)","range":{"end":{"character":20,"line":84},"start":{"character":20,"line":84}}},"range":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}}}],"codeRange":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":83},"start":{"character":12,"line":83}}},"range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"children":[{"codeRange":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.people)","range":{"end":{"character":20,"line":88},"start":{"character":20,"line":88}}},"range":{"end":{"character":44,"
[13:46:29] [Analyzer] [Info] <== line":88},"start":{"character":20,"line":88}}}],"codeRange":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":87},"start":{"character":12,"line":87}}},"range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"children":[{"codeRange":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.settings)","range":{"end":{"character":20,"line":92},"start":{"character":20,"line":92}}},"range":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}}}],"codeRange":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":91},"start":{"character":12,"line":91}}},"range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}}],"codeRange":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationBar","range":{"end":{"character":15,"line":81},"start":{"character":15,"line":81}}},"range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}}],"codeRange":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Theme","range":{"end":{"character":27,"line":75},"start":{"character":27,"line":75}}},"range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}}],"codeRange":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Scaffold","range":{"end":{"character":11,"line":73},"start":{"character":11,"line":73}}},"range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}}],"codeRange":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}},"element":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":72},"start":{"character":9,"line":72}},"returnType":"Widget"},"range":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}}},{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Expanded","range":{"end":{"character":10,"line":115},"start":{"character":10,"line":115}}},"range":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}}},{"children":[{"codeRange":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.directions_bike)","range":{"end":{"character":22,"line":120},"start":{"character":22,"line":120}}},"range":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}}},{"codeRange":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(CupertinoIcons.person_2_fill)","range":{"end":{"character":22,"line":124},"start":{"character":22,"line":124}}},"range":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}}},{"codeRange":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(CupertinoIcons.settings)","range":{"end":{"character":22,"line":128},"start":{"character":22,"line":128}}},"range":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}}}],"codeRange":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoTabBar","range":{"end":{"character":10,"line":116},"start":{"character":10,"line":116}}},"range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}}],"codeRange":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Column","range":{"end":{"character":13,"line":113},"start":{"character":13,"line":113}}},"range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}}],"codeRange":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoPageScaffold","range":{"end":{"character":11,"line":111},"start":{"character":11,"line":111}}},"range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}}],"codeRange":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}},"element":{"kind":"METHOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":110},"start":{"character":9,"line":110}},"returnType":"Widget"},"range":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}}}],"codeRange":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}},"element":{"kind":"CLASS","name":"_HomePageState","range":{"end":{"character":20,"line":20},"start":{"character":6,"line":20}}},"range":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}}}],"codeRange":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 13120
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"dart/textDocument/publishFlutterOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}},"dartElement":{"kind":"CONSTRUCTOR","name":"HomePage","parameters":"({super.key})","range":{"end":{"character":16,"line":14},"start":{"character":8,"line":14}}},"kind":"DART_ELEMENT","range":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}}},{"codeRange":{"end":{"character":52,"line":17},"start":{"character":2,"line":17}},"dartElement":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":29,"line":17},"start":{"character":18,"line":17}},"returnType":"State<HomePage>"},"kind":"DART_ELEMENT","range":{"end":{"character":52,"line":17},"start":{"character":2,"line":16}}}],"codeRange":{"end":{"character":1,"line":18},"start":{"character":0,"line":13}},"dartElement":{"kind":"CLASS","name":"HomePage","range":{"end":{"character":14,"line":13},"start":{"character":6,"line":13}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":18},"start":{"character":0,"line":8}}},{"children":[{"codeRange":{"end":{"character":24,"line":22},"start":{"character":6,"line":22}},"dartElement":{"kind":"FIELD","name":"_selectedIndex","range":{"end":{"character":20,"line":22},"start":{"character":6,"line":22}},"returnType":"int"},"kind":"DART_ELEMENT","range":{"end":{"character":25,"line":22},"start":{"character":2,"line":22}}},{"codeRange":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"dartElement":{"kind":"FIELD","name":"_pageController","range":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"returnType":"PageController"},"kind":"DART_ELEMENT","range":{"end":{"character":38,"line":24},"start":{"character":2,"line":24}}},{"children":[{"attributes":[],"children":[],"className":"RideListPage","codeRange":{"end":{"character":24,"line":27},"start":{"character":4,"line":27}},"kind":"NEW_INSTANCE","range":{"end":{"character":24,"line":27},"start":{"character":4,"line":27}}},{"attributes":[],"children":[],"className":"SettingsPage","codeRange":{"end":{"character":24,"line":29},"start":{"character":4,"line":29}},"kind":"NEW_INSTANCE","range":{"end":{"character":24,"line":29},"start":{"character":4,"line":29}}}],"codeRange":{"end":{"character":3,"line":30},"start":{"character":8,"line":26}},"dartElement":{"kind":"FIELD","name":"_pages","range":{"end":{"character":14,"line":26},"start":{"character":8,"line":26}},"returnType":""},"kind":"DART_ELEMENT","range":{"end":{"character":4,"line":30},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":3,"line":36},"start":{"character":2,"line":33}},"dartElement":{"kind":"METHOD","name":"initState","parameters":"()","range":{"end":{"character":16,"line":33},"start":{"character":7,"line":33}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":36},"start":{"character":2,"line":32}}},{"codeRange":{"end":{"character":3,"line":42},"start":{"character":2,"line":39}},"dartElement":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":39},"start":{"character":7,"line":39}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":42},"start":{"character":2,"line":38}}},{"children":[{"attributes":[{"label":"_buildAndroidWidget","name":"android","valueRange":{"end":{"character":34,"line":47},"start":{"character":15,"line":47}}},{"label":"_buildIosWidget","name":"ios","valueRange":{"end":{"character":26,"line":48},"start":{"character":11,"line":48}}}],"children":[],"className":"PlatformAwareWidget","codeRange":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}}}],"codeRange":{"end":{"character":3,"line":50},"start":{"character":2,"line":45}},"dartElement":{"kind":"METHOD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":45},"start":{"character":9,"line":45}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":50},"start":{"character":2,"line":44}}},{"children":[{"attributes":[{"label":"_pageController","name":"controller","valueRange":{"end":{"character":33,"line":54},"start":{"character":18,"line":54}}},{"label":"(…) { … }","name":"onPageChanged","valueRange":{"end":{"character":7,"line":67},"start":{"character":21,"line":55}}},{"label":"_pages","name":"children","valueRange":{"end":{"character":22,"line":68},"start":{"character":16,"line":68}}}],"children":[],"className":"PageView","codeRange":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}}}],"codeRange":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}},"dartElement":{"kind":"METHOD","name":"_buildPageView","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":52},"start":{"character":9,"line":52}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}}},{"children":[{"attributes":[],"children":[{"className":"Widget","codeRange":{"end":{"character":35,"line":74},"start":{"character":12,"line":74}},"kind":"GENERIC","label":"_buildPageView(…)","range":{"end":{"character":35,"line":74},"start":{"character":12,"line":74}}},{"attributes":[{"label":"…","name":"data","valueRange":{"end":{"character":9,"line":80},"start":{"character":14,"line":76}}}],"children":[{"attributes":[{"label":"NavigationDestinationLabelBehavior.alwaysShow","name":"labelBehavior","valueRange":{"end":{"character":70,"line":96},"start":{"character":25,"line":96}}},{"label":"(…) { … }","name":"onDestinationSelected","valueRange":{"end":{"character":11,"line":103},"start":{"character":33,"line":97}}},{"label":"_selectedIndex","name":"selectedIndex","valueRange":{"end":{"character":39,"line":104},"start":{"character":25,"line":104}}}],"children":[{"attributes":[{"label":"S.of(context).Rides","name":"label","valueRange":{"end":{"character":40,"line":85},"start":{"character":21,"line":85}}}],"children":[{"attributes":[{"label":"Icons.directions_bike","name":"icon","valueRange":{"end":{"character":52,"line":84},"start":{"character":31,"line":84}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}},"kind":"NEW_INSTANCE","range":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"attributes":[{"label":"S.of(context).Riders","name":"label","valueRange":{"end":{"character":41,"line":89},"start":{"character":21,"line":89}}}],"children":[{"attributes":[{"label":"Icons.people","name":"icon","valueRange":{"end":{"character":43,"line":88},"start":{"character":31,"line":88}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}},"kind":"NEW_INSTANCE","range":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"attributes":[{"label":"S.of(context).Settings","name":"label","valueRange":{"end":{"character":43,"line":93},"start":{"character":21,"line":93}}}],"children":[{"attributes":[{"label":"Icons.settings","name":"icon","valueRange":{"end":{"character":45,"line":92},"start":{"character":31,"line":92}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}},"kind":"NEW_INSTANCE","range":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}},"kin
[13:46:29] [Analyzer] [Info] <== d":"NEW_INSTANCE","range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}}],"className":"NavigationBar","codeRange":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}},"kind":"NEW_INSTANCE","range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}}],"className":"Theme","codeRange":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}}],"className":"Scaffold","codeRange":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}}],"codeRange":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}},"dartElement":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":72},"start":{"character":9,"line":72}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}}},{"children":[{"attributes":[{"label":"false","name":"resizeToAvoidBottomInset","valueRange":{"end":{"character":37,"line":112},"start":{"character":32,"line":112}}}],"children":[{"attributes":[],"children":[{"attributes":[],"children":[{"className":"Widget","codeRange":{"end":{"character":49,"line":115},"start":{"character":26,"line":115}},"kind":"GENERIC","label":"_buildPageView(…)","range":{"end":{"character":49,"line":115},"start":{"character":26,"line":115}}}],"className":"Expanded","codeRange":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}},"kind":"NEW_INSTANCE","range":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}}},{"attributes":[{"label":"_selectedIndex","name":"currentIndex","valueRange":{"end":{"character":40,"line":117},"start":{"character":26,"line":117}}},{"label":"(…) { … }","name":"onTap","valueRange":{"end":{"character":13,"line":138},"start":{"character":19,"line":132}}}],"children":[{"attributes":[{"label":"Icons.directions_bike","name":"icon","valueRange":{"end":{"character":54,"line":120},"start":{"character":33,"line":120}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}},"kind":"NEW_INSTANCE","range":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}}},{"attributes":[{"label":"CupertinoIcons.person_2_fill","name":"icon","valueRange":{"end":{"character":61,"line":124},"start":{"character":33,"line":124}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}},"kind":"NEW_INSTANCE","range":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}}},{"attributes":[{"label":"CupertinoIcons.settings","name":"icon","valueRange":{"end":{"character":56,"line":128},"start":{"character":33,"line":128}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}},"kind":"NEW_INSTANCE","range":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}}}],"className":"CupertinoTabBar","codeRange":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}}],"className":"Column","codeRange":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}}],"className":"CupertinoPageScaffold","codeRange":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}}],"codeRange":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}},"dartElement":{"kind":"METHOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":110},"start":{"character":9,"line":110}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}}}],"codeRange":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}},"dartElement":{"kind":"CLASS","name":"_HomePageState","range":{"end":{"character":20,"line":20},"start":{"character":6,"line":20}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}}}],"codeRange":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}},"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"kind":"DART_ELEMENT","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 2924
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":72,"jsonrpc":"2.0","result":{"data":[0,0,6,1,0,0,7,32,15,0,1,0,6,1,0,0,7,31,15,0,1,0,6,1,0,0,7,37,15,0,1,0,6,1,0,0,7,61,15,0,1,0,6,1,0,0,7,56,15,0,1,0,6,1,0,0,7,59,15,0,1,0,6,1,0,0,7,61,15,0,2,0,37,3,1,1,0,73,3,1,1,0,26,3,1,1,0,3,3,1,1,0,43,3,1,1,0,5,1,0,0,6,8,2,0,0,9,7,1,0,0,8,14,2,0,1,2,5,1,0,0,6,8,2,0,0,10,5,1,0,0,6,3,6,4,2,2,1,0,0,0,1,8,11,128,1,2,5,2,0,0,6,8,2,0,0,10,11,4,20,0,17,14,2,2,3,0,5,1,0,0,6,14,2,0,0,15,7,1,0,0,8,5,2,0,0,6,8,2,0,1,4,4,1,0,0,5,30,2,0,1,2,3,2,0,0,4,14,11,20,0,17,1,14,0,2,2,4,1,0,0,5,14,2,0,0,15,15,11,20,2,2,5,1,0,0,6,6,11,20,1,4,5,1,0,0,6,12,2,2,1,4,5,1,0,0,6,13,10,0,1,4,5,1,0,0,6,12,2,2,3,2,1,0,0,0,1,8,11,128,1,2,4,1,2048,0,5,9,4,20,1,10,9,4,16,1,4,15,11,16,0,18,14,2,2,0,15,11,6,512,0,13,14,11,16,3,2,1,0,0,0,1,8,11,128,1,2,4,1,2048,0,5,7,4,20,1,4,15,11,16,0,16,7,4,16,1,10,7,4,16,3,2,1,0,0,0,1,8,11,128,1,2,6,2,0,0,7,5,4,20,0,6,12,2,0,0,13,7,6,4,1,4,6,1,256,0,7,19,2,2,1,6,7,6,512,0,9,19,4,16,1,6,3,6,512,0,5,15,4,16,4,2,6,2,0,0,7,14,4,20,0,15,12,2,0,0,13,7,6,4,1,4,6,1,256,0,7,8,2,2,1,6,10,6,512,0,12,15,11,16,1,6,13,6,512,0,16,4,6,4,1,8,70,3,0,1,8,43,3,0,1,8,49,3,0,1,8,68,3,0,1,8,2,1,256,0,4,14,11,16,0,18,1,14,0,1,10,10,2,0,0,11,2,4,32,0,3,7,6,0,0,9,7,4,16,3,8,8,4,16,1,10,14,11,16,0,17,4,6,0,3,6,8,6,512,0,10,6,11,16,4,2,6,2,0,0,7,19,4,20,0,20,12,2,0,0,13,7,6,4,1,4,6,1,256,0,7,8,2,2,1,6,4,6,512,0,6,14,4,16,0,15,7,6,0,1,6,19,6,512,0,21,5,2,2,1,8,4,6,512,0,6,9,2,2,1,10,74,3,0,1,10,12,6,512,0,14,4,13,0,1,10,18,6,512,0,20,5,2,0,0,6,2,4,32,0,3,7,6,0,0,9,18,11,16,2,8,5,6,512,0,7,13,2,2,1,10,12,6,512,0,15,21,2,0,1,12,21,2,2,1,14,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,5,2,0,0,6,15,11,32,1,14,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,5,11,16,2,12,21,2,2,1,14,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,5,2,0,0,6,6,11,32,1,14,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,6,11,16,2,12,21,2,2,1,14,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,5,2,0,0,6,8,11,32,1,14,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,8,11,16,3,10,13,6,512,0,15,34,7,0,0,35,10,8,0,1,10,21,6,512,0,24,5,6,4,1,12,15,11,16,0,16,13,4,16,1,14,5,6,0,1,14,8,6,512,0,10,5,1,0,0,6,8,2,2,0,9,12,6,512,0,14,3,14,0,1,14,5,6,512,0,7,6,2,0,0,7,9,11,32,3,10,13,6,512,0,15,14,11,16,6,2,6,2,0,0,7,15,4,20,0,16,12,2,0,0,13,7,6,4,1,4,6,1,256,0,7,21,2,2,1,6,24,6,512,0,26,5,13,0,1,6,5,6,512,0,7,6,2,2,1,8,8,6,512,0,11,6,2,0,1,10,8,2,2,0,9,5,6,512,0,7,14,4,16,0,15,7,6,0,1,10,15,2,2,1,12,12,6,512,0,14,14,11,16,1,12,5,6,512,1,14,23,2,2,1,16,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,5,2,0,0,6,15,11,32,1,16,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,5,11,16,2,14,23,2,2,1,16,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,14,2,0,0,15,13,11,32,1,16,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,6,11,16,2,14,23,2,2,1,16,4,6,512,0,6,5,1,0,0,6,4,2,2,0,5,14,2,0,0,15,8,11,32,1,16,5,6,512,0,7,1,2,0,0,2,2,4,32,0,3,7,6,0,0,9,8,11,16,3,12,5,6,512,0,8,5,6,4,1,14,15,11,16,0,16,13,4,16,1,16,5,6,0,1,16,8,6,512,0,10,5,1,0,0,6,8,2,2,0,9,12,6,512,0,14,3,14,0,1,16,5,6,512,0,7,6,2,0,0,7,9,11,32]}}Content-Length: 185
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 187
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 461
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"codeRange":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 494
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishFlutterOutline","params":{"outline":{"codeRange":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}},"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"kind":"DART_ELEMENT","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":73,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":75,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":76,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}Content-Length: 767
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":74,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","autoTriggered":true}],"command":"edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","autoTriggered":true}],"command":"edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","autoTriggered":true}],"command":"edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"}]}
[13:46:29] [Analyzer] [Info] <== Content-Length: 192
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 163
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/app.dart"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 156
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/main.dart"}}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 228
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":77,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}},"clientRequestTime":1675341989436}
[13:46:29] [Analyzer] [Info] <== Content-Length: 93
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}Content-Length: 46
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"id":77,"jsonrpc":"2.0","result":{"data":[]}}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 295
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":78,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":105,"character":50}}},"clientRequestTime":1675341989440}
[13:46:29] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"id":78,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 192
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] ==> Content-Length: 221
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":79,"method":"textDocument/foldingRange","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}},"clientRequestTime":1675341989578}
[13:46:29] [Analyzer] [Info] ==> Content-Length: 342
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":80,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"range":{"start":{"line":19,"character":11},"end":{"line":19,"character":11}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1675341989633}
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list_page.dart"}}
[13:46:29] [Analyzer] [Info] <== Content-Length: 98
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"id":19,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}Content-Length: 1240
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"uri_does_not_exist","codeDescription":{"href":"https://dart.dev/diagnostics/uri_does_not_exist"},"message":"Target of URI doesn't exist: 'package:weforza/widgets/pages/rider_list/foo_page.dart'.\nTry creating the file referenced by the URI, or try using a URI for a file that does exist.","range":{"end":{"character":63,"line":4},"start":{"character":7,"line":4}},"severity":1,"source":"dart"},{"code":"creation_with_non_type","codeDescription":{"href":"https://dart.dev/diagnostics/creation_with_non_type"},"message":"The name 'RiderListPage' isn't a class.\nTry correcting the name to match an existing class.","range":{"end":{"character":23,"line":28},"start":{"character":10,"line":28}},"severity":1,"source":"dart"},{"code":"argument_type_not_assignable","codeDescription":{"href":"https://dart.dev/diagnostics/argument_type_not_assignable"},"message":"The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<Widget>'.","range":{"end":{"character":22,"line":68},"start":{"character":16,"line":68}},"severity":1,"source":"dart"}],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 1795
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"Scaffold","range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}},{"label":"Theme","range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}},{"label":"ThemeData","range":{"end":{"character":9,"line":80},"start":{"character":14,"line":76}}},{"label":"NavigationBar","range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}},{"label":"<NavigationDestination>[]","range":{"end":{"character":11,"line":95},"start":{"character":24,"line":82}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"label":"NavigationDestination","range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}},{"label":"CupertinoPageScaffold","range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}},{"label":"Column","range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}},{"label":"<Widget>[]","range":{"end":{"character":9,"line":140},"start":{"character":18,"line":114}}},{"label":"CupertinoTabBar","range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":122},"start":{"character":14,"line":119}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":126},"start":{"character":14,"line":123}}},{"label":"BottomNavigationBarItem","range":{"end":{"character":15,"line":130},"start":{"character":14,"line":127}}}],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 10485
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}},"element":{"kind":"CONSTRUCTOR","name":"HomePage","parameters":"({super.key})","range":{"end":{"character":16,"line":14},"start":{"character":8,"line":14}}},"range":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}}},{"codeRange":{"end":{"character":52,"line":17},"start":{"character":2,"line":17}},"element":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":29,"line":17},"start":{"character":18,"line":17}},"returnType":"State<HomePage>"},"range":{"end":{"character":52,"line":17},"start":{"character":2,"line":16}}}],"codeRange":{"end":{"character":1,"line":18},"start":{"character":0,"line":13}},"element":{"kind":"CLASS","name":"HomePage","range":{"end":{"character":14,"line":13},"start":{"character":6,"line":13}}},"range":{"end":{"character":1,"line":18},"start":{"character":0,"line":8}}},{"children":[{"codeRange":{"end":{"character":24,"line":22},"start":{"character":6,"line":22}},"element":{"kind":"FIELD","name":"_selectedIndex","range":{"end":{"character":20,"line":22},"start":{"character":6,"line":22}},"returnType":"int"},"range":{"end":{"character":25,"line":22},"start":{"character":2,"line":22}}},{"codeRange":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"element":{"kind":"FIELD","name":"_pageController","range":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"returnType":"PageController"},"range":{"end":{"character":38,"line":24},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":3,"line":30},"start":{"character":8,"line":26}},"element":{"kind":"FIELD","name":"_pages","range":{"end":{"character":14,"line":26},"start":{"character":8,"line":26}},"returnType":""},"range":{"end":{"character":4,"line":30},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":3,"line":36},"start":{"character":2,"line":33}},"element":{"kind":"METHOD","name":"initState","parameters":"()","range":{"end":{"character":16,"line":33},"start":{"character":7,"line":33}},"returnType":"void"},"range":{"end":{"character":3,"line":36},"start":{"character":2,"line":32}}},{"codeRange":{"end":{"character":3,"line":42},"start":{"character":2,"line":39}},"element":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":39},"start":{"character":7,"line":39}},"returnType":"void"},"range":{"end":{"character":3,"line":42},"start":{"character":2,"line":38}}},{"children":[{"codeRange":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"PlatformAwareWidget","range":{"end":{"character":11,"line":46},"start":{"character":11,"line":46}}},"range":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}}}],"codeRange":{"end":{"character":3,"line":50},"start":{"character":2,"line":45}},"element":{"kind":"METHOD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":45},"start":{"character":9,"line":45}},"returnType":"Widget"},"range":{"end":{"character":3,"line":50},"start":{"character":2,"line":44}}},{"children":[{"codeRange":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"PageView","range":{"end":{"character":11,"line":53},"start":{"character":11,"line":53}}},"range":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}}}],"codeRange":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}},"element":{"kind":"METHOD","name":"_buildPageView","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":52},"start":{"character":9,"line":52}},"returnType":"Widget"},"range":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}}},{"children":[{"children":[{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.directions_bike)","range":{"end":{"character":20,"line":84},"start":{"character":20,"line":84}}},"range":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}}}],"codeRange":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":83},"start":{"character":12,"line":83}}},"range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"children":[{"codeRange":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.people)","range":{"end":{"character":20,"line":88},"start":{"character":20,"line":88}}},"range":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}}}],"codeRange":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":87},"start":{"character":12,"line":87}}},"range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"children":[{"codeRange":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.settings)","range":{"end":{"character":20,"line":92},"start":{"character":20,"line":92}}},"range":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}}}],"codeRange":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationDestination","range":{"end":{"character":12,"line":91},"start":{"character":12,"line":91}}},"range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}}],"codeRange":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"NavigationBar","range":{"end":{"character":15,"line":81},"start":{"character":15,"line":81}}},"range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}}],"codeRange":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}},"element
[13:46:29] [Analyzer] [Info] ==> Content-Length: 73
[13:46:29] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":19,"result":null,"clientRequestTime":1675341989953}
[13:46:29] [Analyzer] [Info] <== ":{"kind":"CONSTRUCTOR_INVOCATION","name":"Theme","range":{"end":{"character":27,"line":75},"start":{"character":27,"line":75}}},"range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}}],"codeRange":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Scaffold","range":{"end":{"character":11,"line":73},"start":{"character":11,"line":73}}},"range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}}],"codeRange":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}},"element":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":72},"start":{"character":9,"line":72}},"returnType":"Widget"},"range":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}}},{"children":[{"children":[{"children":[{"codeRange":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Expanded","range":{"end":{"character":10,"line":115},"start":{"character":10,"line":115}}},"range":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}}},{"children":[{"codeRange":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(Icons.directions_bike)","range":{"end":{"character":22,"line":120},"start":{"character":22,"line":120}}},"range":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}}},{"codeRange":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(CupertinoIcons.person_2_fill)","range":{"end":{"character":22,"line":124},"start":{"character":22,"line":124}}},"range":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}}},{"codeRange":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Icon(CupertinoIcons.settings)","range":{"end":{"character":22,"line":128},"start":{"character":22,"line":128}}},"range":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}}}],"codeRange":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoTabBar","range":{"end":{"character":10,"line":116},"start":{"character":10,"line":116}}},"range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}}],"codeRange":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"Column","range":{"end":{"character":13,"line":113},"start":{"character":13,"line":113}}},"range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}}],"codeRange":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}},"element":{"kind":"CONSTRUCTOR_INVOCATION","name":"CupertinoPageScaffold","range":{"end":{"character":11,"line":111},"start":{"character":11,"line":111}}},"range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}}],"codeRange":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}},"element":{"kind":"METHOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":110},"start":{"character":9,"line":110}},"returnType":"Widget"},"range":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}}}],"codeRange":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}},"element":{"kind":"CLASS","name":"_HomePageState","range":{"end":{"character":20,"line":20},"start":{"character":6,"line":20}}},"range":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}}}],"codeRange":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 13120
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishFlutterOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}},"dartElement":{"kind":"CONSTRUCTOR","name":"HomePage","parameters":"({super.key})","range":{"end":{"character":16,"line":14},"start":{"character":8,"line":14}}},"kind":"DART_ELEMENT","range":{"end":{"character":30,"line":14},"start":{"character":2,"line":14}}},{"codeRange":{"end":{"character":52,"line":17},"start":{"character":2,"line":17}},"dartElement":{"kind":"METHOD","name":"createState","parameters":"()","range":{"end":{"character":29,"line":17},"start":{"character":18,"line":17}},"returnType":"State<HomePage>"},"kind":"DART_ELEMENT","range":{"end":{"character":52,"line":17},"start":{"character":2,"line":16}}}],"codeRange":{"end":{"character":1,"line":18},"start":{"character":0,"line":13}},"dartElement":{"kind":"CLASS","name":"HomePage","range":{"end":{"character":14,"line":13},"start":{"character":6,"line":13}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":18},"start":{"character":0,"line":8}}},{"children":[{"codeRange":{"end":{"character":24,"line":22},"start":{"character":6,"line":22}},"dartElement":{"kind":"FIELD","name":"_selectedIndex","range":{"end":{"character":20,"line":22},"start":{"character":6,"line":22}},"returnType":"int"},"kind":"DART_ELEMENT","range":{"end":{"character":25,"line":22},"start":{"character":2,"line":22}}},{"codeRange":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"dartElement":{"kind":"FIELD","name":"_pageController","range":{"end":{"character":37,"line":24},"start":{"character":22,"line":24}},"returnType":"PageController"},"kind":"DART_ELEMENT","range":{"end":{"character":38,"line":24},"start":{"character":2,"line":24}}},{"children":[{"attributes":[],"children":[],"className":"RideListPage","codeRange":{"end":{"character":24,"line":27},"start":{"character":4,"line":27}},"kind":"NEW_INSTANCE","range":{"end":{"character":24,"line":27},"start":{"character":4,"line":27}}},{"attributes":[],"children":[],"className":"SettingsPage","codeRange":{"end":{"character":24,"line":29},"start":{"character":4,"line":29}},"kind":"NEW_INSTANCE","range":{"end":{"character":24,"line":29},"start":{"character":4,"line":29}}}],"codeRange":{"end":{"character":3,"line":30},"start":{"character":8,"line":26}},"dartElement":{"kind":"FIELD","name":"_pages","range":{"end":{"character":14,"line":26},"start":{"character":8,"line":26}},"returnType":""},"kind":"DART_ELEMENT","range":{"end":{"character":4,"line":30},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":3,"line":36},"start":{"character":2,"line":33}},"dartElement":{"kind":"METHOD","name":"initState","parameters":"()","range":{"end":{"character":16,"line":33},"start":{"character":7,"line":33}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":36},"start":{"character":2,"line":32}}},{"codeRange":{"end":{"character":3,"line":42},"start":{"character":2,"line":39}},"dartElement":{"kind":"METHOD","name":"dispose","parameters":"()","range":{"end":{"character":14,"line":39},"start":{"character":7,"line":39}},"returnType":"void"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":42},"start":{"character":2,"line":38}}},{"children":[{"attributes":[{"label":"_buildAndroidWidget","name":"android","valueRange":{"end":{"character":34,"line":47},"start":{"character":15,"line":47}}},{"label":"_buildIosWidget","name":"ios","valueRange":{"end":{"character":26,"line":48},"start":{"character":11,"line":48}}}],"children":[],"className":"PlatformAwareWidget","codeRange":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":49},"start":{"character":11,"line":46}}}],"codeRange":{"end":{"character":3,"line":50},"start":{"character":2,"line":45}},"dartElement":{"kind":"METH
[13:46:29] [Analyzer] [Info] <== OD","name":"build","parameters":"(BuildContext context)","range":{"end":{"character":14,"line":45},"start":{"character":9,"line":45}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":50},"start":{"character":2,"line":44}}},{"children":[{"attributes":[{"label":"_pageController","name":"controller","valueRange":{"end":{"character":33,"line":54},"start":{"character":18,"line":54}}},{"label":"(…) { … }","name":"onPageChanged","valueRange":{"end":{"character":7,"line":67},"start":{"character":21,"line":55}}},{"label":"_pages","name":"children","valueRange":{"end":{"character":22,"line":68},"start":{"character":16,"line":68}}}],"children":[],"className":"PageView","codeRange":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":69},"start":{"character":11,"line":53}}}],"codeRange":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}},"dartElement":{"kind":"METHOD","name":"_buildPageView","parameters":"(BuildContext context)","range":{"end":{"character":23,"line":52},"start":{"character":9,"line":52}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":70},"start":{"character":2,"line":52}}},{"children":[{"attributes":[],"children":[{"className":"Widget","codeRange":{"end":{"character":35,"line":74},"start":{"character":12,"line":74}},"kind":"GENERIC","label":"_buildPageView(…)","range":{"end":{"character":35,"line":74},"start":{"character":12,"line":74}}},{"attributes":[{"label":"…","name":"data","valueRange":{"end":{"character":9,"line":80},"start":{"character":14,"line":76}}}],"children":[{"attributes":[{"label":"NavigationDestinationLabelBehavior.alwaysShow","name":"labelBehavior","valueRange":{"end":{"character":70,"line":96},"start":{"character":25,"line":96}}},{"label":"(…) { … }","name":"onDestinationSelected","valueRange":{"end":{"character":11,"line":103},"start":{"character":33,"line":97}}},{"label":"_selectedIndex","name":"selectedIndex","valueRange":{"end":{"character":39,"line":104},"start":{"character":25,"line":104}}}],"children":[{"attributes":[{"label":"S.of(context).Rides","name":"label","valueRange":{"end":{"character":40,"line":85},"start":{"character":21,"line":85}}}],"children":[{"attributes":[{"label":"Icons.directions_bike","name":"icon","valueRange":{"end":{"character":52,"line":84},"start":{"character":31,"line":84}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}},"kind":"NEW_INSTANCE","range":{"end":{"character":53,"line":84},"start":{"character":20,"line":84}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":86},"start":{"character":12,"line":83}}},{"attributes":[{"label":"S.of(context).Riders","name":"label","valueRange":{"end":{"character":41,"line":89},"start":{"character":21,"line":89}}}],"children":[{"attributes":[{"label":"Icons.people","name":"icon","valueRange":{"end":{"character":43,"line":88},"start":{"character":31,"line":88}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}},"kind":"NEW_INSTANCE","range":{"end":{"character":44,"line":88},"start":{"character":20,"line":88}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":90},"start":{"character":12,"line":87}}},{"attributes":[{"label":"S.of(context).Settings","name":"label","valueRange":{"end":{"character":43,"line":93},"start":{"character":21,"line":93}}}],"children":[{"attributes":[{"label":"Icons.settings","name":"icon","valueRange":{"end":{"character":45,"line":92},"start":{"character":31,"line":92}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}},"kind":"NEW_INSTANCE","range":{"end":{"character":46,"line":92},"start":{"character":20,"line":92}}}],"className":"NavigationDestination","codeRange":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}},"kind":"NEW_INSTANCE","range":{"end":{"character":13,"line":94},"start":{"character":12,"line":91}}}],"className":"NavigationBar","codeRange":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}},"kind":"NEW_INSTANCE","range":{"end":{"character":9,"line":105},"start":{"character":15,"line":81}}}],"className":"Theme","codeRange":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":106},"start":{"character":27,"line":75}}}],"className":"Scaffold","codeRange":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":107},"start":{"character":11,"line":73}}}],"codeRange":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}},"dartElement":{"kind":"METHOD","name":"_buildAndroidWidget","parameters":"(BuildContext context)","range":{"end":{"character":28,"line":72},"start":{"character":9,"line":72}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":108},"start":{"character":2,"line":72}}},{"children":[{"attributes":[{"label":"false","name":"resizeToAvoidBottomInset","valueRange":{"end":{"character":37,"line":112},"start":{"character":32,"line":112}}}],"children":[{"attributes":[],"children":[{"attributes":[],"children":[{"className":"Widget","codeRange":{"end":{"character":49,"line":115},"start":{"character":26,"line":115}},"kind":"GENERIC","label":"_buildPageView(…)","range":{"end":{"character":49,"line":115},"start":{"character":26,"line":115}}}],"className":"Expanded","codeRange":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}},"kind":"NEW_INSTANCE","range":{"end":{"character":50,"line":115},"start":{"character":10,"line":115}}},{"attributes":[{"label":"_selectedIndex","name":"currentIndex","valueRange":{"end":{"character":40,"line":117},"start":{"character":26,"line":117}}},{"label":"(…) { … }","name":"onTap","valueRange":{"end":{"character":13,"line":138},"start":{"character":19,"line":132}}}],"children":[{"attributes":[{"label":"Icons.directions_bike","name":"icon","valueRange":{"end":{"character":54,"line":120},"start":{"character":33,"line":120}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}},"kind":"NEW_INSTANCE","range":{"end":{"character":55,"line":120},"start":{"character":22,"line":120}}},{"attributes":[{"label":"CupertinoIcons.person_2_fill","name":"icon","valueRange":{"end":{"character":61,"line":124},"start":{"character":33,"line":124}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}},"kind":"NEW_INSTANCE","range":{"end":{"character":62,"line":124},"start":{"character":22,"line":124}}},{"attributes":[{"label":"CupertinoIcons.settings","name":"icon","valueRange":{"end":{"character":56,"line":128},"start":{"character":33,"line":128}}}],"children":[],"className":"Icon","codeRange":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}},"kind":"NEW_INSTANCE","range":{"end":{"character":57,"line":128},"start":{"character":22,"line":128}}}],"className":"CupertinoTabBar","codeRange":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}},"kind":"NEW_INSTANCE","range":{"end":{"character":11,"line":139},"start":{"character":10,"line":116}}}],"className":"Column","codeRange":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}},"kind":"NEW_INSTANCE","range":{"end":{"character":7,"line":141},"start":{"character":13,"line":113}}}],"className":"CupertinoPageScaffold","codeRange":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}},"kind":"NEW_INSTANCE","range":{"end":{"character":5,"line":142},"start":{"character":11,"line":111}}}],"codeRange":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}},"dartElement":{"kind":"ME
[13:46:29] [Analyzer] [Info] <== THOD","name":"_buildIosWidget","parameters":"(BuildContext context)","range":{"end":{"character":24,"line":110},"start":{"character":9,"line":110}},"returnType":"Widget"},"kind":"DART_ELEMENT","range":{"end":{"character":3,"line":143},"start":{"character":2,"line":110}}}],"codeRange":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}},"dartElement":{"kind":"CLASS","name":"_HomePageState","range":{"end":{"character":20,"line":20},"start":{"character":6,"line":20}}},"kind":"DART_ELEMENT","range":{"end":{"character":1,"line":144},"start":{"character":0,"line":20}}}],"codeRange":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}},"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"kind":"DART_ELEMENT","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/home_page.dart"}}Content-Length: 37
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"id":79,"jsonrpc":"2.0","result":[]}
[13:46:29] [Analyzer] [Info] <== Content-Length: 118
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}Content-Length: 37
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:29] [Analyzer] [Info] <== {"id":80,"jsonrpc":"2.0","result":[]}
[13:46:30] [Analyzer] [Info] <== Content-Length: 93
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}
[13:46:30] [Analyzer] [Info] ==> Content-Length: 252
[13:46:30] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":81,"method":"textDocument/hover","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":16,"character":14}},"clientRequestTime":1675341990071}
[13:46:30] [Analyzer] [Info] <== Content-Length: 98
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] <== {"id":20,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}
[13:46:30] [Analyzer] [Info] <== Content-Length: 185
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 187
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] ==> Content-Length: 73
[13:46:30] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":20,"result":null,"clientRequestTime":1675341990075}
[13:46:30] [Analyzer] [Info] <== {"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 461
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"codeRange":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 494
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"dart/textDocument/publishFlutterOutline","params":{"outline":{"codeRange":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}},"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"kind":"DART_ELEMENT","range":{"end":{"character":0,"line":0},"start":{"character":0,"line":0}}},"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] <== {"id":81,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}Content-Length: 118
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}
[13:46:30] [Analyzer] [Info] <== Content-Length: 93
Content-Type: application/vscode-jsonrpc; charset=utf-8

{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}
[13:46:30] [Analyzer] [Info] ==> Content-Length: 264
[13:46:30] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":82,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":16,"character":15}},"clientRequestTime":1675341990255}
[13:46:30] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] <== {"id":82,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:30] [Analyzer] [Info] ==> Content-Length: 342
[13:46:30] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":83,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"range":{"start":{"line":16,"character":15},"end":{"line":16,"character":15}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1675341990506}
[13:46:30] [Analyzer] [Info] <== Content-Length: 37
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:30] [Analyzer] [Info] <== {"id":83,"jsonrpc":"2.0","result":[]}
[13:46:33] [Analyzer] [Info] ==> Content-Length: 260
[13:46:33] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":84,"method":"textDocument/prepareRename","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":16,"character":15}},"clientRequestTime":1675341993032}
[13:46:33] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:33] [Analyzer] [Info] <== {"id":84,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:33] [Analyzer] [Info] ==> Content-Length: 252
[13:46:33] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":85,"method":"textDocument/hover","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":20,"character":37}},"clientRequestTime":1675341993815}
[13:46:33] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:33] [Analyzer] [Info] <== {"id":85,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:34] [Analyzer] [Info] ==> Content-Length: 264
[13:46:34] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":86,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"position":{"line":19,"character":11}},"clientRequestTime":1675341994431}
[13:46:34] [Analyzer] [Info] <== Content-Length: 172
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:34] [Analyzer] [Info] <== {"id":86,"jsonrpc":"2.0","error":{"code":-32003,"data":"/Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart","message":"File does not exist"}}
[13:46:34] [Analyzer] [Info] ==> Content-Length: 342
[13:46:34] [Analyzer] [Info] ==> {"jsonrpc":"2.0","id":87,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"},"range":{"start":{"line":19,"character":11},"end":{"line":19,"character":11}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1675341994684}
[13:46:34] [Analyzer] [Info] <== Content-Length: 37
Content-Type: application/vscode-jsonrpc; charset=utf-8
[13:46:34] [Analyzer] [Info] <== {"id":87,"jsonrpc":"2.0","result":[]}
Thu Feb 02 2023 [13:46:35 GMT+0100 (Central European Standard Time)] Log file ended

@DanTup
Copy link
Collaborator

DanTup commented Feb 2, 2023

@navaronbracke thanks! This log definitely shows some odd things. Even if the actual rename on disk was delayed, it shows VS Code opening the (new) file:

{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"

And then the server sends the diagnostics for that file:

{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[],"uri":"file:///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/foo_page.dart"}}

Yet it then responds to many requests saying the file does not exist.

Is it possible you could add this to your VS Code Workspace Settings (F1 -> Preferences: Open Workspace Settings (JSON)):

"dart.analyzerInstrumentationLogFile": "logs/instrum.txt"

It will automatically restart the analyzer, wait for initial analysis to complete, and then reproduce the issue and attach the file? (note: it'll contain parts of source code just like the above).

That log is captured by the server and includes some additional things such as when the file system watcher event fires for the rename. I don't know if it'll be any more revealing, but it might.

@navaronbracke
Copy link
Author

navaronbracke commented Feb 2, 2023

Huh, strange. So I added

"dart.analyzerInstrumentationLogFile": "logs/instrum.txt"

to my workspace settings. That did indeed restart the analyzer, so I waited for it to complete its analysis.
Then I tried to reproduce the bug, but I can no longer reproduce it now.

I wonder if just restarting the analyzer did the trick? But then why didn't opening VSCode be sufficient? (since that would result in the analyzer starting fresh anyway) I wonder if it has anything to do with the .dartServer folder (I had issues with it causing problems in the past, IIRC deleting .dartServer did the trick back then)

@DanTup
Copy link
Collaborator

DanTup commented Feb 2, 2023

How often did you see it before? It was after enabling the log that I couldn't reproduce it, so it's possible that's affecting some timing (and the issue is a race condition). I've removed the log but still not been able to reproduce it though.

Restarting (and/or deleting .dartServer) might affect whether it occurs (because they may change the amount or type of work the server does for a little while after it starts), but I don't think it'll make much difference.

I'll have another go through your previous log and see if I can find anything. It feels like maybe the rename on disk, and VS Code "opening" the newly-named file might have not been processed quickly - however, I can't come up with a reason for that unless the server was "busy", but then I'd also expect that to delay the requests that are failing to find the file.

@navaronbracke
Copy link
Author

navaronbracke commented Feb 2, 2023

I had it consistently before enabling the log. I didn't get to reproduce it while to extra logging was enabled. Now that I turned off the logging again (the logging category in the extension logs says General only), I can reproduce the bug again (although its intermittent now).

I've only seen it happen after switching to Dart 2.19 a few days after Flutter 3.7.0 landed on stable. I was on a 3.7.x beta release before that and didn't see it happen there (unless it started with one of the more recent 3.7.x beta releases?)

I haven't been working on any other big projects since making the switch to the new Dart version so I can't really tell if it reproduces for other projects of different magnitudes.

@DanTup
Copy link
Collaborator

DanTup commented Feb 2, 2023

Thanks, that's good to know. It turns out that I actually had logging on when I repro'd it initially (I somehow had forgotten that I always have the instrumentation log enabled in my global settings specifically to get logs of intermittent things like this). Unfortunately my attempts to reproduce it rolled over the logs so I don't still have it.

So while it's possible the log is affecting timing that make it less likely to occur, it definitely isn't preventing it. Even with logging off, I haven't managed to reproduce it since that first time.

Is it possible you could run with logging enabled for a little while, and when you next see it, grab a copy of the log?

The logs can get quite large and will roll over on each session start (with the last 5 or so kept). When you next see it, everything from the last instance of workspace/willRenameFiles to the end (or at least a few lines after the textDocument/prepareRename call and the "File does not exist" error that corresponds to it) may be useful. In particular I'm interested in seeing where the watchEvent lines appear in relation to the protocol traffic.

@navaronbracke
Copy link
Author

Is it possible you could run with logging enabled for a little while, and when you next see it, grab a copy of the log?

I'll try to repro with logging enabled. Once I do, I'll report back here with my logs.

@navaronbracke
Copy link
Author

@DanTup I'm back! So I reproduced the issue on Flutter 3.7.6 | Dart 2.19.3 | Dart-Code 3.60.0 and I went through the log file looking for workspace/willRenameFiles, textDocument/prepareRename, File does not exist and found some occurrences. But this is where I got baffled a bit: watchEvent does not show up in the log anywhere.

Log file: instrum.txt

@DanTup
Copy link
Collaborator

DanTup commented Mar 8, 2023

watchEvent does not show up in the log anywhere

Sorry, I mis-remembered. They just say watch:

1678297027157:Watch:<unknown>:/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_close_button.dart:remove

Do you know the exact behaviour you saw when you captured this log? In the original message at the top you said that the editor applying the changes seemed to be delayed, though in the log it appears that the edit applied those edits quite quickly.

There are definitely some issues in the log - those "File does not exist" errors are the server telling VS Code it can't find the file even though VS Code just told us there is a new file with that path. I feel like there is some kind of race condition here. I'm going to try to repro, although I'm not sure if it's what's leading to the delays you're seeing.

For (probably my) future reference, here's an annotated snippet from the log:

// Client says it will rename
1678297070883:Req:{"jsonrpc"::"2.0","id"::24,"method"::"workspace/willRenameFiles","params"::{"files"::[{"oldUri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_close_button.dart","newUri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"}]},"clientRequestTime"::1678297070883}

// Server provides the edits required to update the imports
1678297070936:Res:{"id"::24,"jsonrpc"::"2.0","result"::{"documentChanges"::[{"edits"::[{"newText"::"'package::weforza/widgets/common/search_field_with_clear_button.dart'","range"::{"end"::{"character"::75,"line"::9},"start"::{"character"::7,"line"::9}}}],"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list.dart","version"::null}}]}}

// Client opens a file that references the file being renamed and makes the requested edits
1678297072631:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list.dart","languageId"::"dart","version"::100,"text"::"SNIP"}},"clientRequestTime"::1678297072631}
1678297072633:Req:{"jsonrpc"::"2.0","method"::"textDocument/didChange","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/pages/rider_list/rider_list.dart","version"::101},"contentChanges"::[{"range"::{"start"::{"line"::9,"character"::7},"end"::{"line"::9,"character"::75}},"rangeLength"::68,"text"::"'package::weforza/widgets/common/search_field_with_clear_button.dart'"}]},"clientRequestTime"::1678297072632}

// Client closes the original file
1678297072686:Req:{"jsonrpc"::"2.0","method"::"textDocument/didClose","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_close_button.dart"}},"clientRequestTime"::1678297072656}

// Client opens the new file (at this point it only exists in the editors buffer, not on disk - at least according to servers view)
1678297072732:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","languageId"::"dart","version"::1,"text"::"SNIP"}},"clientRequestTime"::1678297072714}

// Client sends some requests for this newly opened file
// At this point, we have not seen a watch event for it, but the didOpen request above should mean server knows about it
// Yet, these requests will fail (but should not)
1678297072733:Req:{"jsonrpc"::"2.0","id"::26,"method"::"textDocument/documentColor","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"}},"clientRequestTime"::1678297072720}
1678297072733:Req:{"jsonrpc"::"2.0","id"::27,"method"::"textDocument/codeAction","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"},"range"::{"start"::{"line"::0,"character"::0},"end"::{"line"::0,"character"::0}},"context"::{"diagnostics"::[],"triggerKind"::2}},"clientRequestTime"::1678297072722}
1678297072734:Req:{"jsonrpc"::"2.0","id"::28,"method"::"textDocument/documentSymbol","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"}},"clientRequestTime"::1678297072723}

// Analysis for that new file occurs
1678297072739:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"}}

// The requests sent above fail
1678297072741:Res:{"id"::26,"jsonrpc"::"2.0","error"::{"code"::-32003,"data"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","message"::"File does not exist"}}
1678297072741:Res:{"id"::28,"jsonrpc"::"2.0","error"::{"code"::-32003,"data"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","message"::"File does not exist"}}
1678297072742:Res:{"id"::27,"jsonrpc"::"2.0","result"::[{"command"::{"arguments"::[{"path"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","autoTriggered"::true}],"command"::"edit.sortMembers","title"::"Sort Members"},"kind"::"source.sortMembers","title"::"Sort Members"},{"command"::{"arguments"::[{"path"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","autoTriggered"::true}],"command"::"edit.organizeImports","title"::"Organize Imports"},"kind"::"source.organizeImports","title"::"Organize Imports"},{"command"::{"arguments"::[{"path"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","autoTriggered"::true}],"command"::"edit.fixAll","title"::"Fix All"},"kind"::"source.fixAll","title"::"Fix All"}]}

// Inlay hints appear to be requested even after we've published diagnostics for the new file, yet these also fail
1678297072774:Req:{"jsonrpc"::"2.0","id"::30,"method"::"textDocument/inlayHint","params"::{"textDocument"::{"uri"::"file::///Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart"},"range"::{"start"::{"line"::0,"character"::0},"end"::{"line"::64,"character"::0}}},"clientRequestTime"::1678297072774}
1678297072775:Res:{"id"::30,"jsonrpc"::"2.0","error"::{"code"::-32003,"data"::"/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart","message"::"File does not exist"}}

// Watcher event for the removed file (old name)
1678297072857:Watch:<unknown>:/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_close_button.dart:remove

// Watcher even for the newly-added file (new name)
1678297072858:Watch:<unknown>:/Users/navaronbracke/Documents/weforza/lib/widgets/common/search_field_with_clear_button.dart:add

@navaronbracke
Copy link
Author

navaronbracke commented Mar 8, 2023

I did the same thing like last time:

  1. Open a .dart file (in this case search_field_with_close_button.dart), which has a class SearchFieldWithCloseButton.
  2. In the file tree on the left, rename search_field_with_close_button.dart to search_field_with_clear_button.dart
  3. Confirm the 'This action will apply changes to the codebase dialog'
  4. Go back into the file that I opened in step 1 (which has now been renamed) This file has always been open up to this point.
  5. Richt click on the name of the class SearchFieldWithCloseButton
  6. Select Rename Symbol in the context menu
  7. File does not exist error pops up as a small blue box under the symbol class SearchFieldWithCloseButton
  8. With the file still open I repeated step 5-7 a few times.
  9. Close the search_field_with_clear_button.dart file (the one that was renamed)
  10. Reopen the file
  11. If I now repeat step 5-7 it does work

I did try something a bit different this time as well:

  1. After I noticed that the File not found error popped up, I opened a different file which imports the SearchFieldWithCloseButton class (without closing search_field_with_clear_button.dart)
  2. The import to the renamed file had not been corrected automatically (despite confirming the dialog earlier)
  3. I removed the broken import
  4. I went to a usage in the file which now complains about a missing class
  5. Click the lightbulb button with action hints
  6. The lightbulb menu does not suggest an import for the class
    (despite the class still existing under the same name, just under a different file)

It seems that it only restores if you close the file that was renamed.

@navaronbracke
Copy link
Author

navaronbracke commented Mar 8, 2023

@DanTup If I close the file and then rename it (so that there is no open file handle when the rename happens) everything works as expected. Could it be that the editor does things at the right pace, but because the file handle is open, it can't apply some things? Like does the open file handle lock certain actions?

@DanTup
Copy link
Collaborator

DanTup commented Mar 8, 2023

In the log file, it shows that VS Code "closed" the file as it was doing the rename (and opened it with a new name), so I wouldn't have expected that to make a difference. However if it seems to, perhaps here's something not right with our handling of that close.

I think I have enough info to do some more targeted digging now anyway, so I'll see what I can find - thanks!

@DanTup
Copy link
Collaborator

DanTup commented Mar 28, 2023

I may have a reliable repro for what appears to be this issue, although I can only trigger it when moving the file from lib to bin.

bin/main.dart

import 'package:dart_sdk_51159/foo.dart';

Foo? a;

lib/foo.dart

class Foo {}

Open both files side-by-side. Drag foo.dart from lib to bin. The import in the bin folder is updated (so it's now just import "foo.dart"; however there's a diagnostic saying that the file doesn't exist. The diagnostic pages clearly show an open file with that path.

Relevant log parts:



// Open both files
1680000685767:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart","languageId"::"dart","version"::1,"text"::"import 'package::dart_sdk_51159/foo.dart';\n\nFoo? a;\n"}},"clientRequestTime"::1680000685746}
1680000685783:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart","languageId"::"dart","version"::1,"text"::"class Foo {}\n"}},"clientRequestTime"::1680000685746}

// Get initial empty diagnostics for all
1680000686130:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/pubspec.yaml"}}
1680000686639:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart"}}
1680000686731:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart"}}

// Ask server for edits for the rename
1680000692184:Req:{"jsonrpc"::"2.0","id"::16,"method"::"workspace/willRenameFiles","params"::{"files"::[{"oldUri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart","newUri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/foo.dart"}]},"clientRequestTime"::1680000692184}
1680000692229:Res:{"id"::16,"jsonrpc"::"2.0","result"::{"documentChanges"::[{"edits"::[{"newText"::"'foo.dart'","range"::{"end"::{"character"::40,"line"::0},"start"::{"character"::7,"line"::0}}}],"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart","version"::1}}]}}

// Apply the edits for the rename
1680000692244:Req:{"jsonrpc"::"2.0","method"::"textDocument/didChange","params"::{"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart","version"::2},"contentChanges"::[{"range"::{"start"::{"line"::0,"character"::8},"end"::{"line"::0,"character"::31}},"rangeLength"::23,"text"::""}]},"clientRequestTime"::1680000692244}

// Server says the import is invalid, because the new file doesn't exist yet
1680000692287:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[{"code"::"uri_does_not_exist","codeDescription"::{"href"::"https:://dart.dev/diagnostics/uri_does_not_exist"},"message"::"Target of URI doesn't exist:: 'foo.dart'.\nTry creating the file referenced by the URI, or try using a URI for a file that does exist.","range"::{"end"::{"character"::17,"line"::0},"start"::{"character"::7,"line"::0}},"severity"::1,"source"::"dart"},{"code"::"undefined_class","codeDescription"::{"href"::"https:://dart.dev/diagnostics/undefined_class"},"message"::"Undefined class 'Foo'.\nTry changing the name to the name of an existing class, or creating a class with the name 'Foo'.","range"::{"end"::{"character"::3,"line"::2},"start"::{"character"::0,"line"::2}},"severity"::1,"source"::"dart"}],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart"}}

// Close the old file and open the new file
1680000692288:Req:{"jsonrpc"::"2.0","method"::"textDocument/didClose","params"::{"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart"}},"clientRequestTime"::1680000692267}
1680000692294:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[{"code"::"uri_does_not_exist","codeDescription"::{"href"::"https:://dart.dev/diagnostics/uri_does_not_exist"},"message"::"Target of URI doesn't exist:: 'foo.dart'.\nTry creating the file referenced by the URI, or try using a URI for a file that does exist.","range"::{"end"::{"character"::17,"line"::0},"start"::{"character"::7,"line"::0}},"severity"::1,"source"::"dart"},{"code"::"undefined_class","codeDescription"::{"href"::"https:://dart.dev/diagnostics/undefined_class"},"message"::"Undefined class 'Foo'.\nTry changing the name to the name of an existing class, or creating a class with the name 'Foo'.","range"::{"end"::{"character"::3,"line"::2},"start"::{"character"::0,"line"::2}},"severity"::1,"source"::"dart"}],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart"}}
1680000692301:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart"}}
1680000692313:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/foo.dart","languageId"::"dart","version"::1,"text"::"class Foo {}\n"}},"clientRequestTime"::1680000692312}
1680000692325:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/foo.dart"}}

// Trigger the rename on disk
1680000692427:Watch:<unknown>:/Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart:remove
1680000692428:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/lib/foo.dart"}}
1680000692428:Watch:<unknown>:/Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/foo.dart:add

// Error still exists
1680000692471:Res:{"jsonrpc"::"2.0","method"::"textDocument/publishDiagnostics","params"::{"diagnostics"::[{"code"::"uri_does_not_exist","codeDescription"::{"href"::"https:://dart.dev/diagnostics/uri_does_not_exist"},"message"::"Target of URI doesn't exist:: 'foo.dart'.\nTry creating the file referenced by the URI, or try using a URI for a file that does exist.","range"::{"end"::{"character"::17,"line"::0},"start"::{"character"::7,"line"::0}},"severity"::1,"source"::"dart"},{"code"::"undefined_class","codeDescription"::{"href"::"https:://dart.dev/diagnostics/undefined_class"},"message"::"Undefined class 'Foo'.\nTry changing the name to the name of an existing class, or creating a class with the name 'Foo'.","range"::{"end"::{"character"::3,"line"::2},"start"::{"character"::0,"line"::2}},"severity"::1,"source"::"dart"}],"uri"::"file::///Users/danny/Desktop/dart_samples/dart_sdk_51159/bin/main.dart"}}

@DanTup
Copy link
Collaborator

DanTup commented Mar 28, 2023

Ok, I think I understand the issue now. I think there are two optimisations I've added which are not playing nicely together.

  1. When a file is "opened" by the client, we are given a copy of the contents. We used to analyze this file, but in the huge majority of cases the contents are the same as was on disk (since that's where it was opened from). So I added an optimisation that said if a newly opened file is the same as on disk, don't analyze it (0add39a).
  2. When a file is modified on disk, we would also always analyze the file. But it's possible that we have an "overlay" (that is, the file contents are currently owned by the client editor, and what's on disk doesn't matter) so the analysis we trigger wouldn't use the on-disk content. So I added an optimisation that said if a modified file has an overlay, don't analyze it (30d7a0c).

Both of these choices appear sound. However, I think we have a race here that can cause both of these optimisations to occur when a new file is created and opened at the same time, resulting in no analysis. When I reproduce this issue with some extra logging, I see this in the logs:

// Client sends a didOpen request for a brand new file the server has never been seen before
1680012532850:Req:{"jsonrpc"::"2.0","method"::"textDocument/didOpen","params"::{"textDocument"::{"languageId"::"dart","text"::"class Foo {}\n","uri"::"file::///private/var/folders/b1/ftm2whhj4mb3_c4nfjhq23z00000gn/T/analysisServerYBoBSN/lib/foo.dart","version"::1}}}

// Server claims this file is the same as what's on disk, so skips analyzing it (!)
1680012532851:Info:Skipped notifying drivers because content is the same::
path:: /private/var/folders/b1/ftm2whhj4mb3_c4nfjhq23z00000gn/T/analysisServerYBoBSN/lib/foo.dart
new:: class Foo {}

previous:: class Foo {}

I believe what's happening is:

  1. The file is renamed on disk. This event ends up in a buffer that will cause the server to process it (obviously, the operating system does not wait for the Dart server to process its watch event, so the file now exists but Dart doesn't know about it)
  2. Around the same time, the editor tells the server about this new file that has just been opened. Server gets this notification before it has received the watcher event
  3. Server creates the overlay for the file and says "hey, this file is the same as on disk, I don't need to do anything"
  4. Server processes watch event and says "hey, this file has an overlay, I don't need to do anything"

Removing either optimisation would fix the issue, but my feeling is that the one that shortcuts in didOpen is the broken one. It's looking on the disk to decide that this overlay wouldn't change anything in the servers state, but the server is behind. It should really be detecting whether the file contents are the same as the server already knows about (and if the server does not know about this file, it should consider this a new file).

@bwilkerson @scheglov is there a reasonable way to get the contents of a file that the server has analyzed, without going through the resourceProvider that would read from disk if the contents have not been analyzed? The issue is this code here, reading the "current" version of a file and not comparing to the one the server had last analyzed.

void onOverlayCreated(String path, String content) {
final currentFile = resourceProvider.getFile(path);
String? currentContent;
try {
currentContent = currentFile.readAsStringSync();
} on FileSystemException {
// It's possible we're creating an overlay for a file that doesn't yet
// exist on disk so must handle missing file exceptions. Checking for
// exists first would introduce a race.
}
resourceProvider.setOverlay(path,
content: content, modificationStamp: overlayModificationStamp++);
// If the overlay is exactly the same as the previous content we can skip
// notifying drivers which avoids re-analyzing the same content.
if (content != currentContent) {

If we can't do this, we could remove this optimisation - although the optimisation might be reducing the frequency of the issue in #48051.

@DanTup DanTup changed the title Analyzer is delayed after renaming files Renaming files sometimes leaves stale analysis errors saying the file does not exist Mar 28, 2023
@DanTup DanTup added the devexp-lsp Issues with analysis server's support of Language Server Protocol label Mar 28, 2023
@bwilkerson
Copy link
Member

Every AnalysisDriver has a FileSystemState that can return the state of any file known to the driver. I think that in the case where the file is new (has never been analyzed before), the method getExistingFromPath should return null.

@DanTup
Copy link
Collaborator

DanTup commented Mar 29, 2023

That seems to be exactly what I needed, thanks!

Fix at https://dart-review.googlesource.com/c/sdk/+/291801.

@DanTup
Copy link
Collaborator

DanTup commented Mar 29, 2023

Fixed by ec658a1.

@DanTup DanTup closed this as completed Mar 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devexp-lsp Issues with analysis server's support of Language Server Protocol legacy-area-analyzer Use area-devexp instead. P2 A bug or feature request we're likely to work on
Projects
None yet
Development

No branches or pull requests

5 participants