Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions web_generator/bin/gen_interop_bindings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,11 @@ $_usage''');
final inputFile = argResult.rest.first;
final outputFile = argResult['output'] as String? ??
p.join(p.current, inputFile.replaceAll('.d.ts', '.dart'));
final configFile =
argResult['config'] as String? ?? p.join(p.current, 'webgen.yaml');
final defaultWebGenConfigPath = p.join(p.current, 'webgen.yaml');
final configFile = argResult['config'] as String? ??
(File(defaultWebGenConfigPath).existsSync()
? defaultWebGenConfigPath
: null);
final relativeOutputPath =
p.relative(outputFile, from: bindingsGeneratorPath);
// Run app with `node`.
Expand All @@ -73,7 +76,7 @@ $_usage''');
'--declaration',
'--input=${p.relative(inputFile, from: bindingsGeneratorPath)}',
'--output=$relativeOutputPath',
'--config=$configFile'
if (configFile case final config?) '--config=$config'
],
workingDirectory: bindingsGeneratorPath,
);
Expand All @@ -100,5 +103,5 @@ final _parser = ArgParser()
..addOption('config',
hide: true,
abbr: 'c',
help: 'The configuration file to use for this tool (NOTE: Unimplemented)')
..addFlag('help', negatable: false);
help:
'The configuration file to use for this tool (NOTE: Unimplemented)');
16 changes: 12 additions & 4 deletions web_generator/lib/src/ast/base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class ASTOptions {
}

sealed class Node {
abstract final String? name;
String? get name;
abstract final ID id;
String? get dartName;

Expand All @@ -53,15 +53,23 @@ sealed class Node {

abstract class Declaration extends Node {
@override
abstract final String name;
String get name;

set name(String newValue);

set dartName(String? newValue);

@override
Spec emit([covariant DeclarationOptions? options]);
}

abstract class NamedDeclaration extends Declaration {
ReferredType asReferredType([List<Type>? typeArgs]) =>
ReferredType(name: name, declaration: this, typeParams: typeArgs ?? []);
@override
abstract String name;

ReferredType asReferredType([List<Type>? typeArgs, String? url]) =>
ReferredType(
name: name, declaration: this, typeParams: typeArgs ?? [], url: url);
}

abstract interface class ExportableDeclaration extends Declaration {
Expand Down
24 changes: 15 additions & 9 deletions web_generator/lib/src/ast/declarations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ import 'types.dart';
sealed class TypeDeclaration extends NamedDeclaration
implements ExportableDeclaration {
@override
final String name;
String name;

@override
final String? dartName;
String? dartName;

@override
final bool exported;
Expand Down Expand Up @@ -160,17 +160,20 @@ class VariableDeclaration extends FieldDeclaration

@override
String? get dartName => null;

@override
set dartName(String? newValue) {}
}

enum VariableModifier { let, $const, $var }

class FunctionDeclaration extends CallableDeclaration
implements ExportableDeclaration {
@override
final String name;
String name;

@override
final String? dartName;
String? dartName;

@override
final List<ParameterDeclaration> parameters;
Expand Down Expand Up @@ -231,7 +234,7 @@ class FunctionDeclaration extends CallableDeclaration
class EnumDeclaration extends NamedDeclaration
implements ExportableDeclaration {
@override
final String name;
String name;

@override
final bool exported;
Expand Down Expand Up @@ -325,14 +328,14 @@ class EnumMember {
class TypeAliasDeclaration extends NamedDeclaration
implements ExportableDeclaration {
@override
final String name;
String name;

final List<GenericType> typeParameters;

final Type type;

@override
final String? dartName;
String? dartName;

@override
bool exported;
Expand Down Expand Up @@ -433,13 +436,13 @@ class InterfaceDeclaration extends TypeDeclaration {
class PropertyDeclaration extends FieldDeclaration
implements MemberDeclaration {
@override
final String name;
String name;

@override
final ID id;

@override
final String? dartName;
String? dartName;

@override
late final TypeDeclaration parent;
Expand Down Expand Up @@ -682,6 +685,9 @@ class OperatorDeclaration extends CallableDeclaration
@override
String get name => kind.expression;

@override
set name(String? name) {}

OperatorKind kind;

@override
Expand Down
11 changes: 7 additions & 4 deletions web_generator/lib/src/ast/types.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,21 @@ class ReferredType<T extends Declaration> extends Type {

List<Type> typeParams;

String? url;

ReferredType(
{required this.name,
required this.declaration,
this.typeParams = const []});
this.typeParams = const [],
this.url});

@override
Reference emit([TypeOptions? options]) {
// TODO: Support referred types imported from URL
return TypeReference((t) => t
..symbol = declaration.name
..symbol = declaration.dartName ?? declaration.name
..types.addAll(typeParams.map((t) => t.emit(options)))
..isNullable = options?.nullable);
..isNullable = options?.nullable
..url = url);
}
}

Expand Down
5 changes: 4 additions & 1 deletion web_generator/lib/src/dart_main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ Future<void> generateJSInteropBindings(Config config) async {
final jsDeclarations = parseDeclarationFiles(config.input);

// transform declarations
final dartDeclarations = transform(jsDeclarations, config: config);
final manager =
TransformerManager.fromParsedResults(jsDeclarations, config: config);

final dartDeclarations = manager.transform();

// generate
final generatedCodeMap = dartDeclarations.generate(config);
Expand Down
Loading