From fb260e6a3e0f55d8368c37907f4e8185c0efdb91 Mon Sep 17 00:00:00 2001 From: Ludovic Koenig Date: Thu, 1 Aug 2019 20:14:54 +0200 Subject: [PATCH 1/5] Correct the matching ';' at the end of imports At the end of each import statement, the class must be highlighted with the Type highlight color. However, up to now, the semicolon was also highlighted. It has been fixed by removing the semicolon from the match thanks to the '\@=' expression. --- after/syntax/java.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/after/syntax/java.vim b/after/syntax/java.vim index 475f265..e88aee1 100644 --- a/after/syntax/java.vim +++ b/after/syntax/java.vim @@ -29,7 +29,7 @@ syntax match javaOdysseyType "\%(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)*> syntax match javaOdysseyConstructor "\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%((\|\[\)"me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseySeparator syntax match javaOdysseyMethod "\<\l\w*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 syntax match javaOdysseyCasting "(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)\+>\)\=\%(\[\]\)\=)"hs=s+1,he=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator -syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\s*;" +syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" syntax match javaOdysseyExtends "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator syntax match javaOdysseyImplements "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator From d88fbd2116a9f06938875420255fbfce81254c2d Mon Sep 17 00:00:00 2001 From: Ludovic Koenig Date: Thu, 1 Aug 2019 20:30:02 +0200 Subject: [PATCH 2/5] Add some syntax suport for Lombok The syntax sugar 'val' and 'var' are now part of the 'Statement' highlight group. 'var' may already be handled by default in vim 8.1 but anyway. --- after/syntax/java.vim | 1 + colors/odyssey.vim | 1 + 2 files changed, 2 insertions(+) diff --git a/after/syntax/java.vim b/after/syntax/java.vim index e88aee1..a65d433 100644 --- a/after/syntax/java.vim +++ b/after/syntax/java.vim @@ -18,6 +18,7 @@ " Java Syntax {{{ syntax keyword javaOdysseyThis this +syntax keyword javaOdysseyLombok val var syntax match javaOdysseyArrow "->" containedin=javaParenT,javaParenT1,javaParenT2 syntax match javaOdysseyClass "\%(\\s\+\)\@<=\<\u\w*\>" syntax match javaOdysseyInterface "\%(\\s\+\)\@<=\<\u\w*\>" diff --git a/colors/odyssey.vim b/colors/odyssey.vim index 7bc2a1d..4648dc3 100644 --- a/colors/odyssey.vim +++ b/colors/odyssey.vim @@ -275,6 +275,7 @@ call s:l('javaOdysseyConstructor', 'Type') call s:l( 'javaOdysseyMethod', 'Function') call s:l( 'javaOdysseyThis', 'Special') call s:l( 'javaOdysseyArrow', 'Operator') +call s:l( 'javaOdysseyLombok', 'Statement') " }}} " Ruby Highlights {{{ From 979e700cf9983be9f9917faa61ff8f80e000391e Mon Sep 17 00:00:00 2001 From: Ludovic Koenig Date: Thu, 1 Aug 2019 22:26:04 +0200 Subject: [PATCH 3/5] Add suports for Java Enum values and constructors Enum values that are often/always written in uppercase are now handled and considered as constants. They are highlighted within the Enum declaration and outside of it in case statements or through the use of the dot operator on an enum. --- after/syntax/java.vim | 34 ++++++++++++++++++---------------- colors/odyssey.vim | 38 ++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/after/syntax/java.vim b/after/syntax/java.vim index a65d433..4879b1d 100644 --- a/after/syntax/java.vim +++ b/after/syntax/java.vim @@ -17,22 +17,24 @@ " " Java Syntax {{{ -syntax keyword javaOdysseyThis this -syntax keyword javaOdysseyLombok val var -syntax match javaOdysseyArrow "->" containedin=javaParenT,javaParenT1,javaParenT2 -syntax match javaOdysseyClass "\%(\\s\+\)\@<=\<\u\w*\>" -syntax match javaOdysseyInterface "\%(\\s\+\)\@<=\<\u\w*\>" -syntax match javaOdysseyEnum "\%(\\s\+\)\@<=\<\u\w*\>" -syntax match javaOdysseyArray "\[\]" contained -syntax match javaOdysseyGeneric "[><]" contained -syntax match javaOdysseySeparator "," contained -syntax match javaOdysseyType "\%(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%(\[\]\)\=\)\%(\s*\<\l\w*\>\)\@=" containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator -syntax match javaOdysseyConstructor "\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%((\|\[\)"me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseySeparator -syntax match javaOdysseyMethod "\<\l\w*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 -syntax match javaOdysseyCasting "(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)\+>\)\=\%(\[\]\)\=)"hs=s+1,he=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator -syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" -syntax match javaOdysseyExtends "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator -syntax match javaOdysseyImplements "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator +syntax keyword javaOdysseyThis this +syntax keyword javaOdysseyLombok val var +syntax match javaOdysseyArrow "->" containedin=javaParenT,javaParenT1,javaParenT2 +syntax match javaOdysseyClass "\%(\\s\+\)\@<=\<\u\w*\>" +syntax match javaOdysseyInterface "\%(\\s\+\)\@<=\<\u\w*\>" +syntax match javaOdysseyEnum "\%(\\s\+\)\@<=\<\u\w*\>" +syntax match javaOdysseyArray "\[\]" contained +syntax match javaOdysseyGeneric "[><]" contained +syntax match javaOdysseySeparator "," contained +syntax match javaOdysseyType "\%(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%(\[\]\)\=\)\%(\s*\<\l\w*\>\)\@=" containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator +syntax match javaOdysseyConstructor "\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%((\|\[\)"me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseySeparator +syntax match javaOdysseyMethod "\<\l\w*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 +syntax match javaOdysseyCasting "(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)\+>\)\=\%(\[\]\)\=)"hs=s+1,he=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator +syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" +syntax match javaOdysseyExtends "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator +syntax match javaOdysseyImplements "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator +syntax match javaOdysseyEnumValue "\<[A-Z][_A-Z0-9]*\>" containedin=javaParenT,javaParenT1,javaParenT2,javaLabelRegion +syntax match javaOdysseyEnumConstructor "\<[A-Z][_A-Z0-9]*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 " }}} " vim: foldmethod=marker diff --git a/colors/odyssey.vim b/colors/odyssey.vim index 4648dc3..9e25c14 100644 --- a/colors/odyssey.vim +++ b/colors/odyssey.vim @@ -258,24 +258,26 @@ call s:h( 'Todo', 'background', 'warning', 'bold') " }}} " Java Highlights {{{ -call s:h( 'javaAnnotation', 'background', 'warning', 'italic') -call s:l( 'javaExternal', 'Statement') -call s:l( 'javaTypeDef', 'javaOdysseyThis') -call s:l( 'javaOdysseyClass', 'Type') -call s:l( 'javaOdysseyInterface', 'Type') -call s:l( 'javaOdysseyEnum', 'Type') -call s:l( 'javaOdysseyCasting', 'Type') -call s:l( 'javaOdysseyImport', 'Type') -call s:l( 'javaOdysseyExtends', 'Type') -call s:l( 'javaOdysseyImplements', 'Type') -call s:l( 'javaOdysseyArray', 'Normal') -call s:l( 'javaOdysseyGeneric', 'Normal') -call s:l( 'javaOdysseyType', 'Type') -call s:l('javaOdysseyConstructor', 'Type') -call s:l( 'javaOdysseyMethod', 'Function') -call s:l( 'javaOdysseyThis', 'Special') -call s:l( 'javaOdysseyArrow', 'Operator') -call s:l( 'javaOdysseyLombok', 'Statement') +call s:h( 'javaAnnotation', 'background', 'warning', 'italic') +call s:l( 'javaExternal', 'Statement') +call s:l( 'javaTypeDef', 'javaOdysseyThis') +call s:l( 'javaOdysseyClass', 'Type') +call s:l( 'javaOdysseyInterface', 'Type') +call s:l( 'javaOdysseyEnum', 'Type') +call s:l( 'javaOdysseyCasting', 'Type') +call s:l( 'javaOdysseyImport', 'Type') +call s:l( 'javaOdysseyExtends', 'Type') +call s:l( 'javaOdysseyImplements', 'Type') +call s:l( 'javaOdysseyArray', 'Normal') +call s:l( 'javaOdysseyGeneric', 'Normal') +call s:l( 'javaOdysseyType', 'Type') +call s:l( 'javaOdysseyConstructor', 'Type') +call s:l( 'javaOdysseyMethod', 'Function') +call s:l( 'javaOdysseyThis', 'Special') +call s:l( 'javaOdysseyArrow', 'Operator') +call s:l( 'javaOdysseyLombok', 'Statement') +call s:l( 'javaOdysseyEnumValue', 'Constant') +call s:l('javaOdysseyEnumConstructor', 'Constant') " }}} " Ruby Highlights {{{ From ad2a4ea635b21c2e3719a83bdff1161625b87965 Mon Sep 17 00:00:00 2001 From: Ludovic Koenig Date: Fri, 2 Aug 2019 07:00:54 +0200 Subject: [PATCH 4/5] Add the highlight for java classes in expressions When a class name is used in an expression to access some kind of static content, this class name is now highlighted. In other words, in 'System.out.println("")', 'System' must now be colored. --- after/syntax/java.vim | 5 +++-- colors/odyssey.vim | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/after/syntax/java.vim b/after/syntax/java.vim index 4879b1d..ee74d4b 100644 --- a/after/syntax/java.vim +++ b/after/syntax/java.vim @@ -33,8 +33,9 @@ syntax match javaOdysseyCasting "(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\) syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" syntax match javaOdysseyExtends "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator syntax match javaOdysseyImplements "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator -syntax match javaOdysseyEnumValue "\<[A-Z][_A-Z0-9]*\>" containedin=javaParenT,javaParenT1,javaParenT2,javaLabelRegion -syntax match javaOdysseyEnumConstructor "\<[A-Z][_A-Z0-9]*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 +syntax match javaOdysseyDottedClass "\<\u\w*\>."me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 +syntax match javaOdysseyEnumValue "\<[A-Z][_A-Z0-9]\+\>" containedin=javaParenT,javaParenT1,javaParenT2,javaLabelRegion +syntax match javaOdysseyEnumConstructor "\<[A-Z][_A-Z0-9]\+\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 " }}} " vim: foldmethod=marker diff --git a/colors/odyssey.vim b/colors/odyssey.vim index 9e25c14..c7cc097 100644 --- a/colors/odyssey.vim +++ b/colors/odyssey.vim @@ -262,6 +262,7 @@ call s:h( 'javaAnnotation', 'background', 'warning', 'italic') call s:l( 'javaExternal', 'Statement') call s:l( 'javaTypeDef', 'javaOdysseyThis') call s:l( 'javaOdysseyClass', 'Type') +call s:l( 'javaOdysseyDottedClass', 'Type') call s:l( 'javaOdysseyInterface', 'Type') call s:l( 'javaOdysseyEnum', 'Type') call s:l( 'javaOdysseyCasting', 'Type') From f3a093222895f7c1b30f1d0177feef0b3754359d Mon Sep 17 00:00:00 2001 From: Ludovic Koenig Date: Fri, 2 Aug 2019 07:28:59 +0200 Subject: [PATCH 5/5] Add some more supports for the Java import syntax Static imports are now highlight in green for functions and in yellow for the nested static classes. A minor bug has been fixed, because '.' was used instead of '\.' in the regexes. Given that the 'magic' option is set by default, it matched always any character instead of '.'. --- after/syntax/java.vim | 6 ++++-- colors/odyssey.vim | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/after/syntax/java.vim b/after/syntax/java.vim index ee74d4b..09e61c4 100644 --- a/after/syntax/java.vim +++ b/after/syntax/java.vim @@ -30,10 +30,12 @@ syntax match javaOdysseyType "\%(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|> syntax match javaOdysseyConstructor "\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=\%((\|\[\)"me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseySeparator syntax match javaOdysseyMethod "\<\l\w*\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 syntax match javaOdysseyCasting "(\<\u\w*\>\%(<\%(\u\w*\|,\|\s\|<\|>\)\+>\)\=\%(\[\]\)\=)"hs=s+1,he=e-1 containedin=javaParenT,javaParenT1,javaParenT2 contains=javaOdysseyGeneric,javaOdysseyArray,javaOdysseySeparator -syntax match javaOdysseyImport "\%(\\s\+\%(\l\+.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" +syntax match javaOdysseyImport "\%(\\s\+\%(\l\+\.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" +syntax match javaOdysseyStaticMethod "\%(\\s\+\\s\+\%(\w\+\.\)\+\)\@<=\%(\l\w*\)\%(\s*;\)\@=" +syntax match javaOdysseyStaticClass "\%(\\s\+\\s\+\%(\w\+\.\)\+\)\@<=\%(\u\w*\)\%(\s*;\)\@=" syntax match javaOdysseyExtends "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator syntax match javaOdysseyImplements "\%(\\s\+\)\@<=\%(\<\u\w*\>\)\%(<\%(\u\w*\|,\|\s\|<\|>\)*>\)\=" contains=javaOdysseyGeneric,javaOdysseySeparator -syntax match javaOdysseyDottedClass "\<\u\w*\>."me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 +syntax match javaOdysseyDottedClass "\<\u\w*\>\."me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 syntax match javaOdysseyEnumValue "\<[A-Z][_A-Z0-9]\+\>" containedin=javaParenT,javaParenT1,javaParenT2,javaLabelRegion syntax match javaOdysseyEnumConstructor "\<[A-Z][_A-Z0-9]\+\>("me=e-1 containedin=javaParenT,javaParenT1,javaParenT2 diff --git a/colors/odyssey.vim b/colors/odyssey.vim index c7cc097..f1bc5d8 100644 --- a/colors/odyssey.vim +++ b/colors/odyssey.vim @@ -267,6 +267,8 @@ call s:l( 'javaOdysseyInterface', 'Type') call s:l( 'javaOdysseyEnum', 'Type') call s:l( 'javaOdysseyCasting', 'Type') call s:l( 'javaOdysseyImport', 'Type') +call s:l( 'javaOdysseyStaticMethod', 'Function') +call s:l( 'javaOdysseyStaticClass', 'Type') call s:l( 'javaOdysseyExtends', 'Type') call s:l( 'javaOdysseyImplements', 'Type') call s:l( 'javaOdysseyArray', 'Normal')