Skip to content

Commit 3d60be6

Browse files
committed
Fixes normal labeled construct end statements
1 parent dd94666 commit 3d60be6

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

syntaxes/fortran_free-form.tmLanguage.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1352,8 +1352,11 @@
13521352
"comment": "Introduced in the Fortran 1990 standard.",
13531353
"contentName": "meta.named-construct.fortran.modern",
13541354
"begin": "(?ix)([a-z]\\w*)\\s*(:)(?=\\s*(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)",
1355-
"end": "(?i)(?!\\s*\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)(?:\\b(\\1)\\b)?(?:\\s*([^\\s;!][^;!\\n]*?))?(?=\\s*[;!\\n])",
1355+
"end": "(?i)(?!\\s*\\b(?:associate|block(?!\\s*data)|critical|do|forall|if|select\\s*case|select\\s*type|select\\s*rank|where)\\b)(?:\\b(\\1)\\b)?([^\\s;!\\n]*?)?(?=\\s*[;!\\n])",
13561356
"endCaptures": {
1357+
"1": {
1358+
"name": "meta.label.end.name.fortran"
1359+
},
13571360
"2": {
13581361
"name": "invalid.error.named-control-constructs.fortran.modern"
13591362
}

test/resources/conditionals.f90

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,13 @@
4343
! stop
4444
if (1) stop
4545
if (1) stop label6
46-
if (1) stop "label"//"7"
46+
if (1) stop "label"//"7"
47+
48+
! do loop
49+
do i = 1, 10
50+
end do
51+
52+
! labelled do loop
53+
label8: do i = 1, 10
54+
end do label8
55+

test/resources/conditionals.f90.snap

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,42 @@
257257
# ^^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran keyword.other.concatination.fortran
258258
# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.begin.fortran
259259
# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran
260-
# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran
260+
# ^ source.fortran.free meta.statement.control.if.fortran meta.statement.control.stop.fortran string.quoted.double.fortran punctuation.definition.string.end.fortran
261+
>
262+
>! do loop
263+
#^ source.fortran.free comment.line.fortran
264+
# ^^^^^^^^ source.fortran.free comment.line.fortran
265+
>do i = 1, 10
266+
#^^ source.fortran.free meta.block.do.unlabeled.fortran keyword.control.do.fortran
267+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran
268+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran
269+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran
270+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran
271+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran
272+
# ^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
273+
# ^^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran
274+
# ^^ source.fortran.free meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
275+
>end do
276+
#^^^^^^ source.fortran.free meta.block.do.unlabeled.fortran keyword.control.enddo.fortran
277+
>
278+
>! labelled do loop
279+
#^ source.fortran.free comment.line.fortran
280+
# ^^^^^^^^^^^^^^^^^ source.fortran.free comment.line.fortran
281+
>label8: do i = 1, 10
282+
#^^^^^^^ source.fortran.free
283+
# ^ source.fortran.free meta.named-construct.fortran.modern
284+
# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran keyword.control.do.fortran
285+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran
286+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran
287+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran
288+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran
289+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran
290+
# ^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
291+
# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran
292+
# ^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
293+
>end do label8
294+
#^^^^^^ source.fortran.free meta.named-construct.fortran.modern meta.block.do.unlabeled.fortran keyword.control.enddo.fortran
295+
# ^ source.fortran.free meta.named-construct.fortran.modern
296+
# ^^^^^^ source.fortran.free meta.label.end.name.fortran
297+
>
298+
>

0 commit comments

Comments
 (0)