Skip to content

Commit

Permalink
#88, ClassStatementsGetter rewrite, part 4.
Browse files Browse the repository at this point in the history
  • Loading branch information
ajvincent committed Apr 5, 2024
1 parent 996eaf9 commit 51d08ae
Show file tree
Hide file tree
Showing 22 changed files with 334 additions and 171 deletions.
7 changes: 5 additions & 2 deletions dist/exports.js
Original file line number Diff line number Diff line change
Expand Up @@ -5490,6 +5490,7 @@ var ClassSupportsStatementsFlags;
ClassSupportsStatementsFlags[ClassSupportsStatementsFlags["ConstructorHeadStatements"] = 32] = "ConstructorHeadStatements";
ClassSupportsStatementsFlags[ClassSupportsStatementsFlags["ConstructorBodyStatements"] = 64] = "ConstructorBodyStatements";
ClassSupportsStatementsFlags[ClassSupportsStatementsFlags["ConstructorTailStatements"] = 128] = "ConstructorTailStatements";
ClassSupportsStatementsFlags[ClassSupportsStatementsFlags["All"] = 255] = "All";
})(ClassSupportsStatementsFlags || (ClassSupportsStatementsFlags = {}));
/** Convert type members to a class members map, including statements. */
class MemberedTypeToClass {
Expand Down Expand Up @@ -6053,7 +6054,8 @@ class MemberedTypeToClass {
if (getter.filterPropertyInitializer(key) === false)
continue;
const statement = getter.getPropertyInitializer(key);
this.#addStatementsToMap(key, [statement]);
if (statement)
this.#addStatementsToMap(key, [statement]);
break;
}
catch (ex) {
Expand All @@ -6076,7 +6078,8 @@ class MemberedTypeToClass {
if (getter.filterAccessorMirror(key) === false)
continue;
const statement = getter.getAccessorMirror(key);
this.#addStatementsToMap(key, [statement]);
if (statement)
this.#addStatementsToMap(key, [statement]);
break;
}
catch (ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
**Signature:**

```typescript
getAccessorMirror(key: MemberedStatementsKey): stringWriterOrStatementImpl;
getAccessorMirror(
key: MemberedStatementsKey,
): stringWriterOrStatementImpl | undefined;
```

## Parameters
Expand All @@ -18,5 +20,5 @@ getAccessorMirror(key: MemberedStatementsKey): stringWriterOrStatementImpl;

**Returns:**

[stringWriterOrStatementImpl](./ts-morph-structures.stringwriterorstatementimpl.md)
[stringWriterOrStatementImpl](./ts-morph-structures.stringwriterorstatementimpl.md) \| undefined

2 changes: 1 addition & 1 deletion docs/api/ts-morph-structures.classstatementsgetter.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ export interface ClassStatementsGetter
| Property | Modifiers | Type | Description |
| --- | --- | --- | --- |
| [keyword](./ts-morph-structures.classstatementsgetter.keyword.md) | | readonly string | |
| [supportsStatementFlags](./ts-morph-structures.classstatementsgetter.supportsstatementflags.md) | | readonly NonNegativeInteger | |
| [supportsStatementFlags](./ts-morph-structures.classstatementsgetter.supportsstatementflags.md) | | readonly number | |
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
**Signature:**

```typescript
supportsStatementFlags: readonly NonNegativeInteger;
supportsStatementFlags: readonly number;
```
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export declare enum ClassSupportsStatementsFlags
| Member | Value | Description |
| --- | --- | --- |
| AccessorMirror | <code>2</code> | |
| All | <code>255</code> | |
| BodyStatements | <code>8</code> | |
| ConstructorBodyStatements | <code>64</code> | |
| ConstructorHeadStatements | <code>32</code> | |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
```typescript
getPropertyInitializer(
key: MemberedStatementsKey,
): stringWriterOrStatementImpl;
): stringWriterOrStatementImpl | undefined;
```

## Parameters
Expand All @@ -20,5 +20,5 @@ getPropertyInitializer(

**Returns:**

[stringWriterOrStatementImpl](./ts-morph-structures.stringwriterorstatementimpl.md)
[stringWriterOrStatementImpl](./ts-morph-structures.stringwriterorstatementimpl.md) \| undefined

7 changes: 5 additions & 2 deletions stage_2_integration/source/toolbox/MemberedTypeToClass.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ export enum ClassSupportsStatementsFlags {
ConstructorHeadStatements = 1 << 5,
ConstructorBodyStatements = 1 << 6,
ConstructorTailStatements = 1 << 7,
All = ClassSupportsStatementsFlags.ConstructorTailStatements * 2 - 1,
}

/** Convert type members to a class members map, including statements. */
Expand Down Expand Up @@ -971,7 +972,8 @@ export default class MemberedTypeToClass {
if (getter.filterPropertyInitializer!(key) === false)
continue;
const statement = getter.getPropertyInitializer!(key);
this.#addStatementsToMap(key, [statement]);
if (statement)
this.#addStatementsToMap(key, [statement]);
break;
}
catch (ex) {
Expand Down Expand Up @@ -999,7 +1001,8 @@ export default class MemberedTypeToClass {
if (getter.filterAccessorMirror!(key) === false)
continue;
const statement = getter.getAccessorMirror!(key);
this.#addStatementsToMap(key, [statement]);
if (statement)
this.#addStatementsToMap(key, [statement]);
break;
}
catch (ex) {
Expand Down
10 changes: 3 additions & 7 deletions stage_2_integration/source/toolbox/types/toolbox.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ import type {
WriterFunction,
} from "ts-morph";

import {
NonNegativeInteger
} from "type-fest";

import type {
CallSignatureDeclarationImpl,
ConstructorDeclarationImpl,
Expand Down Expand Up @@ -132,12 +128,12 @@ export type stringWriterOrStatementImpl = stringOrWriterFunction | StatementStru

export interface PropertyInitializerGetter {
filterPropertyInitializer(key: MemberedStatementsKey): boolean;
getPropertyInitializer(key: MemberedStatementsKey): stringWriterOrStatementImpl;
getPropertyInitializer(key: MemberedStatementsKey): stringWriterOrStatementImpl | undefined;
}

export interface AccessorMirrorGetter {
filterAccessorMirror(key: MemberedStatementsKey): boolean;
getAccessorMirror(key: MemberedStatementsKey): stringWriterOrStatementImpl;
getAccessorMirror(key: MemberedStatementsKey): stringWriterOrStatementImpl | undefined;
}

export interface ClassHeadStatementsGetter {
Expand Down Expand Up @@ -176,5 +172,5 @@ Partial<ClassHeadStatementsGetter>, Partial<ClassBodyStatementsGetter>, Partial<
Partial<ConstructorHeadStatementsGetter>, Partial<ConstructorBodyStatementsGetter>, Partial<ConstructorTailStatementsGetter>
{
keyword: readonly string;
supportsStatementFlags: readonly NonNegativeInteger;
supportsStatementFlags: readonly number;
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ export enum ClassSupportsStatementsFlags {
ConstructorHeadStatements = 1 << 5,
ConstructorBodyStatements = 1 << 6,
ConstructorTailStatements = 1 << 7,
All = ClassSupportsStatementsFlags.ConstructorTailStatements * 2 - 1,
}

/** Convert type members to a class members map, including statements. */
Expand Down Expand Up @@ -1065,7 +1066,7 @@ export default class MemberedTypeToClass {
try {
if (getter.filterPropertyInitializer!(key) === false) continue;
const statement = getter.getPropertyInitializer!(key);
this.#addStatementsToMap(key, [statement]);
if (statement) this.#addStatementsToMap(key, [statement]);
break;
} catch (ex) {
errors.push(ex as Error);
Expand Down Expand Up @@ -1096,7 +1097,7 @@ export default class MemberedTypeToClass {
try {
if (getter.filterAccessorMirror!(key) === false) continue;
const statement = getter.getAccessorMirror!(key);
this.#addStatementsToMap(key, [statement]);
if (statement) this.#addStatementsToMap(key, [statement]);
break;
} catch (ex) {
errors.push(ex as Error);
Expand Down
10 changes: 5 additions & 5 deletions stage_2_snapshot/snapshot/source/toolbox/types/toolbox.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import type { Scope, WriterFunction } from "ts-morph";

import { NonNegativeInteger } from "type-fest";

import type {
CallSignatureDeclarationImpl,
ConstructorDeclarationImpl,
Expand Down Expand Up @@ -126,12 +124,14 @@ export interface PropertyInitializerGetter {
filterPropertyInitializer(key: MemberedStatementsKey): boolean;
getPropertyInitializer(
key: MemberedStatementsKey,
): stringWriterOrStatementImpl;
): stringWriterOrStatementImpl | undefined;
}

export interface AccessorMirrorGetter {
filterAccessorMirror(key: MemberedStatementsKey): boolean;
getAccessorMirror(key: MemberedStatementsKey): stringWriterOrStatementImpl;
getAccessorMirror(
key: MemberedStatementsKey,
): stringWriterOrStatementImpl | undefined;
}

export interface ClassHeadStatementsGetter {
Expand Down Expand Up @@ -186,5 +186,5 @@ export interface ClassStatementsGetter
Partial<ConstructorBodyStatementsGetter>,
Partial<ConstructorTailStatementsGetter> {
keyword: readonly string;
supportsStatementFlags: readonly NonNegativeInteger;
supportsStatementFlags: readonly number;
}
29 changes: 14 additions & 15 deletions stage_3_generation/build/fieldStatements/ArrayBooleanAndString.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,40 @@
import assert from "node:assert/strict";

import {
ClassFieldStatementsMap,
ClassSupportsStatementsFlags,
LiteralTypeStructureImpl,
type MemberedStatementsKey,
type PropertyInitializerGetter,
type stringWriterOrStatementImpl,
TypeStructureKind,
} from "#stage_two/snapshot/source/exports.js";
import { StructureKind } from "ts-morph";

import GetterFilter from "./GetterFilter.js";
import {
BaseClassModule,
} from "../../moduleClasses/exports.js";

import StatementGetterBase from "./GetterBase.js";

const booleanType = LiteralTypeStructureImpl.get("boolean");
const stringType = LiteralTypeStructureImpl.get("string");

export default
class ArrayBooleanAndString extends GetterFilter
class ArrayBooleanAndString
extends StatementGetterBase
implements PropertyInitializerGetter
{
readonly #isStructureModule: boolean;
constructor(
module: BaseClassModule,
isStructureModule: boolean
)
{
super(module);
super(module, "ArrayBooleanAndString", ClassSupportsStatementsFlags.PropertyInitializer);
this.#isStructureModule = isStructureModule;
}

accept(
key: MemberedStatementsKey
): boolean
{
if (key.statementGroupKey !== ClassFieldStatementsMap.GROUP_INITIALIZER_OR_PROPERTY)
return false;
filterPropertyInitializer(key: MemberedStatementsKey): boolean {
if (key.fieldType?.kind !== StructureKind.PropertySignature)
return false;
if (key.fieldType.hasQuestionToken)
Expand All @@ -49,18 +48,18 @@ class ArrayBooleanAndString extends GetterFilter
);
}

getStatements(
getPropertyInitializer(
key: MemberedStatementsKey
): stringWriterOrStatementImpl[]
): stringWriterOrStatementImpl | undefined
{
assert(key.fieldType?.kind === StructureKind.PropertySignature);
if (key.fieldType.typeStructure === booleanType)
return ["false"];
return "false";

if (key.fieldType.typeStructure === stringType) {
return this.#isStructureModule ? [] : [`""`];
return this.#isStructureModule ? undefined : `""`;
}

return ["[]"];
return "[]";
}
}
Loading

0 comments on commit 51d08ae

Please sign in to comment.