Skip to content

Commit

Permalink
chore: EnumMember#getStructure() no longer returns #value and wil…
Browse files Browse the repository at this point in the history
…l only return `#initializer`.

BREAKING CHANGE: `EnumMember#getStructure()` no longer returns the `#value` and will only return `#initializer`. `#value` should be seen as more of a convenience property for setting the initializer.
  • Loading branch information
dsherret committed Apr 14, 2019
1 parent 601f62c commit ed25348
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
4 changes: 4 additions & 0 deletions breaking-changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ Do the following:
fileTextChanges.forEach(change => change.applyChanges());
```

## `EnumMember#getStructure()` only returns the `initializer`

Previously it would return both the `initializer` and `value`. `value` should be seen as more of a convenience property for setting the initializer.

## Version 1

Renamed library to `ts-morph` and reset version to 1.0.0.
Expand Down
5 changes: 3 additions & 2 deletions src/compiler/ast/enum/EnumMember.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export class EnumMember extends EnumMemberBase<ts.EnumMember> {

if (structure.value != null)
this.setValue(structure.value);
else if (structure.hasOwnProperty(nameof(structure.value)))
else if (structure.hasOwnProperty(nameof(structure.value)) && structure.initializer == null)
this.removeInitializer();

return this;
Expand All @@ -68,7 +68,8 @@ export class EnumMember extends EnumMemberBase<ts.EnumMember> {
*/
getStructure() {
return callBaseGetStructure<EnumMemberSpecificStructure>(EnumMemberBase.prototype, this, {
value: this.hasInitializer() ? this.getValue() : undefined
// never return the value, only return the initializer
value: undefined
}) as EnumMemberStructure;
}
}
1 change: 1 addition & 0 deletions src/structures/enum/EnumMemberStructure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ export interface EnumMemberStructure
}

export interface EnumMemberSpecificStructure {
/** Convenience property for setting the initializer. */
value?: number | string;
}
10 changes: 8 additions & 2 deletions src/tests/compiler/ast/enum/enumMemberTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ describe(nameof(EnumMember), () => {
});

describe(nameof<EnumMember>(d => d.set), () => {
function doTest(code: string, structure: Partial<EnumMemberSpecificStructure>, expectedCode: string) {
function doTest(code: string, structure: Partial<EnumMemberStructure>, expectedCode: string) {
const { firstEnumMember, sourceFile } = getInfoFromTextWithFirstMember(code);
firstEnumMember.set(structure);
expect(sourceFile.getFullText()).to.equal(expectedCode);
Expand All @@ -98,6 +98,10 @@ describe(nameof(EnumMember), () => {
doTest("enum Identifier { member = 5 }", { value: undefined }, "enum Identifier { member }");
});

it("should not remove the initializer when providing an initializer and undefined value", () => {
doTest("enum Identifier { member = 5 }", { initializer: "6", value: undefined }, "enum Identifier { member = 6 }");
});

it("should change when specifying", () => {
const structure: MakeRequired<EnumMemberSpecificStructure> = {
value: 5
Expand All @@ -112,6 +116,8 @@ describe(nameof(EnumMember), () => {
expect(firstEnumMember.getStructure()).to.deep.equal(expected);
}

// Note: Ensure `initializer` always exists, because people may assign identifiers
// to enum members (ex. `enum Enum { member = myValue }`).
it("should get structure from an empty enum member", () => {
doTest("enum a { member }", {
name: "member",
Expand All @@ -132,7 +138,7 @@ enum b {
name: "\'str\'",
initializer: "3.14",
docs: [{ description: "Test" }],
value: 3.14
value: undefined
});
});
});
Expand Down

0 comments on commit ed25348

Please sign in to comment.