From 794ad1af75d3b140f92c3a5023461815796925b3 Mon Sep 17 00:00:00 2001 From: lord Date: Fri, 15 Nov 2024 10:17:46 -0500 Subject: [PATCH] ocaml: Improve highlighting and bracketing (#20700) Some small improvements to OCaml. Would happily split these into smaller changes, discard anything, etc. Before: before After: after OCaml highlighting and bracketing improvements - Fixed bug where `<` was automatically closed with `>`. - Typing `{|` now automatically closes with `|}` - Type variables are now colored with `variable.special` instead of `variable`. - Argument names in function declarations and application are now colored with `label` instead of `property`, even if they are punned. - `[@@` and `[%` in macros are now colored as bracket punctuation to match the closing `]`, rather than colored as `attribute` Release Notes: - N/A --- .../languages/ocaml-interface/brackets.scm | 1 - .../languages/ocaml-interface/config.toml | 3 +-- extensions/ocaml/languages/ocaml/brackets.scm | 1 - extensions/ocaml/languages/ocaml/config.toml | 4 ++-- .../ocaml/languages/ocaml/highlights.scm | 23 +++++++++++++++---- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/extensions/ocaml/languages/ocaml-interface/brackets.scm b/extensions/ocaml/languages/ocaml-interface/brackets.scm index f05821c17c..e7e8145eba 100644 --- a/extensions/ocaml/languages/ocaml-interface/brackets.scm +++ b/extensions/ocaml/languages/ocaml-interface/brackets.scm @@ -1,3 +1,2 @@ ("(" @open ")" @close) ("{" @open "}" @close) -("<" @open ">" @close) diff --git a/extensions/ocaml/languages/ocaml-interface/config.toml b/extensions/ocaml/languages/ocaml-interface/config.toml index a1efdf18df..a4378ec3ed 100644 --- a/extensions/ocaml/languages/ocaml-interface/config.toml +++ b/extensions/ocaml/languages/ocaml-interface/config.toml @@ -2,11 +2,10 @@ name = "OCaml Interface" code_fence_block_name = "ocaml" grammar = "ocaml_interface" path_suffixes = ["mli"] -block_comment = ["(* ", "*)"] +block_comment = ["(* ", " *)"] autoclose_before = ";,=)}" brackets = [ { start = "{", end = "}", close = true, newline = true }, - { start = "<", end = ">", close = true, newline = true }, { start = "[", end = "]", close = true, newline = true }, { start = "(", end = ")", close = true, newline = true } ] diff --git a/extensions/ocaml/languages/ocaml/brackets.scm b/extensions/ocaml/languages/ocaml/brackets.scm index 269d87778d..1f5ee9bfa3 100644 --- a/extensions/ocaml/languages/ocaml/brackets.scm +++ b/extensions/ocaml/languages/ocaml/brackets.scm @@ -2,5 +2,4 @@ ("[" @open "]" @close) ("[|" @open "|]" @close) ("{" @open "}" @close) -("<" @open ">" @close) ("\"" @open "\"" @close) diff --git a/extensions/ocaml/languages/ocaml/config.toml b/extensions/ocaml/languages/ocaml/config.toml index 2cd81bde52..7d5b4348d6 100644 --- a/extensions/ocaml/languages/ocaml/config.toml +++ b/extensions/ocaml/languages/ocaml/config.toml @@ -1,11 +1,11 @@ name = "OCaml" grammar = "ocaml" path_suffixes = ["ml"] -block_comment = ["(* ", "*)"] +block_comment = ["(* ", " *)"] autoclose_before = ";,=)}]" brackets = [ { start = "{", end = "}", close = true, newline = true }, - { start = "<", end = ">", close = true, newline = true }, + { start = "{|", end = "|", close = true, newline = true, not_in = ["string"] }, { start = "[", end = "]", close = true, newline = true }, { start = "[|", end = "|", close = true, newline = true, not_in = ["string"] }, { start = "(", end = ")", close = true, newline = true }, diff --git a/extensions/ocaml/languages/ocaml/highlights.scm b/extensions/ocaml/languages/ocaml/highlights.scm index 6623e1e543..8029d3cc22 100644 --- a/extensions/ocaml/languages/ocaml/highlights.scm +++ b/extensions/ocaml/languages/ocaml/highlights.scm @@ -44,12 +44,27 @@ ; Variables ;---------- -[(type_variable) (value_pattern)] @variable +(value_pattern) @variable + +(type_variable) @variable.special ; Properties ;----------- -[(label_name) (field_name) (instance_variable_name)] @property +[(field_name) (instance_variable_name)] @property + +; Labels +;------- + +[(label_name) (parameter)] @label + +(parameter + pattern: (value_pattern) @label) +; despite the above rule, we should still label value_pattern as a variable +; when a label name is present +(parameter + (label_name) + pattern: (value_pattern) @variable) ; Constants ;---------- @@ -112,7 +127,7 @@ ; Punctuation ;------------ -["(" ")" "[" "]" "{" "}" "[|" "|]" "[<" "[>"] @punctuation.bracket +["(" ")" "[" "]" "{" "}" "[|" "|]" "[<" "[>" "[@@" "[@" "[%"] @punctuation.bracket (object_type ["<" ">"] @punctuation.bracket) @@ -132,7 +147,7 @@ (item_extension) (quoted_extension) (quoted_item_extension) - "%" + ] @attribute (attribute_id) @tag