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..50ac2a87fb 100644 --- a/OCaml/syntax_test_ml.ml +++ b/OCaml/syntax_test_ml.ml @@ -1,5 +1,41 @@ (* SYNTAX TEST "Packages/OCaml/OCaml.sublime-syntax" *) +(* Function Definitions *) + +let foo = function +(* <- meta.function.ocaml keyword.other.function-definition.ocaml *) +(*^^^^^^^ meta.function.ocaml *) +(* ^^^ entity.name.function.ocaml *) +(* ^ keyword.operator.ocaml *) +(* ^^^^^^^^ keyword.control.match-definition.ocaml *) + | [] -> None +(* ^^^^^^^^ meta.pattern-match.ocaml *) +(* ^ keyword.control.match-definition.ocaml *) +(* ^^ constant.language.pseudo-variable.ocaml *) +(* ^^ punctuation.separator.match-definition.ocaml *) +(* ^^^^ entity.name.type.variant.ocaml *) + | _ -> Some 23 + +let bar = function +(* <- meta.function.ocaml keyword.other.function-definition.ocaml *) +(*^^^^^^^ meta.function.ocaml *) +(* ^^^ entity.name.function.ocaml *) +(* ^ keyword.operator.ocaml *) +(* ^^^^^^^^ keyword.control.match-definition.ocaml *) + | [] -> None +(* ^^^^^^^^ meta.pattern-match.ocaml *) +(* ^ keyword.control.match-definition.ocaml *) +(* ^^ constant.language.pseudo-variable.ocaml *) +(* ^^ punctuation.separator.match-definition.ocaml *) +(* ^^^^ entity.name.type.variant.ocaml *) + | _ -> Some 42 +(* ^^^^^^^ meta.pattern-match.ocaml *) +(* ^ keyword.control.match-definition.ocaml *) +(* ^ constant.language.universal-match.ocaml *) +(* ^^ punctuation.separator.match-definition.ocaml *) +(* ^^^^ entity.name.type.variant.ocaml *) +(* ^^ constant.numeric.value.ocaml *) + let open Core.Std (*^^^ keyword.other.ocaml *) (* ^^^^ keyword.control.import.ocaml *) @@ -25,6 +61,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 *)