Skip to content

Commit 413f19f

Browse files
authored
JSON: Add support for merge conflict markers (#416)
1 parent 5ab71af commit 413f19f

File tree

4 files changed

+314
-0
lines changed

4 files changed

+314
-0
lines changed

Package/Sublime JSON/Sublime JSON.sublime-syntax

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,39 @@ contexts:
5252
- match: \*/
5353
scope: punctuation.definition.comment.end.json
5454
pop: true
55+
- include: merge-conflict-markers
5556
- match: (//).*$\n?
5657
scope: comment.line.double-slash.js
5758
captures:
5859
1: punctuation.definition.comment.json
60+
- include: merge-conflict-markers
5961

6062
only-comments:
6163
- include: comments
6264
- match: '[^/\s]+'
6365
scope: invalid.illegal.expected-comment-or-eof.sublime
6466

67+
#################################################
68+
# Merge Conflict Markers
69+
#################################################
70+
71+
merge-conflict-markers:
72+
# see also: Diff.sublime-syntax#conflict-markers
73+
- match: ^(<{7})(?:\s+(\S.*?))?$\n?
74+
scope: meta.block.conflict.begin.diff
75+
captures:
76+
1: punctuation.section.block.begin.diff
77+
2: entity.name.section.diff
78+
- match: ^(>{7})(?:\s+(\S.*?))?$\n?
79+
scope: meta.block.conflict.end.diff
80+
captures:
81+
1: punctuation.section.block.end.diff
82+
2: entity.name.section.diff
83+
- match: ^(\|{7}|={7})(?:\s+(\S.*?))?$\n?
84+
scope: meta.block.conflict.separator.diff
85+
captures:
86+
1: punctuation.section.block.diff
87+
2: entity.name.section.diff
6588

6689
#################################################
6790
# Any

Package/Sublime JSON/syntax_test_sublime_json.json

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,111 @@
8888
// ^^^^^^^^^^^^ meta.mapping.value.json meta.mapping - meta.mapping meta.mapping meta.mapping
8989
// ^^^^ meta.mapping.value.json meta.mapping.key.json string.quoted.double.json
9090
//
91+
92+
/*
93+
* Merge Conflict Marker Tests
94+
*/
95+
96+
<<<<<<< HEAD
97+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
98+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
99+
// ^ meta.block.conflict.begin.diff - entity - punctuation
100+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
101+
// ^ meta.block.conflict.begin.diff - entity - punctuation
102+
103+
=======
104+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
105+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
106+
// ^ meta.block.conflict.separator.diff - punctuation
107+
108+
>>>>>>> master
109+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
110+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
111+
// ^ meta.block.conflict.end.diff - entity - punctuation
112+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
113+
// ^ meta.block.conflict.end.diff - entity - punctuation
114+
115+
{ /* Merge conflictes in objects */
116+
<<<<<<< HEAD
117+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
118+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
119+
// ^ meta.block.conflict.begin.diff - entity - punctuation
120+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
121+
// ^ meta.block.conflict.begin.diff - entity - punctuation
122+
123+
=======
124+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
125+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
126+
// ^ meta.block.conflict.separator.diff - punctuation
127+
128+
>>>>>>> master
129+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
130+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
131+
// ^ meta.block.conflict.end.diff - entity - punctuation
132+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
133+
// ^ meta.block.conflict.end.diff - entity - punctuation
134+
135+
"key":
136+
// ^^^^^ meta.mapping.key.json string.quoted.double.json
137+
<<<<<<< HEAD
138+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
139+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
140+
// ^ meta.block.conflict.begin.diff - entity - punctuation
141+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
142+
// ^ meta.block.conflict.begin.diff - entity - punctuation
143+
"value"
144+
// ^^^^^^^ meta.mapping.value.json string.quoted.double.json
145+
=======
146+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
147+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
148+
// ^ meta.block.conflict.separator.diff - punctuation
149+
150+
>>>>>>> master
151+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
152+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
153+
// ^ meta.block.conflict.end.diff - entity - punctuation
154+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
155+
}
156+
157+
[ /* Merge conflictes in lists */
158+
<<<<<<< HEAD
159+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
160+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
161+
// ^ meta.block.conflict.begin.diff - entity - punctuation
162+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
163+
// ^ meta.block.conflict.begin.diff - entity - punctuation
164+
165+
=======
166+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
167+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
168+
// ^ meta.block.conflict.separator.diff - punctuation
169+
170+
>>>>>>> master
171+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
172+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
173+
// ^ meta.block.conflict.end.diff - entity - punctuation
174+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
175+
// ^ meta.block.conflict.end.diff - entity - punctuation
176+
]
177+
178+
/* Merge conflicts in comments
179+
180+
<<<<<<< HEAD
181+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
182+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
183+
// ^ meta.block.conflict.begin.diff - entity - punctuation
184+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
185+
// ^ meta.block.conflict.begin.diff - entity - punctuation
186+
187+
=======
188+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
189+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
190+
// ^ meta.block.conflict.separator.diff - punctuation
191+
192+
>>>>>>> master
193+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
194+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
195+
// ^ meta.block.conflict.end.diff - entity - punctuation
196+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
197+
// ^ meta.block.conflict.end.diff - entity - punctuation
198+
*/

Package/Sublime Text Commands/syntax_test_commands.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,78 @@
5151
abc
5252
// ^^^ invalid.illegal.expected-mapping.sublime-commands
5353

54+
/*
55+
* Merge Conflict Marker Tests
56+
*/
57+
58+
<<<<<<< HEAD
59+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
60+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
61+
// ^ meta.block.conflict.begin.diff - entity - punctuation
62+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
63+
// ^ meta.block.conflict.begin.diff - entity - punctuation
64+
65+
=======
66+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
67+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
68+
// ^ meta.block.conflict.separator.diff - punctuation
69+
70+
>>>>>>> master
71+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
72+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
73+
// ^ meta.block.conflict.end.diff - entity - punctuation
74+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
75+
// ^ meta.block.conflict.end.diff - entity - punctuation
76+
77+
{ /* Merge conflictes in objects */
78+
<<<<<<< HEAD
79+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
80+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
81+
// ^ meta.block.conflict.begin.diff - entity - punctuation
82+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
83+
// ^ meta.block.conflict.begin.diff - entity - punctuation
84+
85+
=======
86+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
87+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
88+
// ^ meta.block.conflict.separator.diff - punctuation
89+
90+
>>>>>>> master
91+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
92+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
93+
// ^ meta.block.conflict.end.diff - entity - punctuation
94+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
95+
// ^ meta.block.conflict.end.diff - entity - punctuation
96+
97+
"args": {
98+
"list": [
99+
<<<<<<< HEAD
100+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
101+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
102+
// ^ meta.block.conflict.begin.diff - entity - punctuation
103+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
104+
// ^ meta.block.conflict.begin.diff - entity - punctuation
105+
"ours",
106+
// ^^^^^^ string.quoted.double.json
107+
// ^ punctuation.definition.string.begin.json
108+
// ^ punctuation.definition.string.end.json
109+
=======
110+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
111+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
112+
// ^ meta.block.conflict.separator.diff - punctuation
113+
"theirs",
114+
// ^^^^^^^^ string.quoted.double.json
115+
// ^ punctuation.definition.string.begin.json
116+
// ^ punctuation.definition.string.end.json
117+
>>>>>>> master
118+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
119+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
120+
// ^ meta.block.conflict.end.diff - entity - punctuation
121+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
122+
// ^ meta.block.conflict.end.diff - entity - punctuation
123+
]
124+
}
125+
}
54126
]
55127
,[]//fgfg
56128
// <- - invalid.illegal

Package/Sublime Text Settings/syntax_test_settings.json

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,118 @@ s
8383

8484
, // but not two consecutive commas
8585
// ^ invalid.illegal.expected-key.json
86+
87+
88+
/*
89+
* Merge Conflict Marker Tests
90+
*/
91+
92+
<<<<<<< HEAD
93+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
94+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
95+
// ^ meta.block.conflict.begin.diff - entity - punctuation
96+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
97+
// ^ meta.block.conflict.begin.diff - entity - punctuation
98+
99+
=======
100+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
101+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
102+
// ^ meta.block.conflict.separator.diff - punctuation
103+
104+
>>>>>>> master
105+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
106+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
107+
// ^ meta.block.conflict.end.diff - entity - punctuation
108+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
109+
// ^ meta.block.conflict.end.diff - entity - punctuation
110+
111+
"dict": { /* Merge conflictes in objects */
112+
<<<<<<< HEAD
113+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
114+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
115+
// ^ meta.block.conflict.begin.diff - entity - punctuation
116+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
117+
// ^ meta.block.conflict.begin.diff - entity - punctuation
118+
119+
=======
120+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
121+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
122+
// ^ meta.block.conflict.separator.diff - punctuation
123+
124+
>>>>>>> master
125+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
126+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
127+
// ^ meta.block.conflict.end.diff - entity - punctuation
128+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
129+
// ^ meta.block.conflict.end.diff - entity - punctuation
130+
}
131+
132+
"list": [ /* Merge conflictes in lists */
133+
<<<<<<< HEAD
134+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
135+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
136+
// ^ meta.block.conflict.begin.diff - entity - punctuation
137+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
138+
// ^ meta.block.conflict.begin.diff - entity - punctuation
139+
140+
=======
141+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
142+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
143+
// ^ meta.block.conflict.separator.diff - punctuation
144+
145+
>>>>>>> master
146+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
147+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
148+
// ^ meta.block.conflict.end.diff - entity - punctuation
149+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
150+
// ^ meta.block.conflict.end.diff - entity - punctuation
151+
]
152+
153+
"scalar":
154+
// ^^^^^^^^ meta.mapping.key.json string.quoted.double.json
155+
<<<<<<< HEAD
156+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
157+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
158+
// ^ meta.block.conflict.begin.diff - entity - punctuation
159+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
160+
// ^ meta.block.conflict.begin.diff - entity - punctuation
161+
"value",
162+
// ^^^^^^^ meta.mapping.value.json string.quoted.double.json
163+
=======
164+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
165+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
166+
// ^ meta.block.conflict.separator.diff - punctuation
167+
168+
>>>>>>> master
169+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
170+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
171+
// ^ meta.block.conflict.end.diff - entity - punctuation
172+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
173+
174+
/* Merge conflicts in comments
175+
176+
<<<<<<< HEAD
177+
// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
178+
//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
179+
// ^ meta.block.conflict.begin.diff - entity - punctuation
180+
// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
181+
// ^ meta.block.conflict.begin.diff - entity - punctuation
182+
183+
=======
184+
// <- meta.block.conflict.separator.diff punctuation.section.block.diff
185+
//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
186+
// ^ meta.block.conflict.separator.diff - punctuation
187+
188+
>>>>>>> master
189+
// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
190+
//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
191+
// ^ meta.block.conflict.end.diff - entity - punctuation
192+
// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
193+
// ^ meta.block.conflict.end.diff - entity - punctuation
194+
*/
195+
86196
}
197+
// <- meta.settings-mapping.sublime-settings meta.mapping.json punctuation.section.mapping.end.json
87198

88199
not-a-comment // but this is
89200
// <- invalid.illegal.expected-comment-or-eof.sublime

0 commit comments

Comments
 (0)