-
Notifications
You must be signed in to change notification settings - Fork 297
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
354 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 | ||
|
||
setlocal commentstring=//\ %s | ||
setlocal makeprg=v\ % | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 | ||
|
||
" Based on the Go identation file. | ||
" | ||
" Copyright 2011 The Go Authors. All rights reserved. | ||
" Use of this source code is governed by a BSD-style | ||
" license that can be found in the LICENSE file. | ||
|
||
if exists("b:did_indent") | ||
finish | ||
endif | ||
let b:did_indent = 1 | ||
|
||
setlocal nolisp | ||
setlocal autoindent | ||
setlocal indentexpr=VlangIndent(v:lnum) | ||
setlocal indentkeys+=<:>,0=},0=) | ||
|
||
if exists("*VlangIndent") | ||
finish | ||
endif | ||
|
||
let s:cpo_save = &cpo | ||
set cpo&vim | ||
|
||
function! VlangIndent(lnum) abort | ||
let prevlnum = prevnonblank(a:lnum-1) | ||
if prevlnum == 0 | ||
return 0 | ||
endif | ||
|
||
let prevl = substitute(getline(prevlnum), '//.*$', '', '') | ||
let thisl = substitute(getline(a:lnum), '//.*$', '', '') | ||
let previ = indent(prevlnum) | ||
|
||
let ind = previ | ||
|
||
if prevl =~ '[({]\s*$' | ||
" previous line opened a block | ||
let ind += shiftwidth() | ||
endif | ||
if prevl =~# '^\s*\(case .*\|default\):$' | ||
" previous line is part of a switch statement | ||
let ind += shiftwidth() | ||
endif | ||
|
||
if thisl =~ '^\s*[)}]' | ||
" this line closed a block | ||
let ind -= shiftwidth() | ||
endif | ||
|
||
" Colons are tricky. | ||
" We want to outdent if it's part of a switch ("case foo:" or "default:"). | ||
" We ignore trying to deal with jump labels because (a) they're rare, and | ||
" (b) they're hard to disambiguate from a composite literal key. | ||
if thisl =~# '^\s*\(case .*\|default\):$' | ||
let ind -= shiftwidth() | ||
endif | ||
|
||
return ind | ||
endfunction | ||
|
||
" restore Vi compatibility settings | ||
let &cpo = s:cpo_save | ||
unlet s:cpo_save | ||
|
||
" vim: sw=2 ts=2 et | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'v') == -1 | ||
|
||
" Vim syntax file | ||
" Language: V | ||
" Maintainer: Oliver Kelton (https://github.com/ollykel) | ||
" Last Change: 2019 Jun 13 | ||
" NOTE: largely based on go.vim, maintained by David Barnett | ||
" see David Barnett (https://github.com/google/vim-ft-go) | ||
" Options: | ||
" There are some options for customizing the highlighting; the recommended | ||
" settings are the default values, but you can write: | ||
" let OPTION_NAME = 0 | ||
" in your ~/.vimrc file to disable particular options. You can also write: | ||
" let OPTION_NAME = 1 | ||
" to enable particular options. At present, all options default to on. | ||
" | ||
" - g:v_highlight_array_whitespace_error | ||
" Highlights white space after "[]". | ||
" - g:v_highlight_chan_whitespace_error | ||
" Highlights white space around the communications operator that don't | ||
" follow the standard style. | ||
" Highlights commonly used library types (io.Reader, etc.). | ||
" - g:v_highlight_space_tab_error | ||
" Highlights instances of tabs following spaces. | ||
" - g:v_highlight_trailing_whitespace_error | ||
" Highlights trailing white space. | ||
|
||
" Quit when a (custom) syntax file was already loaded | ||
if exists('b:current_syntax') | ||
finish | ||
endif | ||
|
||
if !exists('g:v_highlight_array_whitespace_error') | ||
let g:v_highlight_array_whitespace_error = 1 | ||
endif | ||
if !exists('g:v_highlight_chan_whitespace_error') | ||
let g:v_highlight_chan_whitespace_error = 1 | ||
endif | ||
if !exists('g:v_highlight_space_tab_error') | ||
let g:v_highlight_space_tab_error = 1 | ||
endif | ||
if !exists('g:v_highlight_trailing_whitespace_error') | ||
let g:v_highlight_trailing_whitespace_error = 1 | ||
endif | ||
if !exists('g:v_highlight_function_calls') | ||
let g:v_highlight_function_calls = 1 | ||
endif | ||
if !exists('g:v_highlight_fields') | ||
let g:v_highlight_fields = 1 | ||
endif | ||
|
||
syn case match | ||
|
||
syn match vDeclType "\<\(struct\|interface\)\>" | ||
|
||
syn keyword vDirective module import | ||
syn keyword vDeclaration pub mut const type enum | ||
syn region vIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ | ||
syn match vIncluded display contained "<[^>]*>" | ||
syn match vFlagDefinition display contained "\s\i[^\n]*" | ||
syn match vInclude display "^\s*\zs\(%:\|#\)\s*include\>\s*["<]" contains=vIncluded | ||
syn match vFlag display "^\s*\zs\(%:\|#\)\s*flag\>\s*[^\n]*" contains=vFlagDefinition | ||
syn region vShebang display start=/^#!/ end=/$/ | ||
|
||
hi def link vDirective Statement | ||
hi def link vDeclaration Keyword | ||
hi def link vDeclType Keyword | ||
hi def link vInclude Include | ||
hi def link vFlag Include | ||
hi def link vIncluded vString | ||
hi def link vFlagDefinition vString | ||
hi def link vShebang Include | ||
|
||
" Keywords within functions | ||
syn keyword vStatement defer go goto return break continue fallthrough | ||
syn keyword vConditional if else switch match or | ||
syn keyword vLabel case default | ||
syn keyword vRepeat for in | ||
syn match vCodeGen /$if\>/ | ||
syn match vCodeGen /\.fields\>/ | ||
syn match vCodeGen /\.$\i*\>/ | ||
|
||
hi def link vStatement Statement | ||
hi def link vConditional Conditional | ||
hi def link vLabel Label | ||
hi def link vRepeat Repeat | ||
hi def link vCodeGen Identifier | ||
|
||
" Predefined types | ||
syn keyword vType chan map bool string error voidptr | ||
syn keyword vSignedInts int i8 i16 i32 i64 rune intptr | ||
syn keyword vUnsignedInts byte uint u8 u16 u32 u64 byteptr | ||
syn keyword vFloats f32 f64 floatptr | ||
syn keyword vComplexes complex64 complex128 | ||
|
||
hi def link vType Type | ||
hi def link vSignedInts Type | ||
hi def link vUnsignedInts Type | ||
hi def link vFloats Type | ||
hi def link vComplexes Type | ||
|
||
" Treat fn specially: it's a declaration at the start of a line, but a type | ||
" elsewhere. Order matters here. | ||
" syn match vType /\<fn\>/ | ||
syn match vDeclaration /\<fn\>/ | ||
syn match vDeclaration contained /\<fn\>/ | ||
|
||
" Predefined functions and values | ||
syn keyword vBuiltins assert C cap complex copy delete exit imag | ||
syn keyword vBuiltins print println eprint eprintln print_backtrace | ||
syn keyword vBuiltins float_calloc ok memdup range_int real recover | ||
syn keyword vBuiltins malloc byte_calloc float_calloc | ||
syn keyword vBuiltins isok isnil panic on_panic | ||
syn keyword vConstants iota true false | ||
syn match vBuiltins /\<json\.\(encode\|decode\)\>/ | ||
|
||
hi def link vBuiltins Keyword | ||
hi def link vConstants Keyword | ||
|
||
" Comments; their contents | ||
syn keyword vTodo contained TODO FIXME XXX BUG | ||
syn cluster vCommentGroup contains=vTodo | ||
syn region vComment start="/\*" end="\*/" contains=@vCommentGroup,@Spell | ||
syn region vComment start="//" end="$" contains=@vCommentGroup,@Spell | ||
|
||
hi def link vComment Comment | ||
hi def link vTodo Todo | ||
|
||
" Go escapes | ||
syn match vEscapeOctal display contained "\\[0-7]\{3}" | ||
syn match vEscapeVar display contained "\$[0-9A-Za-z\.]*" | ||
syn match vEscapeVar display contained "\${[^}]*}" | ||
syn match vEscapeC display contained +\\[abfnrtv\\'"]+ | ||
syn match vEscapeX display contained "\\x\x\{2}" | ||
syn match vEscapeU display contained "\\u\x\{4}" | ||
syn match vEscapeBigU display contained "\\U\x\{8}" | ||
syn match vEscapeError display contained +\\[^0-7xuUabfnrtv\\'"]+ | ||
|
||
hi def link vEscapeOctal vSpecialString | ||
hi def link vEscapeVar vSpecialString | ||
hi def link vEscapeC vSpecialString | ||
hi def link vEscapeX vSpecialString | ||
hi def link vEscapeU vSpecialString | ||
hi def link vEscapeBigU vSpecialString | ||
hi def link vSpecialString Special | ||
hi def link vEscapeError Error | ||
|
||
" Strings and their contents | ||
syn cluster vStringGroup contains=vEscapeOctal,vEscapeVar,vEscapeC,vEscapeX,vEscapeU,vEscapeBigU,vEscapeError | ||
syn region vString start=+"+ skip=+\\\\\|\\'+ end=+"+ contains=@vStringGroup | ||
syn region vRawString start=+`+ end=+`+ | ||
|
||
hi def link vString String | ||
hi def link vRawString String | ||
|
||
" Characters; their contents | ||
syn cluster vCharacterGroup contains=vEscapeOctal,vEscapeC,vEscapeVar,vEscapeX,vEscapeU,vEscapeBigU | ||
syn region vCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@vCharacterGroup | ||
|
||
hi def link vCharacter Character | ||
|
||
" Regions | ||
syn region vBlock start="{" end="}" transparent fold | ||
syn region vParen start='(' end=')' transparent | ||
|
||
" Integers | ||
syn match vDecimalInt "\<\d\+\([Ee]\d\+\)\?\>" | ||
syn match vHexadecimalInt "\<0x\x\+\>" | ||
syn match vOctalInt "\<0\o\+\>" | ||
syn match vOctalError "\<0\o*[89]\d*\>" | ||
|
||
hi def link vDecimalInt Integer | ||
hi def link vHexadecimalInt Integer | ||
hi def link vOctalInt Integer | ||
hi def link Integer Number | ||
|
||
" Floating point | ||
syn match vFloat "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>" | ||
syn match vFloat "\<\.\d\+\([Ee][-+]\d\+\)\?\>" | ||
syn match vFloat "\<\d\+[Ee][-+]\d\+\>" | ||
|
||
hi def link vFloat Float | ||
|
||
" Imaginary literals | ||
syn match vImaginary "\<\d\+i\>" | ||
syn match vImaginary "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>" | ||
syn match vImaginary "\<\.\d\+\([Ee][-+]\d\+\)\?i\>" | ||
syn match vImaginary "\<\d\+[Ee][-+]\d\+i\>" | ||
|
||
hi def link vImaginary Number | ||
|
||
" Generics | ||
syn match vGenericBrackets display contained "[<>]" | ||
syn match vInterfaceDeclaration display "\s*\zsinterface\s*\i*\s*<[^>]*>" contains=vDeclType,vGenericBrackets | ||
syn match vStructDeclaration display "\s*\zsstruct\s*\i*\s*<[^>]*>" contains=vDeclType,vGenericBrackets | ||
" vFunctionName only appears when v_highlight_function_calls set | ||
syn match vFuncDeclaration display "\s*\zsfn\s*\i*\s*<[^>]*>" contains=vFunctionName,vDeclaration,vGenericBrackets | ||
|
||
hi def link vGenericBrackets Identifier | ||
|
||
" Spaces after "[]" | ||
if v_highlight_array_whitespace_error != 0 | ||
syn match vSpaceError display "\(\[\]\)\@<=\s\+" | ||
endif | ||
|
||
" Spacing errors around the 'chan' keyword | ||
if v_highlight_chan_whitespace_error != 0 | ||
" receive-only annotation on chan type | ||
syn match vSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@=" | ||
" send-only annotation on chan type | ||
syn match vSpaceError display "\(\<chan\)\@<=\s\+\(<-\)\@=" | ||
" value-ignoring receives in a few contexts | ||
syn match vSpaceError display "\(\(^\|[={(,;]\)\s*<-\)\@<=\s\+" | ||
endif | ||
|
||
" Space-tab error | ||
if v_highlight_space_tab_error != 0 | ||
syn match vSpaceError display " \+\t"me=e-1 | ||
endif | ||
|
||
" Trailing white space error | ||
if v_highlight_trailing_whitespace_error != 0 | ||
syn match vSpaceError display excludenl "\s\+$" | ||
endif | ||
|
||
hi def link vSpaceError Error | ||
|
||
" Function calls and Fields are from: https://github.com/fatih/vim-go/blob/master/syntax/go.vim | ||
" Function calls; | ||
if v_highlight_function_calls | ||
syn match vFunctionCall /\w\+\ze\s*(/ contains=vBuiltins,vDeclaration | ||
syn match vFunctionName display contained /\s\w\+/ | ||
hi def link vFunctionName Special | ||
endif | ||
|
||
hi def link vFunctionCall Special | ||
|
||
" Fields; | ||
if v_highlight_fields | ||
" 1. Match a sequence of word characters coming after a '.' | ||
" 2. Require the following but dont match it: ( \@= see :h E59) | ||
" - The symbols: / - + * % OR | ||
" - The symbols: [] {} <> ) OR | ||
" - The symbols: \n \r space OR | ||
" - The symbols: , : . | ||
" 3. Have the start of highlight (hs) be the start of matched | ||
" pattern (s) offsetted one to the right (+1) (see :h E401) | ||
syn match vField /\.\w\+\ | ||
\%(\%([\/\-\+*%]\)\|\ | ||
\%([\[\]{}<\>\)]\)\|\ | ||
\%([\!=\^|&]\)\|\ | ||
\%([\n\r\ ]\)\|\ | ||
\%([,\:.]\)\)\@=/hs=s+1 | ||
endif | ||
hi def link vField Identifier | ||
|
||
" Search backwards for a global declaration to start processing the syntax. | ||
"syn sync match vSync grouphere NONE /^\(const\|var\|type\|func\)\>/ | ||
|
||
" There's a bug in the implementation of grouphere. For now, use the | ||
" following as a more expensive/less precise workaround. | ||
syn sync minlines=500 | ||
|
||
let b:current_syntax = 'vlang' | ||
|
||
" vim: sw=2 sts=2 et | ||
|
||
endif |