view runtime/syntax/astro.vim @ 35039:fbdb6aeca2e2

runtime(java): Improve the recognition of the "style" method declarations Commit: https://github.com/vim/vim/commit/a4c085a3e607bd01d34e1db600b6460fc35fb0a3 Author: Aliaksei Budavei <0x000c70@gmail.com> Date: Wed Apr 24 21:04:25 2024 +0200 runtime(java): Improve the recognition of the "style" method declarations - Request the new regexp engine (v7.3.970) for [:upper:] and [:lower:]. - Recognise declarations of in-line annotated methods. - Recognise declarations of _strictfp_ methods. - Establish partial order for method modifiers as shown in the MethodModifier production; namely, _public_ and friends should be written the leftmost, possibly followed by _abstract_ or _default_, or possibly followed by other modifiers. - Stop looking for parameterisable primitive types (void<?>, int<Object>, etc., are malformed). - Stop looking for arrays of _void_. - Acknowledge the prevailing convention for method names to begin with a small letter and for class/interface names to begin with a capital letter; and, therefore, desist from claiming declarations of enum constants and constructors with javaFuncDef. Rationale: + Constructor is distinct from method: * its (overloaded) name is not arbitrary; * its return type is implicit; * its _throws_ clause depends on indirect vagaries of instance (variable) initialisers; * its invocation makes other constructors of its type hierarchy invoked one by one, concluding with the primordial constructor; * its explicit invocation, via _this_ or _super_, can only appear as the first statement in a constructor (not anymore, see JEP 447); else, its _super_ call cannot appear in constructors of _record_ or _enum_; and neither invocation is allowed for the primordial constructor; * it is not a member of its class, like initialisers, and is never inherited; * it is never _abstract_ or _native_. + Constructor declarations tend to be few in number and merit visual recognition from method declarations. + Enum constants define a fixed set of type instances and more resemble class variable initialisers. Note that the code duplicated for @javaFuncParams is written keeping in mind for g:java_highlight_functions a pending 3rd variant, which would require none of the :syn-cluster added groups. closes: #14620 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Wed, 24 Apr 2024 21:15:02 +0200
parents bd8383fa678a
children
line wrap: on
line source

" Vim syntax file.
" Language:    Astro
" Author:      Wuelner Martínez <wuelner.martinez@outlook.com>
" Maintainer:  Wuelner Martínez <wuelner.martinez@outlook.com>
" URL:         https://github.com/wuelnerdotexe/vim-astro
" Last Change: 2022 Aug 22
" Based On:    Evan Lecklider's vim-svelte
" Changes:     See https://github.com/evanleck/vim-svelte
" Credits:     See vim-svelte on github

" Quit when a (custom) syntax file was already loaded.
if !exists('main_syntax')
  if exists('b:current_syntax')
    finish
  endif
  let main_syntax = 'astro'
elseif exists('b:current_syntax') && b:current_syntax == 'astro'
  finish
endif

" Astro syntax variables are initialized.
let g:astro_typescript = get(g:, 'astro_typescript', 'disable')
let g:astro_stylus = get(g:, 'astro_stylus', 'disable')

let s:cpoptions_save = &cpoptions
set cpoptions&vim

" Embedded HTML syntax.
runtime! syntax/html.vim

" htmlTagName: expand HTML tag names to include mixed case and periods.
syntax match htmlTagName contained "\<[a-zA-Z\.]*\>"

" astroDirectives: add Astro Directives to HTML arguments.
syntax match astroDirectives contained '\<[a-z]\+:[a-z|]*\>' containedin=htmlTag

unlet b:current_syntax

if g:astro_typescript == 'enable'
  " Embedded TypeScript syntax.
  syntax include @astroJavaScript syntax/typescript.vim

  " javaScriptExpression: a javascript expression is used as an arg value.
  syntax clear javaScriptExpression
  syntax region javaScriptExpression
        \ contained start=+&{+
        \ keepend end=+};+
        \ contains=@astroJavaScript,@htmlPreproc

  " javaScript: add TypeScript support to HTML script tag.
  syntax clear javaScript
  syntax region javaScript
        \ start=+<script\_[^>]*>+
        \ keepend
        \ end=+</script\_[^>]*>+me=s-1
        \ contains=htmlScriptTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment
else
  " Embedded JavaScript syntax.
  syntax include @astroJavaScript syntax/javascript.vim
endif

" astroFence: detect the Astro fence.
syntax match astroFence contained +^---$+

" astrojavaScript: add TypeScript support to Astro code fence.
syntax region astroJavaScript
      \ start=+^---$+
      \ keepend
      \ end=+^---$+
      \ contains=htmlTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment,htmlEndTag,astroFence
      \ fold

