Skip to content

Commit 41984a9

Browse files
committed
JSON: Add support for merge conflict markers
1 parent 5ab71af commit 41984a9

File tree

4 files changed

+267
-0
lines changed

4 files changed

+267
-0
lines changed

Package/Sublime JSON/Sublime JSON.sublime-syntax

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,34 @@ contexts:
5656
scope: comment.line.double-slash.js
5757
captures:
5858
1: punctuation.definition.comment.json
59+
- include: merge-conflict-markers
5960

6061
only-comments:
6162
- include: comments
6263
- match: '[^/\s]+'
6364
scope: invalid.illegal.expected-comment-or-eof.sublime
6465

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

6688
#################################################
6789
# Any

Package/Sublime JSON/syntax_test_sublime_json.json

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,89 @@
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+
]

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: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,93 @@ 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
86173
}
87174

88175
not-a-comment // but this is

0 commit comments

Comments
 (0)