// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/ast/ast.dart';

import 'package:scrape/scrape.dart';

void main(List<String> arguments) {
  Scrape()
    ..addHistogram('Classes', order: SortOrder.numeric)
    ..addVisitor(() => GenericClassVisitor())
    ..runCommandLine(arguments);
}

class GenericClassVisitor extends ScrapeVisitor {
  @override
  void visitCompilationUnit(CompilationUnit node) {
    super.visitCompilationUnit(node);
  }

  @override
  void visitClassDeclaration(ClassDeclaration node) {
    if (node.typeParameters == null) {
      record('Classes', 0);
    } else {
      record('Classes', node.typeParameters!.typeParameters.length);
    }
    super.visitClassDeclaration(node);
  }
}
