Skip to content

Commit 28b7368

Browse files
authored
fix(Lists): enable tight lists by default to eliminate unnecessary spacing (#826)
1 parent 93a97b6 commit 28b7368

File tree

3 files changed

+59
-18
lines changed

3 files changed

+59
-18
lines changed

src/extensions/markdown/Lists/Lists.test.ts

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ const {doc, p, li, ul, ol} = builders<'doc' | 'p' | 'li' | 'ul' | 'ol'>(schema,
2525
const {same} = createMarkupChecker({parser, serializer});
2626

2727
describe('Lists extension', () => {
28-
it('should parse bullet list', () => {
28+
it('should parse bullet list (tight)', () => {
2929
same(
30-
'* one\n\n* two',
30+
'* one\n* two',
3131
doc(
3232
ul(
3333
{[ListsAttr.Markup]: '*'},
@@ -38,21 +38,47 @@ describe('Lists extension', () => {
3838
);
3939
});
4040

41-
it('should parse ordered list with dots', () => {
41+
it('should parse bullet list (non tight)', () => {
42+
same(
43+
'* one\n\n* two',
44+
doc(
45+
ul(
46+
{[ListsAttr.Markup]: '*', [ListsAttr.Tight]: false},
47+
li({[ListsAttr.Markup]: '*'}, p('one')),
48+
li({[ListsAttr.Markup]: '*'}, p('two')),
49+
),
50+
),
51+
);
52+
});
53+
54+
it('should parse ordered list with dots (tight)', () => {
55+
same(
56+
'1. one\n2. two',
57+
doc(
58+
ol(
59+
li({[ListsAttr.Markup]: '.'}, p('one')),
60+
li({[ListsAttr.Markup]: '.'}, p('two')),
61+
),
62+
),
63+
);
64+
});
65+
66+
it('should parse ordered list with dots (non tight)', () => {
4267
same(
4368
'1. one\n\n2. two',
4469
doc(
4570
ol(
71+
{[ListsAttr.Tight]: false},
4672
li({[ListsAttr.Markup]: '.'}, p('one')),
4773
li({[ListsAttr.Markup]: '.'}, p('two')),
4874
),
4975
),
5076
);
5177
});
5278

53-
it('should parse ordered list with parenthesis', () => {
79+
it('should parse ordered list with parenthesis (tight)', () => {
5480
same(
55-
'1) one\n\n2) two',
81+
'1) one\n2) two',
5682
doc(
5783
ol(
5884
{[ListsAttr.Markup]: ')'},
@@ -63,6 +89,19 @@ describe('Lists extension', () => {
6389
);
6490
});
6591

92+
it('should parse ordered list with parenthesis (non tight)', () => {
93+
same(
94+
'1) one\n\n2) two',
95+
doc(
96+
ol(
97+
{[ListsAttr.Markup]: ')', [ListsAttr.Tight]: false},
98+
li({[ListsAttr.Markup]: ')'}, p('one')),
99+
li({[ListsAttr.Markup]: ')'}, p('two')),
100+
),
101+
),
102+
);
103+
});
104+
66105
it('should parse nested lists', () => {
67106
const markup = `
68107
- one
@@ -80,11 +119,12 @@ describe('Lists extension', () => {
80119
markup,
81120
doc(
82121
ul(
83-
{[ListsAttr.Markup]: '-'},
122+
{[ListsAttr.Markup]: '-', [ListsAttr.Tight]: false},
84123
li(
85124
{[ListsAttr.Markup]: '-'},
86125
p('one'),
87126
ol(
127+
{[ListsAttr.Tight]: false},
88128
li(
89129
{[ListsAttr.Markup]: '.'},
90130
p('two'),
@@ -110,15 +150,15 @@ describe('Lists extension', () => {
110150
'- + * 2. item',
111151
doc(
112152
ul(
113-
{[ListsAttr.Markup]: '-'},
153+
{[ListsAttr.Markup]: '-', [ListsAttr.Tight]: false},
114154
li(
115155
{[ListsAttr.Markup]: '-'},
116156
ul(
117-
{[ListsAttr.Markup]: '+'},
157+
{[ListsAttr.Markup]: '+', [ListsAttr.Tight]: false},
118158
li(
119159
{[ListsAttr.Markup]: '+'},
120160
ul(
121-
{[ListsAttr.Markup]: '*'},
161+
{[ListsAttr.Markup]: '*', [ListsAttr.Tight]: false},
122162
li(
123163
{[ListsAttr.Markup]: '*'},
124164
ol(

src/extensions/markdown/Lists/ListsSpecs/schema.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {ListNode, ListsAttr, Markup} from './const';
55
export const schemaSpecs: Record<ListNode, NodeSpec> = {
66
[ListNode.ListItem]: {
77
attrs: {
8-
[ListsAttr.Tight]: {default: false},
98
[ListsAttr.Markup]: {default: null},
109
},
1110
content: '(paragraph|block)+',
@@ -24,7 +23,7 @@ export const schemaSpecs: Record<ListNode, NodeSpec> = {
2423
content: `${ListNode.ListItem}+`,
2524
group: 'block',
2625
attrs: {
27-
[ListsAttr.Tight]: {default: false},
26+
[ListsAttr.Tight]: {default: true},
2827
[ListsAttr.Markup]: {default: Markup.bullet.default},
2928
},
3029
parseDOM: [
@@ -46,7 +45,7 @@ export const schemaSpecs: Record<ListNode, NodeSpec> = {
4645
[ListNode.OrderedList]: {
4746
attrs: {
4847
[ListsAttr.Order]: {default: 1},
49-
[ListsAttr.Tight]: {default: false},
48+
[ListsAttr.Tight]: {default: true},
5049
[ListsAttr.Markup]: {default: Markup.ordered.default},
5150
},
5251
content: `${ListNode.ListItem}+`,

src/extensions/markdown/Lists/plugins/MergeListsPlugin.test.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,16 @@ const nestedListsMarkup = `
3232
* Very easy!
3333
`;
3434

35-
const orderedListMarkup = `
35+
const orderedListMarkup1 = `
3636
1. Create a list by starting a line with \`+\`, \`-\`, or \`*\`
3737
2. Sub-lists are made by indenting 2 spaces:
3838
1. Marker character change forces new list start:
3939
2. Ac tristique libero volutpat at
4040
3. Facilisis in pretium nisl aliquet
4141
4. Nulla volutpat aliquam velit
42+
`;
4243

44+
const orderedListMarkup2 = `
4345
1. Very easy!
4446
2. Very easy!
4547
`;
@@ -106,16 +108,16 @@ describe('Lists extension', () => {
106108
state: EditorState.create({schema, plugins: [mergeListsPlugin()]}),
107109
});
108110
view.dispatch(
109-
view.state.tr.replaceWith(
110-
0,
111-
view.state.doc.nodeSize - 2,
112-
markupParser.parse(orderedListMarkup).content,
113-
),
111+
view.state.tr.replaceWith(0, view.state.doc.nodeSize - 2, [
112+
markupParser.parse(orderedListMarkup1).firstChild!,
113+
markupParser.parse(orderedListMarkup2).firstChild!,
114+
]),
114115
);
115116
expect(view.state.doc).toMatchNode(
116117
doc(
117118
ol(
118119
{
120+
[ListsAttr.Tight]: true,
119121
[ListsAttr.Markup]: '.',
120122
},
121123
li(

0 commit comments

Comments
 (0)