Skip to content

Commit

Permalink
Always escape when writing pubspec.yaml's 'description' field. (#130096)
Browse files Browse the repository at this point in the history
Closes flutter/flutter#80013.

**Before**:

```
$ flutter create test1 --description "a: b"
Creating project test1...
Error detected in pubspec.yaml:
Error on line 2, column 15: Mapping values are not allowed here. Did you miss a colon earlier?
  �
2 � description: a: b
  �               ^
  �
Please correct the pubspec.yaml file at /Users/matan/Developer/scratch/test1/pubspec.yaml
```

**After**:

```
$ flutter create test1 --description "a: b"
Creating project test1...
Resolving dependencies in test1... 
Got dependencies in test1.
Wrote 129 files.

All done!
You can find general documentation for Flutter at: https://docs.flutter.dev/
Detailed API documentation is available at: https://api.flutter.dev/
If you prefer video documentation, consider: https://www.youtube.com/c/flutterdev

In order to run your application, type:

  $ cd test1
  $ flutter run

Your application code is in test1/lib/main.dart.
```

---

It's worth noting that this _always_ escapes a non-empty project description, which means that descriptions that were not previously wrapped in `"`s' will be. I'm not sure how worth it is to do a _conditional_ escape (i.e. only escape if not escaping would cause a problem), but willing to change.

Side-note: I had no idea where to list this test in the (very large) `create_test.dart`, so I did my best :)
  • Loading branch information
matanlurey authored Jul 13, 2023
1 parent 7fc4990 commit 0374905
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/flutter_tools/lib/src/commands/create_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ abstract class CreateBase extends FlutterCommand {
'macosIdentifier': appleIdentifier,
'linuxIdentifier': linuxIdentifier,
'windowsIdentifier': windowsIdentifier,
'description': projectDescription,
'description': projectDescription != null ? escapeYamlString(projectDescription) : null,
'dartSdk': '$flutterRoot/bin/cache/dart-sdk',
'androidMinApiLevel': android_common.minApiLevel,
'androidSdkVersion': kAndroidSdkMinVersion,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3266,6 +3266,24 @@ void main() {
),
});

testUsingContext('should escape ":" in project description', () async {
await _createProject(
projectDir,
<String>[
'--no-pub',
'--description',
'a: b',
],
<String>[
'pubspec.yaml',
],
);

final String rawPubspec = await projectDir.childFile('pubspec.yaml').readAsString();
final Pubspec pubspec = Pubspec.parse(rawPubspec);
expect(pubspec.description, 'a: b');
});

testUsingContext('create an FFI plugin with ios, then add macos', () async {
Cache.flutterRoot = '../..';

Expand Down

0 comments on commit 0374905

Please sign in to comment.