detectLanguage function

String? detectLanguage(
  1. String input
)

Detect programming language from input content.

Implementation

String? detectLanguage(String input) {
  // Check for explicit code blocks with language tags.
  final codeBlocks = extractCodeBlocks(input);
  for (final block in codeBlocks) {
    if (block.language.isNotEmpty) {
      final normalized = _normalizeLanguageName(block.language);
      if (normalized != null) return normalized;
    }
  }

  // Check for file extension mentions.
  final extensionMap = <String, String>{
    '.dart': 'Dart',
    '.ts': 'TypeScript',
    '.tsx': 'TypeScript',
    '.js': 'JavaScript',
    '.jsx': 'JavaScript',
    '.py': 'Python',
    '.rb': 'Ruby',
    '.rs': 'Rust',
    '.go': 'Go',
    '.java': 'Java',
    '.kt': 'Kotlin',
    '.swift': 'Swift',
    '.c': 'C',
    '.cpp': 'C++',
    '.cs': 'C#',
    '.php': 'PHP',
    '.vue': 'Vue',
    '.svelte': 'Svelte',
    '.html': 'HTML',
    '.css': 'CSS',
    '.sql': 'SQL',
    '.sh': 'Shell',
  };

  for (final entry in extensionMap.entries) {
    if (input.contains(entry.key)) return entry.value;
  }

  // Check for language keyword hints in the text.
  final keywordMap = <RegExp, String>{
    RegExp(r'\b(?:flutter|dart|pubspec)\b', caseSensitive: false): 'Dart',
    RegExp(r'\b(?:typescript|tsx?)\b', caseSensitive: false): 'TypeScript',
    RegExp(r'\b(?:javascript|nodejs|node\.js)\b', caseSensitive: false):
        'JavaScript',
    RegExp(r'\b(?:python|pip|django|flask|fastapi)\b', caseSensitive: false):
        'Python',
    RegExp(r'\b(?:rust|cargo|crate)\b', caseSensitive: false): 'Rust',
    RegExp(r'\b(?:golang|go\s+module)\b', caseSensitive: false): 'Go',
    RegExp(r'\b(?:java|spring\s*boot|maven|gradle)\b', caseSensitive: false):
        'Java',
    RegExp(r'\b(?:kotlin|ktor)\b', caseSensitive: false): 'Kotlin',
    RegExp(r'\b(?:swift|swiftui|xcode)\b', caseSensitive: false): 'Swift',
    RegExp(r'\b(?:ruby|rails|bundler|gem)\b', caseSensitive: false): 'Ruby',
    RegExp(r'\b(?:c\+\+|cpp|cmake)\b', caseSensitive: false): 'C++',
    RegExp(r'\b(?:c#|csharp|dotnet|\.net)\b', caseSensitive: false): 'C#',
    RegExp(r'\bphp\b', caseSensitive: false): 'PHP',
  };

  for (final entry in keywordMap.entries) {
    if (entry.key.hasMatch(input)) return entry.value;
  }

  return null;
}