| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /// Creates a new string with the first occurrence of [before] replaced by |
| /// [after]. |
| /// |
| /// If the [originalContents] uses CRLF line endings, the [before] and [after] |
| /// will be converted to CRLF line endings before the replacement is made. |
| /// This is necessary for users that have git autocrlf enabled. |
| /// |
| /// Example: |
| /// ```dart |
| /// 'a\n'.replaceFirst('a\n', 'b\n'); // 'b\n' |
| /// 'a\r\n'.replaceFirst('a\n', 'b\n'); // 'b\r\n' |
| /// ``` |
| String replaceFirst(String originalContents, String before, String after) { |
| final String result = originalContents.replaceFirst(before, after); |
| if (result != originalContents) { |
| return result; |
| } |
| |
| final String beforeCrlf = before.replaceAll('\n', '\r\n'); |
| final String afterCrlf = after.replaceAll('\n', '\r\n'); |
| |
| return originalContents.replaceFirst(beforeCrlf, afterCrlf); |
| } |