unlet b:current_syntax

if g:astro_typescript == 'enable'
  " Embedded TypeScript React (TSX) syntax.
  syntax include @astroJavaScriptReact syntax/typescriptreact.vim
else
  " Embedded JavaScript React (JSX) syntax.
  syntax include @astroJavaScriptReact syntax/javascriptreact.vim
endif

" astroJavaScriptExpression: add {JSX or TSX} support to Astro expresions.
execute 'syntax region astroJavaScriptExpression start=+{+ keepend end=+}+ ' .
      \ 'contains=@astroJavaScriptReact, @htmlPreproc containedin=' . join([
      \   'htmlArg', 'htmlBold', 'htmlBoldItalic', 'htmlBoldItalicUnderline',
      \   'htmlBoldUnderline', 'htmlBoldUnderlineItalic', 'htmlH1', 'htmlH2',
      \   'htmlH3', 'htmlH4', 'htmlH5', 'htmlH6', 'htmlHead', 'htmlItalic',
      \   'htmlItalicBold', 'htmlItalicBoldUnderline', 'htmlItalicUnderline',
      \   'htmlItalicUnderlineBold', 'htmlLeadingSpace', 'htmlLink',
      \   'htmlStrike', 'htmlString', 'htmlTag', 'htmlTitle', 'htmlUnderline',
      \   'htmlUnderlineBold', 'htmlUnderlineBoldItalic',
      \   'htmlUnderlineItalic', 'htmlUnderlineItalicBold', 'htmlValue'
      \ ], ',')

" cssStyle: add CSS style tags support in TypeScript React.
syntax region cssStyle
      \ start=+<style\_[^>]*>+
      \ keepend
      \ end=+</style\_[^>]*>+me=s-1
      \ contains=htmlTag,@htmlCss,htmlCssStyleComment,@htmlPreproc,htmlEndTag
      \ containedin=@astroJavaScriptReact

unlet b:current_syntax

" Embedded SCSS syntax.
syntax include @astroScss syntax/scss.vim

" cssStyle: add SCSS style tags support in Astro.
syntax region scssStyle
      \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*scss[^\2]*\2\_[^>]*>/
      \ keepend
      \ end=+</style>+me=s-1
      \ contains=@astroScss,astroSurroundingTag
      \ fold

unlet b:current_syntax

" Embedded SASS syntax.
syntax include @astroSass syntax/sass.vim

" cssStyle: add SASS style tags support in Astro.
syntax region sassStyle
      \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*sass[^\2]*\2\_[^>]*>/
      \ keepend
      \ end=+</style>+me=s-1
      \ contains=@astroSass,astroSurroundingTag
      \ fold

unlet b:current_syntax

" Embedded LESS syntax.
syntax include @astroLess syntax/less.vim

" cssStyle: add LESS style tags support in Astro.
syntax region lessStyle
      \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*less[^\2]*\2\_[^>]*>/
      \ keepend
      \ end=+</style>+me=s-1
      \ contains=@astroLess,astroSurroundingTag
      \ fold

unlet b:current_syntax

" Embedded Stylus syntax.
" NOTE: Vim does not provide stylus support by default, but you can install
"       this plugin to support it: https://github.com/wavded/vim-stylus
if g:astro_stylus == 'enable'
  try
    " Embedded Stylus syntax.
    syntax include @astroStylus syntax/stylus.vim

    " stylusStyle: add Stylus style tags support in Astro.
    syntax region stylusStyle
          \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*stylus[^\2]*\2\_[^>]*>/
          \ keepend
          \ end=+</style>+me=s-1
          \ contains=@astroStylus,astroSurroundingTag
          \ fold

    unlet b:current_syntax
  catch
    echomsg "you need install a external plugin for support stylus in .astro files"
  endtry
endif

" astroSurroundingTag: add surround HTML tag to script and style.
syntax region astroSurroundingTag
      \ start=+<\(script\|style\)+
      \ end=+>+
      \ contains=htmlTagError,htmlTagN,htmlArg,htmlValue,htmlEvent,htmlString
      \ contained
      \ fold

" Define the default highlighting.
" Only used when an item doesn't have highlighting yet.
highlight default link astroDirectives Special
highlight default link astroFence Comment

let b:current_syntax = 'astro'
if main_syntax == 'astro'
  unlet main_syntax
endif

" Sync from start because of the wacky nesting.
syntax sync fromstart

let &cpoptions = s:cpoptions_save
unlet s:cpoptions_save
" vim: ts=8