|  | // Copyright (c) 2024, 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. | 
|  |  | 
|  | /// Generation logic for `LinterLintCode` and its static members | 
|  | /// based on the entries in `pkg/linter/messages.yaml`. | 
|  | library; | 
|  |  | 
|  | import 'package:analyzer_utilities/tools.dart'; | 
|  |  | 
|  | import '../../../analyzer/tool/messages/error_code_info.dart'; | 
|  | import '../util/path_utils.dart'; | 
|  |  | 
|  | Future<void> main() async { | 
|  | await generateCodesFile().generate(linterPackageRoot); | 
|  | } | 
|  |  | 
|  | String get generatedCodesPath => | 
|  | pathRelativeToPackageRoot(const ['lib', 'src', 'linter_lint_codes.dart']); | 
|  |  | 
|  | GeneratedFile generateCodesFile() => | 
|  | GeneratedFile(generatedCodesPath, (String pkgPath) async { | 
|  | var out = StringBuffer(''' | 
|  | // Copyright (c) 2024, 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. | 
|  |  | 
|  | // THIS FILE IS GENERATED. DO NOT EDIT. | 
|  | // | 
|  | // Instead modify 'pkg/linter/messages.yaml' and run | 
|  | // 'dart run pkg/linter/tool/codes/generate.dart' to update. | 
|  |  | 
|  | // We allow some snake_case and SCREAMING_SNAKE_CASE identifiers in generated | 
|  | // code, as they match names declared in the source configuration files. | 
|  | // ignore_for_file: constant_identifier_names | 
|  |  | 
|  | // Generated comments don't quite align with flutter style. | 
|  | // ignore_for_file: flutter_style_todos | 
|  |  | 
|  | // Generator currently outputs double quotes for simplicity. | 
|  | // ignore_for_file: prefer_single_quotes | 
|  |  | 
|  | import 'analyzer.dart'; | 
|  |  | 
|  | class LinterLintCode extends LintCode { | 
|  | '''); | 
|  |  | 
|  | for (var MapEntry(key: errorName, value: codeInfo) | 
|  | in lintMessages['LintCode']!.entries) { | 
|  | if (codeInfo.isRemoved) continue; | 
|  | out.write(codeInfo.toAnalyzerComments(indent: '  ')); | 
|  | if (codeInfo.deprecatedMessage case var deprecatedMessage?) { | 
|  | out.writeln('  @Deprecated("$deprecatedMessage")'); | 
|  | } | 
|  | out.writeln('  static const LintCode $errorName ='); | 
|  | out.writeln(codeInfo.toAnalyzerCode('LinterLintCode', errorName)); | 
|  | out.writeln(); | 
|  | } | 
|  |  | 
|  | out.writeln(''' | 
|  | static const LintCode removed_lint = LinterLintCode( | 
|  | 'removed_lint', | 
|  | 'Removed lint.', | 
|  | ); | 
|  | '''); | 
|  |  | 
|  | out.writeln(''' | 
|  | const LinterLintCode( | 
|  | super.name, | 
|  | super.problemMessage, { | 
|  | super.correctionMessage, | 
|  | super.hasPublishedDocs, | 
|  | String? uniqueName, | 
|  | }) : super(uniqueName: 'LintCode.\${uniqueName ?? name}'); | 
|  |  | 
|  | @override | 
|  | String get url { | 
|  | if (hasPublishedDocs) { | 
|  | return 'https://dart.dev/diagnostics/\$name'; | 
|  | } | 
|  | return 'https://dart.dev/lints/\$name'; | 
|  | } | 
|  | } | 
|  | '''); | 
|  | return out.toString(); | 
|  | }); |