🤖 Merge PR #47643 fix(webidl2): Fix IDLInterfaceMixinMemberType by @ExE-Boss

This commit is contained in:
ExE Boss 2020-09-16 20:04:29 +02:00 committed by GitHub
parent 36caac5d51
commit 95a341b0b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 160 additions and 67 deletions

View File

@ -29,11 +29,7 @@ export type IDLInterfaceMemberType =
| DeclarationMemberType
| OperationMemberType;
export type IDLInterfaceMixinMemberType =
| AttributeMemberType
| ConstantMemberType
| (DeclarationMemberType & { type: "stringifier" })
| OperationMemberType;
export type IDLInterfaceMixinMemberType = AttributeMemberType | ConstantMemberType | OperationMemberType;
export type IDLNamespaceMemberType = AttributeMemberType | OperationMemberType;

View File

@ -13,30 +13,35 @@ for (const rootType of parsed) {
switch (rootType.type) {
case "interface mixin":
rootType; // $ExpectType InterfaceMixinType
logMembers(rootType.members);
console.log(rootType.partial);
logInterfaceMixinMembers(rootType.members);
break;
case "interface":
rootType; // $ExpectType InterfaceType
console.log(rootType.inheritance);
logMembers(rootType.members);
console.log(rootType.partial);
logInterfaceMembers(rootType.members);
break;
case "namespace":
rootType; // $ExpectType NamespaceType
console.log(rootType.partial);
logNamespaceMembers(rootType.members);
break;
case "callback interface":
rootType; // $ExpectType CallbackInterfaceType
console.log(rootType.inheritance);
logMembers(rootType.members);
console.log(rootType.partial);
logCallbackInterfaceMembers(rootType.members);
break;
case "callback":
rootType; // $ExpectType CallbackType
logArguments(rootType.arguments);
break;
case "dictionary":
rootType; // $ExpectType DictionaryType
console.log(rootType.inheritance);
@ -49,6 +54,7 @@ for (const rootType of parsed) {
}
}
break;
case "enum":
rootType; // $ExpectType EnumType
for (const v of rootType.values) {
@ -56,15 +62,18 @@ for (const rootType of parsed) {
console.log(v.value);
}
break;
case "typedef":
rootType; // $ExpectType TypedefType
logIdlType(rootType.idlType);
break;
case "includes":
rootType; // $ExpectType IncludesType
console.log(rootType.target);
console.log(rootType.includes);
break;
default:
rootType; // $ExpectType never
break;
@ -74,73 +83,145 @@ for (const rootType of parsed) {
logExtAttrs(rootType.extAttrs);
}
function logMembers(members: webidl2.IDLInterfaceMemberType[]) {
function logInterfaceMembers(members: webidl2.IDLInterfaceMemberType[]) {
for (const member of members) {
switch (member.type) {
case "constructor":
member; // $ExpectType ConstructorMemberType
member.parent; // $ExpectType InterfaceType
logArguments(member.arguments);
break;
case "operation":
member; // $ExpectType OperationMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType | NamespaceType
logNamespaceMember(member);
break;
case "attribute":
member; // $ExpectType AttributeMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType | NamespaceType
logNamespaceMember(member);
break;
case "const":
member; // $ExpectType ConstantMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType
console.log(member.name);
logIdlType(member.idlType);
logValueDescription(member.value);
console.log(member.nullable);
break;
case "iterable":
member; // $ExpectType IterableDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType boolean
member.readonly; // $ExpectType false
member.idlType; // $ExpectType [IDLTypeDescription] | [IDLTypeDescription, IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType Argument[]
logArguments(member.arguments);
break;
case "maplike":
member; // $ExpectType MaplikeDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType false
member.readonly; // $ExpectType boolean
member.idlType; // $ExpectType [IDLTypeDescription, IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType []
logArguments(member.arguments);
break;
case "setlike":
member; // $ExpectType SetlikeDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType false
member.readonly; // $ExpectType boolean
member.idlType; // $ExpectType [IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType []
logArguments(member.arguments);
break;
default:
member; // $ExpectType never
break;
}
logInterfaceMember(member);
logExtAttrs(member.extAttrs);
}
}
function logInterfaceMember(member: webidl2.IDLInterfaceMemberType) {
switch (member.type) {
case "constructor":
member; // $ExpectType ConstructorMemberType
member.parent; // $ExpectType InterfaceType
logArguments(member.arguments);
break;
case "operation":
member; // $ExpectType OperationMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType | NamespaceType
logInterfaceMixinMember(member);
break;
case "attribute":
member; // $ExpectType AttributeMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType | NamespaceType
logInterfaceMixinMember(member);
break;
case "const":
member; // $ExpectType ConstantMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType
logInterfaceMixinMember(member);
break;
case "iterable":
member; // $ExpectType IterableDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType boolean
member.readonly; // $ExpectType false
member.idlType; // $ExpectType [IDLTypeDescription] | [IDLTypeDescription, IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType Argument[]
logArguments(member.arguments);
break;
case "maplike":
member; // $ExpectType MaplikeDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType false
member.readonly; // $ExpectType boolean
member.idlType; // $ExpectType [IDLTypeDescription, IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType []
logArguments(member.arguments);
break;
case "setlike":
member; // $ExpectType SetlikeDeclarationMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType
member.async; // $ExpectType false
member.readonly; // $ExpectType boolean
member.idlType; // $ExpectType [IDLTypeDescription]
member.idlType.forEach(logIdlType);
member.arguments; // $ExpectType []
logArguments(member.arguments);
break;
default:
member; // $ExpectType never
break;
}
}
function logInterfaceMixinMembers(members: webidl2.IDLInterfaceMixinMemberType[]) {
for (const member of members) {
logInterfaceMixinMember(member);
logExtAttrs(member.extAttrs);
}
}
function logInterfaceMixinMember(member: webidl2.IDLInterfaceMixinMemberType) {
switch (member.type) {
case "operation":
member; // $ExpectType OperationMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType | NamespaceType
logCallbackInterfaceMember(member);
break;
case "attribute":
member; // $ExpectType AttributeMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType | NamespaceType
logNamespaceMember(member);
break;
case "const":
member; // $ExpectType ConstantMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType
logCallbackInterfaceMember(member);
break;
default:
member; // $ExpectType never
break;
}
}
function logCallbackInterfaceMembers(members: webidl2.IDLCallbackInterfaceMemberType[]) {
for (const member of members) {
logCallbackInterfaceMember(member);
logExtAttrs(member.extAttrs);
}
}
function logCallbackInterfaceMember(member: webidl2.IDLCallbackInterfaceMemberType) {
switch (member.type) {
case "operation":
member; // $ExpectType OperationMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType | NamespaceType
logNamespaceMember(member);
break;
case "const":
member; // $ExpectType ConstantMemberType
member.parent; // $ExpectType CallbackInterfaceType | InterfaceMixinType | InterfaceType
console.log(member.name);
logIdlType(member.idlType);
logValueDescription(member.value);
console.log(member.nullable);
break;
default:
member; // $ExpectType never
break;
}
}
function logNamespaceMembers(members: webidl2.IDLNamespaceMemberType[]) {
for (const member of members) {
logNamespaceMember(member);
logExtAttrs(member.extAttrs);
}
}
@ -153,12 +234,14 @@ function logNamespaceMember(member: webidl2.IDLNamespaceMemberType) {
console.log(member.name);
console.log(member.special);
break;
case "attribute":
member; // $ExpectType AttributeMemberType
member.parent; // $ExpectType InterfaceMixinType | InterfaceType | NamespaceType
console.log(member.name);
console.log(member.special, member.readonly, member.inherit);
break;
default:
member; // $ExpectType never
break;
@ -184,12 +267,14 @@ function logExtAttr(extAttr: webidl2.ExtendedAttribute) {
rhs.value; // $ExpectType string
logExtAttrRHS(rhs);
break;
case "identifier-list":
case "string-list":
case "decimal-list":
case "integer-list":
logExtAttrRHSList(rhs);
break;
default:
rhs; // $ExpectType never
break;
@ -245,6 +330,10 @@ function logIdlType(idlType: webidl2.IDLTypeDescription) {
case "record":
idlType.idlType.length; // $ExpectType 2
break;
default:
idlType; // $ExpectType never
break;
}
} else {
idlType; // $ExpectType SingleTypeDescription
@ -262,36 +351,44 @@ function logValueDescription(valueDesc: webidl2.ValueDescription) {
valueDesc.value; // $ExpectType string
console.log(valueDesc.value);
break;
case "number":
valueDesc; // $ExpectType ValueDescriptionNumber
valueDesc.value; // $ExpectType string
console.log(valueDesc.value);
break;
case "boolean":
valueDesc; // $ExpectType ValueDescriptionBoolean
valueDesc.value; // $ExpectType boolean
console.log(valueDesc.value);
break;
case "null":
valueDesc; // $ExpectType ValueDescriptionNull
break;
case "Infinity":
valueDesc; // $ExpectType ValueDescriptionInfinity
valueDesc.negative; // $ExpectType boolean
console.log(valueDesc.negative);
break;
case "NaN":
valueDesc; // $ExpectType ValueDescriptionNaN
break;
case "sequence":
valueDesc; // $ExpectType ValueDescriptionSequence
valueDesc.value; // $ExpectType []
valueDesc.value.length; // $ExpectType 0
console.log(valueDesc.value);
break;
case "dictionary":
valueDesc; // $ExpectType ValueDescriptionDictionary
break;
default:
valueDesc; // $ExpectType never
break;