Skip to content

No completion at start of long chain of identifiers #61162

@scheglov

Description

@scheglov

Look for bC^. below.

import 'dart:io';

import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/overlay_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/fine/requirements.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer_testing/mock_packages/package_content/flutter_test/lib/flutter_test.dart';
import 'package:collection/collection.dart';
import 'package:convert/convert.dart';

import '../../test/src/summary/element_text.dart';
import '../../test/util/diff.dart';

Future<void> main(List<String> args) async {
  const pkgPath = '/Users/scheglov/Source/Dart/sdk.git/sdk/pkg';
  // args = ['$pkgPath/analyzer'];
  args = ['$pkgPath/analyzer/lib/src/dart/analysis'];

  var resourceProvider = OverlayResourceProvider(
    PhysicalResourceProvider.INSTANCE,
  );
  var pathContext = resourceProvider.pathContext;

  var folders = <Folder>[];
  for (var relPath in args) {
    var folder = resourceProvider.getFolder(relPath);
    if (!folder.exists) {
      stderr.writeln('Error: The directory "$relPath" does not exist.');
      exit(1);
    }
    folders.add(folder);
  }

  var baseCollection = AnalysisContextCollectionImpl(
    resourceProvider: resourceProvider,
    includedPaths: [...folders.map((e) => e.path)],
  );

  var fineCollection = AnalysisContextCollectionImpl(
    resourceProvider: resourceProvider,
    includedPaths: [...folders.map((e) => e.path)],
  );

  var dartPaths =
      baseCollection.contexts
          .expand((context) => context.contextRoot.analyzedFiles())
          .where((path) => file_paths.isDart(pathContext, path))
          .sorted();
  // print(dartFiles.join('\n'));

  var timer = Stopwatch()..start();
  var generateTextLength = 0;
  for (var path in dartPaths) {
    var baseElement = await baseCollection.getLibraryElement(path);
    var baseText = getLibraryText(
      library: baseElement,
      configuration:
          ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
    );

    generateTextLength += baseText.length;

    withFineDependencies = true;
    try {
      var fineElement = await fineCollection.getLibraryElement(path);
      var fineText = getLibraryText(
        library: fineElement,
        configuration:
            ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
      );
      if (fineText != baseText) {
        print('[path: $path]');
        printPrettyDiff(baseText, fineText);
        throw StateError('See the diff above');
      }
    } finally {
      withFineDependencies = false;
    }
  }
  print('[files: ${dartPaths.length}]');
  print('[generateTextLength: $generateTextLength]');
  print('[time: ${timer.elapsedMilliseconds} ms]');

  print('${'-' * 24} baseCollection');
  {
    {
      var buffer = StringBuffer();
      baseCollection.scheduler.accumulatedPerformance.write(buffer: buffer);
      bC^.scheduler.accumulatedPerformance = OperationPerformanceImpl(
        '<scheduler>',
      );
      print(buffer);
    }
  }

  // var tp =
  //     '/Users/scheglov/Source/Dart/sdk.git/sdk/pkg/analyzer/lib/src/dart/analysis/session.dart';
  // var analysisSession = contextCollection.contextFor(tp).currentSession;
  // var unitResult = await analysisSession.getUnitElement(tp);
  // unitResult as UnitElementResultImpl;
  //
  // var libraryText = getLibraryText(
  //   library: unitResult.fragment.element,
  //   configuration:
  //       ElementTextConfiguration()..assertHandler = (_, _, {reason}) {},
  // );
  //
  // print('-' * 64);
  // print(libraryText);
  // print('-' * 64);
}

extension on AnalysisContextCollectionImpl {
  Future<LibraryElementImpl> getLibraryElement(String path) async {
    var analysisSession = contextFor(path).currentSession;
    var unitResult = await analysisSession.getUnitElement(path);
    unitResult as UnitElementResultImpl;
    return unitResult.fragment.element;
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-devexpFor issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.devexp-completionIssues with the analysis server's code completion feature

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions