diff --git a/OCaml/OCaml.sublime-syntax b/OCaml/OCaml.sublime-syntax index 01c4a36824..f774cc7487 100644 --- a/OCaml/OCaml.sublime-syntax +++ b/OCaml/OCaml.sublime-syntax @@ -516,11 +516,14 @@ contexts: - include: variables - include: main module-signature: - - match: '(val)\s+([a-z_][a-zA-Z0-9_'']*)\s*(:)' + - match: '(val)\s+(?:([a-z_][a-zA-Z0-9_'']*)|(\()([^\s)]+)(\)))\s*(:)' captures: 1: keyword.other.ocaml 2: entity.name.type.value-signature.ocaml - 3: punctuation.separator.type-constraint.ocaml + 3: punctuation.section.parens.begin.ocaml + 4: entity.name.type.value-signature.ocaml + 5: punctuation.section.parens.end.ocaml + 6: punctuation.separator.type-constraint.ocaml push: - meta_scope: meta.module.signature.val.ocaml - match: (?=\b(type|val|external|class|module|end)\b)|^\s*$ diff --git a/OCaml/syntax_test_ml.ml b/OCaml/syntax_test_ml.ml index e687498bcc..f3d8037dee 100644 --- a/OCaml/syntax_test_ml.ml +++ b/OCaml/syntax_test_ml.ml @@ -25,6 +25,37 @@ (*^^^ keyword.other.ocaml *) (* ^^^^ variable.other.constant.ocaml *) +(* Module Signatures *) + + val foo : 'a -> 'a +(*^^^^^^^^^^^^^^^^^^^^^ meta.module.signature.val.ocaml *) +(*^^^ keyword.other.ocaml *) +(* ^^^ entity.name.type.value-signature.ocaml *) +(* ^ punctuation.separator.type-constraint.ocaml *) +(* ^^ storage.type.ocaml *) +(* ^^ punctuation.separator.function-return.ocaml *) +(* ^^ storage.type.ocaml *) + + val (<*<) : 'a -> 'a +(*^^^^^^^^^^^^^^^^^^^^^ meta.module.signature.val.ocaml *) +(*^^^ keyword.other.ocaml *) +(* ^ punctuation.section.parens.begin.ocaml *) +(* ^^^ entity.name.type.value-signature.ocaml *) +(* ^ punctuation.section.parens.end.ocaml *) +(* ^ punctuation.separator.type-constraint.ocaml *) +(* ^^ storage.type.ocaml *) +(* ^^ punctuation.separator.function-return.ocaml *) +(* ^^ storage.type.ocaml *) + + val bar : 'a -> 'a +(*^^^^^^^^^^^^^^^^^^^^^ meta.module.signature.val.ocaml *) +(*^^^ keyword.other.ocaml *) +(* ^^^ entity.name.type.value-signature.ocaml *) +(* ^ punctuation.separator.type-constraint.ocaml *) +(* ^^ storage.type.ocaml *) +(* ^^ punctuation.separator.function-return.ocaml *) +(* ^^ storage.type.ocaml *) + (* Integers *)