mirror of https://github.com/AMT-Cheif/drift.git
Fix wrapping code with collection literals (#2787)
This commit is contained in:
parent
08ceb939bc
commit
ac627b1a10
|
@ -122,7 +122,7 @@ class DartAccessorResolver
|
|||
final declaration = DriftDeclaration.dartElement(element);
|
||||
if (discovered.isDatabase) {
|
||||
final accessors = <DatabaseAccessor>[];
|
||||
final rawDaos = annotation.getField('daos')!.toListValue()!;
|
||||
final rawDaos = annotation.getField('daos')?.toListValue() ?? const [];
|
||||
for (final value in rawDaos) {
|
||||
final type = value.toTypeValue()!;
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/syntactic_entity.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart';
|
||||
import 'package:analyzer/dart/ast/visitor.dart';
|
||||
import 'package:analyzer/dart/element/element.dart';
|
||||
|
@ -459,13 +460,20 @@ class _AddFromAst extends GeneralizingAstVisitor<void> {
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitNode(AstNode node) {
|
||||
if (_excluding.contains(node)) return;
|
||||
void _visitCommaSeparated(NodeList nodes) {
|
||||
var first = true;
|
||||
for (final arg in nodes) {
|
||||
if (!first) _builder.addText(',');
|
||||
|
||||
arg.accept(this);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
void _childEntities(Iterable<SyntacticEntity> childEntities) {
|
||||
int? offset;
|
||||
|
||||
for (final childEntity in node.childEntities) {
|
||||
for (final childEntity in childEntities) {
|
||||
if (offset != null && childEntity.offset > offset) {
|
||||
_builder.addText(' ');
|
||||
}
|
||||
|
@ -479,19 +487,17 @@ class _AddFromAst extends GeneralizingAstVisitor<void> {
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitNode(AstNode node) {
|
||||
if (_excluding.contains(node)) return;
|
||||
_childEntities(node.childEntities);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitArgumentList(ArgumentList node) {
|
||||
// Workaround to the analyzer not including commas: https://github.com/dart-lang/sdk/blob/20ad5db3ab3f2ae49f9668b75331e51c84267011/pkg/analyzer/lib/src/dart/ast/ast.dart#L389
|
||||
_builder.addText('(');
|
||||
|
||||
var first = true;
|
||||
for (final arg in node.arguments) {
|
||||
if (!first) _builder.addText(',');
|
||||
|
||||
visitNode(arg);
|
||||
first = false;
|
||||
}
|
||||
|
||||
_visitCommaSeparated(node.arguments);
|
||||
_builder.addText(')');
|
||||
}
|
||||
|
||||
|
@ -534,4 +540,20 @@ class _AddFromAst extends GeneralizingAstVisitor<void> {
|
|||
_builder.addText(node.name);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void visitListLiteral(ListLiteral node) {
|
||||
_childEntities(
|
||||
[node.constKeyword, node.typeArguments, node.leftBracket].whereType());
|
||||
_visitCommaSeparated(node.elements);
|
||||
_childEntities([node.rightBracket]);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitSetOrMapLiteral(SetOrMapLiteral node) {
|
||||
_childEntities(
|
||||
[node.constKeyword, node.typeArguments, node.leftBracket].whereType());
|
||||
_visitCommaSeparated(node.elements);
|
||||
_childEntities([node.rightBracket]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,4 +149,42 @@ class MyDatabase {}
|
|||
result.writer,
|
||||
);
|
||||
});
|
||||
|
||||
test('generates code for view with multiple group by', () async {
|
||||
final result = await emulateDriftBuild(
|
||||
inputs: {
|
||||
'a|lib/a.dart': r'''
|
||||
import 'package:drift/drift.dart';
|
||||
|
||||
class Todo extends Table {
|
||||
TextColumn get id => text()();
|
||||
TextColumn get listid => text().nullable()();
|
||||
BoolColumn get completed => boolean()();
|
||||
}
|
||||
|
||||
@DriftView()
|
||||
abstract class SomeView extends View {
|
||||
Todo get todoItems;
|
||||
|
||||
@override
|
||||
Query as() => select([todoItems.id]).from(todoItems)
|
||||
..groupBy([todoItems.id, todoItems.listId]);
|
||||
}
|
||||
|
||||
@DriftDatabase(tables: [Todo], views: [SomeView])
|
||||
class MyDatabase {}
|
||||
''',
|
||||
},
|
||||
logger: loggerThat(neverEmits(anything)),
|
||||
);
|
||||
|
||||
checkOutputs(
|
||||
{
|
||||
'a|lib/a.drift.dart': allOf(IsValidDartFile(anything),
|
||||
decodedMatches(contains('todoItems.id, todoItems.listId')))
|
||||
},
|
||||
result.dartOutputs,
|
||||
result.writer,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue