diff --git a/packages/remark-stringify/lib/defaults.js b/packages/remark-stringify/lib/defaults.js index a9f153dc2..217ae7f28 100644 --- a/packages/remark-stringify/lib/defaults.js +++ b/packages/remark-stringify/lib/defaults.js @@ -11,6 +11,7 @@ module.exports = { tablePipeAlign: true, stringLength: stringLength, incrementListMarker: true, + tightDefinitions: false, fences: false, fence: '`', bullet: '-', diff --git a/packages/remark-stringify/lib/macro/block.js b/packages/remark-stringify/lib/macro/block.js index 359ea99be..3e7eb85ed 100644 --- a/packages/remark-stringify/lib/macro/block.js +++ b/packages/remark-stringify/lib/macro/block.js @@ -16,6 +16,7 @@ function block(node) { var options = self.options var fences = options.fences var gap = options.commonmark ? comment : triple + var definitionGap = options.tightDefinitions ? lineFeed : blank var values = [] var children = node.children var length = children.length @@ -42,6 +43,11 @@ function block(node) { (child.type === 'code' && !child.lang && !fences)) ) { values.push(gap) + } else if ( + previous.type === 'definition' && + child.type === 'definition' + ) { + values.push(definitionGap) } else { values.push(blank) } diff --git a/packages/remark-stringify/readme.md b/packages/remark-stringify/readme.md index 33b123d14..dfce3107e 100644 --- a/packages/remark-stringify/readme.md +++ b/packages/remark-stringify/readme.md @@ -207,6 +207,13 @@ Increment ordered list item numbers (`boolean`, default: `true`). When `false`, all list item numbers will be the same. +###### `options.tightDefinitions` + +Separate definitions with a single line feed (`boolean`, default: `false`). + +When `false`, definitions will have blank lines between them, similar to other +blocks. + ###### `options.rule` Marker to use for thematic breaks / horizontal rules (`'-'`, `'*'`, or `'_'`, diff --git a/packages/remark-stringify/test.js b/packages/remark-stringify/test.js index 037da6191..cc6becf2f 100644 --- a/packages/remark-stringify/test.js +++ b/packages/remark-stringify/test.js @@ -187,6 +187,17 @@ test('remark().stringify(ast, file)', function (t) { 'should throw when `options.incrementListMarker` is not a boolean' ) + t.throws( + function () { + unified() + .use(stringify) + .data('settings', {tightDefinitions: 'blank'}) + .stringify(empty()) + }, + /options\.tightDefinitions/, + 'should throw when `options.tightDefinitions` is not a boolean' + ) + t.throws( function () { unified() @@ -1259,6 +1270,27 @@ test('stringify escapes', function (t) { t.end() }) +test('definition separators', function (t) { + var tree = u('root', [ + u('definition', {identifier: 'foo', url: 'first'}), + u('definition', {identifier: 'bar', url: 'second'}) + ]) + + t.equal( + toString(tree, {tightDefinitions: false}), + '[foo]: first\n\n[bar]: second\n', + 'blank line between definitions' + ) + + t.equal( + toString(tree, {tightDefinitions: true}), + '[foo]: first\n[bar]: second\n', + 'no blank line between definitions' + ) + + t.end() +}) + function toString(value, options) { var tree = typeof value === 'string' ? u('text', value) : value diff --git a/packages/remark-stringify/types/index.d.ts b/packages/remark-stringify/types/index.d.ts index 44dc5103a..6cadfa8be 100644 --- a/packages/remark-stringify/types/index.d.ts +++ b/packages/remark-stringify/types/index.d.ts @@ -32,6 +32,7 @@ declare namespace remarkStringify { bullet: '-' | '*' | '+' listItemIndent: 'tab' | '1' | 'mixed' incrementListMarker: boolean + tightDefinitions: boolean rule: '-' | '_' | '*' ruleRepetition: number ruleSpaces: boolean