Skip to content

Commit

Permalink
feat: Add --indent option to CLI tool (#559)
Browse files Browse the repository at this point in the history
  • Loading branch information
danielbayley authored Jul 7, 2024
1 parent f685e1c commit e7c81fe
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 4 deletions.
1 change: 1 addition & 0 deletions docs/09_cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Usage:
Options:
--help, -h Show this message.
--json, -j Output JSON.
--indent 2 Output pretty-printed data, indented by the given number of spaces.

Additional options for bare "yaml" command:
--doc, -d Output pretty-printed JS Document objects.
Expand Down
13 changes: 9 additions & 4 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Usage:
Options:
--help, -h Show this message.
--json, -j Output JSON.
--indent 2 Output pretty-printed data, indented by the given number of spaces.
Additional options for bare "yaml" command:
--doc, -d Output pretty-printed JS Document objects.
Expand Down Expand Up @@ -55,6 +56,7 @@ export async function cli(
options: {
doc: { type: 'boolean', short: 'd' },
help: { type: 'boolean', short: 'h' },
indent: { type: 'string', short: 'i' },
json: { type: 'boolean', short: 'j' },
single: { type: 'boolean', short: '1' },
strict: { type: 'boolean', short: 's' },
Expand All @@ -71,6 +73,8 @@ export async function cli(
values: opt
} = args

let indent = Number(opt.indent)

stdin.setEncoding('utf-8')

// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
Expand All @@ -92,7 +96,7 @@ export async function cli(
})
stdin.on('end', () => {
for (const tok of lexer.lex('', false)) add(tok)
if (opt.json) console.log(JSON.stringify(data))
if (opt.json) console.log(JSON.stringify(data, null, indent))
done()
})
break
Expand All @@ -110,7 +114,7 @@ export async function cli(
})
stdin.on('end', () => {
for (const tok of parser.parse('', false)) add(tok)
if (opt.json) console.log(JSON.stringify(data))
if (opt.json) console.log(JSON.stringify(data, null, indent))
done()
})
break
Expand Down Expand Up @@ -159,7 +163,8 @@ export async function cli(
} else {
if (reqDocEnd) console.log('...')
try {
const str = String(doc)
indent ||= 2
const str = doc.toString({ indent })
console.log(str.endsWith('\n') ? str.slice(0, -1) : str)
} catch (error) {
done(error as Error)
Expand Down Expand Up @@ -188,7 +193,7 @@ export async function cli(
)
}
if (mode !== 'valid' && opt.json) {
console.log(JSON.stringify(opt.single ? data[0] : data))
console.log(JSON.stringify(opt.single ? data[0] : data, null, indent))
}
done()
})
Expand Down
88 changes: 88 additions & 0 deletions tests/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,94 @@ const skip = Number(major) < 20
['[{"hello":"world"},42]']
)
})
describe('--indent', () => {
ok(
'basic',
'hello:\n world: 2',
['--indent', '3'],
['hello:\n world: 2']
)
ok(
'--json',
'hello: world',
['--json', '--indent', '2'],
['[\n {\n "hello": "world"\n }\n]']
)
ok(
'--single',
'hello: world',
['--json', '--indent', '2', '--single'],
['{\n "hello": "world"\n}']
)
ok(
'multiple',
'hello: world\n---\n42',
['--json', '--indent', '2'],
['[\n {\n "hello": "world"\n },\n 42\n]']
)
ok(
'Lexer',
'hello: world',
['lex', '--json', '--indent', '2'],
['[\n "\\u0002",\n "\\u001f",\n "hello",\n ":",\n " ",\n "\\u001f",\n "world"\n]']
)
ok(
'CST parser',
'hello: world\n',
['cst', '--json', '--indent', '2'],
[JSON.stringify([
{
type: 'document',
offset: 0,
start: [],
value: {
type: 'block-map',
offset: 0,
indent: 0,
items: [
{
start: [],
key: {
type: 'scalar',
offset: 0,
indent: 0,
source: 'hello'
},
sep: [
{
type: 'map-value-ind',
offset: 5,
indent: 0,
source: ':'
},
{
type: "space",
offset: 6,
indent: 0,
source: ' '
}
],
value: {
type: 'scalar',
offset: 7,
indent: 0,
source: 'world',
end: [
{
type: 'newline',
offset: 12,
indent: 0,
source: '\n'
}
]
}
}
]
}
}
], null, 2)]
)
})
describe('--doc', () => {
ok('basic', 'hello: world', ['--doc'], [{ contents: { items: [{}] } }])
ok(
Expand Down

0 comments on commit e7c81fe

Please sign in to comment.