| // 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/scanner/characters.dart' |
| show $MINUS, $_, $a, $z, $A; |
| |
| /// Converts the kebab case [text] to (upper) camel case. |
| /// |
| /// If [upperCaseFirst] is `true` the result is upper camel case, otherwise the |
| /// result is (lower) camel case. |
| /// |
| /// Kebab case is of the form `foo-bar-baz`. (Lower) camel case is of the form |
| /// `fooBarBaz`, and upper camel case is of the form `FooBarBaz`. |
| String kebabCaseToCamelCase(String text, {bool upperCaseFirst = false}) { |
| StringBuffer identifier = new StringBuffer(); |
| bool first = true; |
| for (int index = 0; index < text.length; ++index) { |
| int code = text.codeUnitAt(index); |
| if (code == $MINUS) { |
| ++index; |
| code = text.codeUnitAt(index); |
| if ($a <= code && code <= $z) { |
| code = code - $a + $A; |
| } |
| } |
| if (first && upperCaseFirst && $a <= code && code <= $z) { |
| code = code - $a + $A; |
| } |
| first = false; |
| identifier.writeCharCode(code); |
| } |
| return identifier.toString(); |
| } |
| |
| /// Converts the kebab case [text] to snake case. |
| /// |
| /// Kebab case is of form `foo-bar-baz`. Snake case is of form `foo_bar_baz`. |
| String kebabCaseToSnakeCase(String text) { |
| StringBuffer identifier = new StringBuffer(); |
| for (int index = 0; index < text.length; ++index) { |
| int code = text.codeUnitAt(index); |
| if (code == $MINUS) { |
| code = $_; |
| } |
| identifier.writeCharCode(code); |
| } |
| return identifier.toString(); |
| } |