swagger_generator_flutter/lib/utils/string_utils/template_service.dart

86 lines
2.4 KiB
Dart

import 'package:swagger_generator_flutter/core/config_repository.dart';
import 'package:swagger_generator_flutter/utils/string_utils/text_cleaner.dart';
/// Template service for generating comments and file headers
class TemplateService {
// No instance fields needed; all methods use ConfigRepository.
/// Generate comment block
static String generateComment(String text, {bool isBlock = false}) {
if (text.isEmpty) return '';
final cleanText = TextCleaner.cleanDescription(text);
if (isBlock) {
return '/**\n * $cleanText\n */';
} else {
return '/// $cleanText';
}
}
/// Generate file header
String generateFileHeader(
String description,
String source, {
String? fileName,
String? fileType,
}) {
// Load configuration repository synchronously
final config = ConfigRepository.loadSync();
final template = config.fileHeaderTemplate;
if (template != null && template.isNotEmpty) {
return _applyFileHeaderTemplate(
template,
description: description,
source: source,
fileName: fileName ?? '',
fileType: fileType ?? description,
generatorName: config.generatorName,
author: config.author,
copyright: config.copyright,
);
}
// Use default template
final generatorName = config.generatorName;
final author = config.author;
final copyright = config.copyright;
return '''
// $description
// 由 $generatorName by $author 生成
// $copyright
''';
}
/// Apply file header template
String _applyFileHeaderTemplate(
String template, {
required String description,
required String source,
required String fileName,
required String fileType,
required String generatorName,
required String author,
required String copyright,
}) {
var result = template;
// Replace template variables
result = result.replaceAll('{fileName}', fileName);
result = result.replaceAll('{fileType}', fileType);
result = result.replaceAll('{swaggerUrl}', source);
result = result.replaceAll('{generatorName}', generatorName);
result = result.replaceAll('{author}', author);
result = result.replaceAll('{copyright}', copyright);
// If template doesn't contain comments, add default format
if (!result.contains('//')) {
result = '// $description\n$result';
}
return result;
}
}