Skip to content

Commit

Permalink
Fix toString() not escaping class names
Browse files Browse the repository at this point in the history
Closes #3454
  • Loading branch information
simolus3 committed Feb 6, 2025
1 parent 01bab07 commit 965b6cb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
2 changes: 2 additions & 0 deletions drift_dev/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
generation mode.
- Allow generating manager references across different files in modular
generation mode.
- Fix class names with dollar signs not being escaped in drift-generated
`toString()`.

## 2.24.0

Expand Down
4 changes: 3 additions & 1 deletion drift_dev/lib/src/writer/utils/override_toString.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// ignore_for_file: file_names

import '../../utils/string_escaper.dart';

/// Generates a `toString` override into the [into] buffer.
///
/// The override looks like this:
Expand All @@ -21,7 +23,7 @@ void overrideToString(
) {
into
..write('@override\nString toString() {')
..write("return (StringBuffer('$className(')");
..write("return (StringBuffer('${escapeForDart(className)}(')");

for (var i = 0; i < properties.length; i++) {
final property = properties[i];
Expand Down
29 changes: 29 additions & 0 deletions drift_dev/test/writer/utils/override_tostring_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import 'package:drift_dev/src/analysis/options.dart';
import 'package:drift_dev/src/writer/import_manager.dart';
import 'package:drift_dev/src/writer/utils/override_toString.dart';
import 'package:drift_dev/src/writer/writer.dart';
import 'package:test/test.dart';

void main() {
late Writer writer;

setUp(() {
final imports = LibraryImportManager(Uri.parse('drift:test'));
final generationOptions =
GenerationOptions(imports: imports, isModular: true);
writer = Writer(const DriftOptions.defaults(),
generationOptions: generationOptions);
imports.linkToWriter(writer);
});

test('overrides toString on class with dollar sign in name', () {
overrideToString(r'$Foo', ['a', 'b'], writer.leaf().buffer);

expect(
writer.writeGenerated(),
'@override\n'
'String toString() {'
r"return (StringBuffer('\$Foo(')..write('a: $a, ')..write('b: $b')..write(')')).toString();"
'}\n');
});
}

0 comments on commit 965b6cb

Please sign in to comment.