extractNodeName function

String? extractNodeName(
  1. AstNode node
)

Extracts a string name from an AST node safely.

Supports ClassDeclaration, FunctionDeclaration, EnumDeclaration, MixinDeclaration, ExtensionDeclaration, ExtensionTypeDeclaration, TypeAlias, VariableDeclaration, MethodDeclaration, and ConstructorDeclaration, falling back to recursive identifier token scanning.

Implementation

String? extractNodeName(AstNode node) => switch (node) {
  ClassDeclaration(:final declaredFragment) =>
    declaredFragment?.element.name ?? _findFirstIdentifier(node),
  ClassTypeAlias(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  EnumDeclaration(:final declaredFragment) =>
    declaredFragment?.element.name ?? _findFirstIdentifier(node),
  MixinDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  ExtensionDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name?.lexeme,
  ExtensionTypeDeclaration(:final declaredFragment) =>
    declaredFragment?.element.name ?? _findFirstIdentifier(node),
  TypeAlias(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  FunctionDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  VariableDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  MethodDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name.lexeme,
  ConstructorDeclaration(:final declaredFragment, :final name) =>
    declaredFragment?.element.name ?? name?.lexeme,
  EnumConstantDeclaration(:final name) => name.lexeme,
  TopLevelVariableDeclaration(:final variables)
      when variables.variables.isNotEmpty =>
    extractNodeName(variables.variables.first),
  FieldDeclaration(:final fields) when fields.variables.isNotEmpty =>
    extractNodeName(fields.variables.first),
  _ => _findFirstIdentifier(node),
};