Skip to content

Commit 8d1f6ce

Browse files
committed
Add option to include ordinal keys in plz unparsers
This isn't used by either the pretty or inline plz unparsers, but makes it easier to experiment with alternative formats.
1 parent ac2c1b1 commit 8d1f6ce

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/language/unparsing/inline-plz.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import type { Atom, Molecule } from '../parsing.js'
33
import {
44
closeBrace,
55
comma,
6+
moleculeAsKeyValuePairStrings,
67
moleculeUnparser,
78
openBrace,
8-
sugarFreeMoleculeAsKeyValuePairStrings,
99
unparseAtom,
1010
} from './plz-utilities.js'
1111
import type { Notation } from './unparsing-utilities.js'
@@ -15,7 +15,9 @@ const unparseSugarFreeMolecule = (value: Molecule) => {
1515
return either.makeRight(openBrace + closeBrace)
1616
} else {
1717
return either.map(
18-
sugarFreeMoleculeAsKeyValuePairStrings(value, unparseAtomOrMolecule),
18+
moleculeAsKeyValuePairStrings(value, unparseAtomOrMolecule, {
19+
ordinalKeys: 'omit',
20+
}),
1921
keyValuePairsAsStrings =>
2022
openBrace
2123
.concat(' ')

src/language/unparsing/plz-utilities.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,10 @@ export const serializeIfNeeded = (
7878
? serialize(nodeOrMolecule)
7979
: either.makeRight(nodeOrMolecule)
8080

81-
export const sugarFreeMoleculeAsKeyValuePairStrings = (
81+
export const moleculeAsKeyValuePairStrings = (
8282
value: Molecule,
8383
unparseAtomOrMolecule: UnparseAtomOrMolecule,
84+
options: { readonly ordinalKeys: 'omit' | 'preserve' },
8485
): Either<UnserializableValueError, readonly string[]> => {
8586
const entries = Object.entries(value)
8687

@@ -93,7 +94,10 @@ export const sugarFreeMoleculeAsKeyValuePairStrings = (
9394
}
9495

9596
// Omit ordinal property keys:
96-
if (propertyKey === String(ordinalPropertyKeyCounter)) {
97+
if (
98+
propertyKey === String(ordinalPropertyKeyCounter) &&
99+
options.ordinalKeys === 'omit'
100+
) {
97101
keyValuePairsAsStrings.push(valueAsStringResult.value)
98102
ordinalPropertyKeyCounter += 1n
99103
} else {

src/language/unparsing/pretty-plz.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import either from '@matt.kantor/either'
22
import type { Atom, Molecule } from '../parsing.js'
33
import {
44
closeBrace,
5+
moleculeAsKeyValuePairStrings,
56
moleculeUnparser,
67
openBrace,
7-
sugarFreeMoleculeAsKeyValuePairStrings,
88
unparseAtom,
99
} from './plz-utilities.js'
1010
import { indent, type Notation } from './unparsing-utilities.js'
@@ -14,7 +14,9 @@ const unparseSugarFreeMolecule = (value: Molecule) => {
1414
return either.makeRight(openBrace + closeBrace)
1515
} else {
1616
return either.map(
17-
sugarFreeMoleculeAsKeyValuePairStrings(value, unparseAtomOrMolecule),
17+
moleculeAsKeyValuePairStrings(value, unparseAtomOrMolecule, {
18+
ordinalKeys: 'omit',
19+
}),
1820
keyValuePairsAsStrings =>
1921
openBrace
2022
.concat('\n')

0 commit comments

Comments
 (0)