]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(java): Optionally recognise all primitive constants in _switch-case_ labels
authorAliaksei Budavei <0x000c70@gmail.com>
Thu, 19 Sep 2024 16:22:58 +0000 (18:22 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 19 Sep 2024 16:22:58 +0000 (18:22 +0200)
Define "g:java_syntax_previews" and include number 455 in
its list to enable this recognition:
------------------------------------------------------------
let g:java_syntax_previews = [455]
------------------------------------------------------------

Reference:
https://openjdk.org/jeps/455

closes: #15698

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/syntax.txt
runtime/syntax/java.vim
runtime/syntax/testdir/dumps/java_previews_455_00.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_previews_455_01.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_previews_455_02.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_previews_455_03.dump [new file with mode: 0644]
runtime/syntax/testdir/input/java_previews_455.java [new file with mode: 0644]

index 7650433b729c4a50669f6744a2bd33c40e0a4348..01aa92a53276c8b50335aa203056862d19cf848f 100644 (file)
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 11
+*syntax.txt*   For Vim version 9.1.  Last change: 2024 Sep 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2176,10 +2176,11 @@ cycles for such a feature to become either integrated into the platform or
 withdrawn from this effort.  To cater for early adopters, there is optional
 support in Vim for syntax related preview features that are implemented.  You
 can request it by specifying a list of preview feature numbers as follows: >
-       :let g:java_syntax_previews = [430]
+       :let g:java_syntax_previews = [455]
 
 The supported JEP numbers are to be drawn from this table:
        `430`: String Templates [JDK 21]
+       `455`: Primitive types in Patterns, instanceof, and switch
 
 Note that as soon as the particular preview feature will have been integrated
 into the Java platform, its entry will be removed from the table and related
index d3b59c186db4cb0ca6d91ed31e088803846a0d92..bbef266c34eac3490cdae46c535d269fa9485ccb 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:          Aliaksei Budavei <0x000c70 AT gmail DOT com>
 " Former Maintainer:   Claudio Fleiner <claudio@fleiner.com>
 " Repository:          https://github.com/zzzyxwvut/java-vim.git
-" Last Change:         2024 Sep 11
+" Last Change:         2024 Sep 18
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -283,19 +283,27 @@ if exists("g:java_space_errors")
 endif
 
 exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
-syn region  javaLabelRegion    transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+
+if s:ff.IsRequestedPreviewFeature(455)
+  syn region  javaLabelRegion  transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+else
+  syn region  javaLabelRegion  transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
+  syn keyword javaLabelCastType        contained char byte short int
+  syn match   javaLabelNumber  contained "\<0\>[lL]\@!"
+  syn match   javaLabelNumber  contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
+  hi def link javaLabelCastType        javaType
+  hi def link javaLabelNumber  javaNumber
+endif
+
 syn region  javaLabelRegion    transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
 " Consider grouped _default_ _case_ labels, i.e.
 " case null, default ->
 " case null: default:
 syn keyword javaLabelDefault   contained default
 syn keyword javaLabelVarType   contained var
-syn keyword javaLabelCastType  contained char byte short int
 " Allow for the contingency of the enclosing region not being able to
 " _keep_ its _end_, e.g. case ':':.
 syn region  javaLabelWhenClause        contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal,javaLambdaDef
-syn match   javaLabelNumber    contained "\<0\>[lL]\@!"
-syn match   javaLabelNumber    contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
 
 " Comments
 syn keyword javaTodo           contained TODO FIXME XXX
@@ -692,8 +700,6 @@ hi def link javaUserLabelRef                javaUserLabel
 hi def link javaLabel                  Label
 hi def link javaLabelDefault           javaLabel
 hi def link javaLabelVarType           javaOperator
-hi def link javaLabelNumber            javaNumber
-hi def link javaLabelCastType          javaType
 
 hi def link javaComment                        Comment
 hi def link javaCommentStar            javaComment
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_00.dump b/runtime/syntax/testdir/dumps/java_previews_455_00.dump
new file mode 100644 (file)
index 0000000..af67913
--- /dev/null
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|]| +0#0000000&@22
+@75
+@75
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|P|r|i|m|i|t|i|v|e|S|w|i|t|c|h|T|e|s|t|s| @1|/+0#0000e05&@1| |J|D|K| |2|3|+| |(|-@1|e|n|a|b|l|e|-|p|r|e|v|i|e|w| |-@1|r|e|l|e|a|s|e| |2|3|)|.| +0#0000000&@3
+|{| @73
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e|c|h|o|(|O|b|j|e|c|t| |o|)| |{| |S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8|l+0#00e0003&|o|n|g| +0#0000000&|g| |=| |2+0#e000002&|L|;+0#0000000&| @54
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|0+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| |0+0#e000002&|L|;+0#0000000&| @44
+@57|1|,|1| @10|T|o|p| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_01.dump b/runtime/syntax/testdir/dumps/java_previews_455_01.dump
new file mode 100644 (file)
index 0000000..4b55322
--- /dev/null
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L|:+0#0000000&| @7|{| |e|c|h|o|(|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @30
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|L|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|g|)| |{| @49
+@12>c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|L| +0#0000000&@4|-|>| |0+0#e000002&|L|;+0#0000000&| @44
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|L| +0#0000000&@4|-|>| |1+0#e000002&|L|;+0#0000000&| @44
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|L|;+0#0000000&| @43
+@8|}|)|;| @63
+@75
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|b|o@1|l| |=| |f+0#e000002&|a|l|s|e|;+0#0000000&| @45
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @51
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e|:+0#0000000&| @5|{| |e|c|h|o|(|t+0#e000002&|r|u|e|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e|:+0#0000000&| @4|{| |e|c|h|o|(|f+0#e000002&|a|l|s|e|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|b|o@1|l|)| |{| @46
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
+@57|1|9|,|4|-|1|3| @6|2|8|%| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_02.dump b/runtime/syntax/testdir/dumps/java_previews_455_02.dump
new file mode 100644 (file)
index 0000000..95c0556
--- /dev/null
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|t+0#e000002&|r|u|e| +0#0000000&@2|-|>| |t+0#e000002&|r|u|e|;+0#0000000&| @42
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|f+0#e000002&|a|l|s|e| +0#0000000&@1|-|>| |f+0#e000002&|a|l|s|e|;+0#0000000&| @41
+@8|}|)|;| @63
+@75
+@8|f+0#00e0003&|l|o|a|t| +0#0000000&|f| |=| |2+0#e000002&|.|0|f|;+0#0000000&| @51
+> @74
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|f|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|f|:+0#0000000&| @5|{| |e|c|h|o|(|0+0#e000002&|.|0|f|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f|:+0#0000000&| @5|{| |e|c|h|o|(|1+0#e000002&|.|0|f|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|.|0|f|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|f|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|f| +0#0000000&@2|-|>| |0+0#e000002&|.|0|f|;+0#0000000&| @42
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|f| +0#0000000&@2|-|>| |1+0#e000002&|.|0|f|;+0#0000000&| @42
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|.|0|f|;+0#0000000&| @41
+@8|}|)|;| @63
+@75
+@8|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| @51
+@57|3|7|,|0|-|1| @7|6|8|%| 
diff --git a/runtime/syntax/testdir/dumps/java_previews_455_03.dump b/runtime/syntax/testdir/dumps/java_previews_455_03.dump
new file mode 100644 (file)
index 0000000..f44ad17
--- /dev/null
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|d+0#00e0003&|o|u|b|l|e| +0#0000000&|d| |=| |2+0#e000002&|.|0|;+0#0000000&| @51
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @54
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0|:+0#0000000&| @6|{| |e|c|h|o|(|0+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0|:+0#0000000&| @6|{| |e|c|h|o|(|1+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8>d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @7|{| |e|c|h|o|(|-|1+0#e000002&|.|0|)+0#0000000&|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|d|)| |{| @49
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|0+0#e000002&|.|0| +0#0000000&@3|-|>| |0+0#e000002&|.|0|;+0#0000000&| @43
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|.|0| +0#0000000&@3|-|>| |1+0#e000002&|.|0|;+0#0000000&| @43
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@4|-|>| |-|1+0#e000002&|.|0|;+0#0000000&| @42
+@8|}|)|;| @63
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|3|-|9| @7|B|o|t| 
diff --git a/runtime/syntax/testdir/input/java_previews_455.java b/runtime/syntax/testdir/input/java_previews_455.java
new file mode 100644 (file)
index 0000000..b9c2070
--- /dev/null
@@ -0,0 +1,64 @@
+// VIM_TEST_SETUP let g:java_syntax_previews = [455]
+
+
+
+class PrimitiveSwitchTests     // JDK 23+ (--enable-preview --release 23).
+{
+       static void echo(Object o) { System.out.println(o); }
+
+       static {
+               long g = 2L;
+
+               switch (g) {
+               case 0L:                { echo(0L); break; }
+               case 1L:                { echo(1L); break; }
+               default:                { echo(-1L); break; }
+               }
+
+               echo(switch (g) {
+                       case 0L         -> 0L;
+                       case 1L         -> 1L;
+                       default         -> -1L;
+               });
+
+               boolean bool = false;
+
+               switch (bool) {
+               case true:              { echo(true); break; }
+               case false:             { echo(false); break; }
+               }
+
+               echo(switch (bool) {
+                       case true       -> true;
+                       case false      -> false;
+               });
+
+               float f = 2.0f;
+
+               switch (f) {
+               case 0.0f:              { echo(0.0f); break; }
+               case 1.0f:              { echo(1.0f); break; }
+               default:                { echo(-1.0f); break; }
+               }
+
+               echo(switch (f) {
+                       case 0.0f       -> 0.0f;
+                       case 1.0f       -> 1.0f;
+                       default         -> -1.0f;
+               });
+
+               double d = 2.0;
+
+               switch (d) {
+               case 0.0:               { echo(0.0); break; }
+               case 1.0:               { echo(1.0); break; }
+               default:                { echo(-1.0); break; }
+               }
+
+               echo(switch (d) {
+                       case 0.0        -> 0.0;
+                       case 1.0        -> 1.0;
+                       default         -> -1.0;
+               });
+       }
+}