| // Copyright (c) 2025, 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:_fe_analyzer_shared/src/messages/codes.dart'; | |
| import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'; | |
| String codePointToUnicode(int codePoint) { | |
| // Write unicode value using at least four (but otherwise no more than | |
| // necessary) hex digits, using uppercase letters. | |
| // http://www.unicode.org/versions/Unicode10.0.0/appA.pdf | |
| return "U+${codePoint.toRadixString(16).toUpperCase().padLeft(4, '0')}"; | |
| } | |
| String formatNumber( | |
| num num, { | |
| int? fractionDigits, | |
| int padWidth = 0, | |
| bool padWithZeros = false, | |
| }) { | |
| String s = fractionDigits == null | |
| ? '$num' | |
| : num.toStringAsFixed(fractionDigits); | |
| return s.padLeft(padWidth, padWithZeros ? '0' : ' '); | |
| } | |
| String nameOrUnnamed(String name) => name.isEmpty ? '(unnamed)' : name; | |
| String stringOrEmpty(String string) => string.isEmpty ? '(empty)' : string; | |
| String tokenToLexeme(Token token) => token.lexeme; | |
| String validateAndDemangleName(String name) { | |
| if (name.isEmpty) throw 'No name provided'; | |
| return demangleMixinApplicationName(name); | |
| } | |
| String validateAndItemizeNames(List<String> names) { | |
| if (names.isEmpty) throw 'No names provided'; | |
| return itemizeNames(names); | |
| } | |
| String validateCharacter(String character) { | |
| if (character.runes.length != 1) throw "Not a character '${character}'"; | |
| return character; | |
| } | |
| String validateString(String string) { | |
| if (string.isEmpty) throw 'No string provided'; | |
| return string; | |
| } |