Browse Source

vim: ++vim-racket

Maxim Likhachev 3 years ago
parent
commit
8d2d52ef85
  1. 14
      etc/soft/nvim/+plugins/vim-racket/README.md
  2. 8
      etc/soft/nvim/+plugins/vim-racket/compiler/raco.vim
  3. 8
      etc/soft/nvim/+plugins/vim-racket/compiler/racomake.vim
  4. 8
      etc/soft/nvim/+plugins/vim-racket/compiler/racosetup.vim
  5. 8
      etc/soft/nvim/+plugins/vim-racket/compiler/racotest.vim
  6. 30
      etc/soft/nvim/+plugins/vim-racket/ftdetect/racket.vim
  7. 22
      etc/soft/nvim/+plugins/vim-racket/ftplugin/jsond.vim
  8. 60
      etc/soft/nvim/+plugins/vim-racket/ftplugin/racket-info.vim
  9. 50
      etc/soft/nvim/+plugins/vim-racket/ftplugin/racket.vim
  10. 9
      etc/soft/nvim/+plugins/vim-racket/indent/racket-info.vim
  11. 38
      etc/soft/nvim/+plugins/vim-racket/indent/racket.vim
  12. 70
      etc/soft/nvim/+plugins/vim-racket/syntax/jsond.vim
  13. 206
      etc/soft/nvim/+plugins/vim-racket/syntax/racket-info.vim
  14. 137
      etc/soft/nvim/+plugins/vim-racket/syntax/racket.vim
  15. 9
      etc/soft/nvim/+plugins/vim-racket/test/at-exp.rkt
  16. 9
      etc/soft/nvim/+plugins/vim-racket/test/pollen-mode.rkt

14
etc/soft/nvim/+plugins/vim-racket/README.md

@ -3,16 +3,24 @@ @@ -3,16 +3,24 @@
Installation
------------
This module works with many Vim plugin managers. To use with pathogen, type the following into a terminal:
This module works with native packages and many Vim plugin managers. To use with
pathogen, type the following into a terminal:
cd ~/.vim/bundle
git clone https://github.com/wlangstroth/vim-racket.git
git clone https://github.com/benknoble/vim-racket.git
Re-open your file(s) and benefit from the features of _vim-racket_.
Pairs well with
[rparen.vim](https://gist.github.com/plane/8c872ed174ba4f026b95ea8eb934cead), a
global mapping on `]` to insert the right closer.
## Thanks
Most of the real work on this module was done by [Dale Vaillancourt](https://github.com/dalev), [Paul Cannon](https://github.com/thepaul) and [Asumu Takikawa](https://github.com/takikawa).
Most of the real work on this module was done by [Dale
Vaillancourt](https://github.com/dalev), [Paul
Cannon](https://github.com/thepaul) and [Asumu
Takikawa](https://github.com/takikawa).
To see all the contributors,

8
etc/soft/nvim/+plugins/vim-racket/compiler/raco.vim

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
let current_compiler = 'raco'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco
CompilerSet errorformat=%f:%l:%c:%m

8
etc/soft/nvim/+plugins/vim-racket/compiler/racomake.vim

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
let current_compiler = 'racomake'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ make\ --\ %
CompilerSet errorformat=%f:%l:%c:%m

8
etc/soft/nvim/+plugins/vim-racket/compiler/racosetup.vim

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
let current_compiler = 'racosetup'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ setup
CompilerSet errorformat=%f:%l:%c:%m

8
etc/soft/nvim/+plugins/vim-racket/compiler/racotest.vim

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
let current_compiler = 'racotest'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ test\ %
CompilerSet errorformat=location:%f:%l:%c

30
etc/soft/nvim/+plugins/vim-racket/ftdetect/racket.vim

@ -1,15 +1,35 @@ @@ -1,15 +1,35 @@
let g:racket_hash_lang_regexp = '^#lang\s\+\([^][)(}{[:space:]]\+\)'
let g:racket_hash_lang_dict = get(g:, 'racket_hash_lang_dict',
\ {
\ 'sicp': 'racket',
let g:racket_hash_lang_modifiers =
\ extend(get(g:, 'racket_hash_lang_modifiers', []), [
\ 'at-exp',
\ 's-exp',
\ 'errortrace',
\ 'pollen/mode',
\ ])
let g:racket_hash_lang_modifiers_regex =
\ get(g:, 'racket_hash_lang_modifiers_regex',
\ '\%('.
\ join(map(deepcopy(g:racket_hash_lang_modifiers),
\ {_, v -> printf('\<%s\>', escape(v, '\'))}),
\ '\|')
\ .'\)')
let g:racket_hash_lang_regexp = get(g:, 'racket_hash_lang_regexp',
\ '^#lang\s\+\%\('.g:racket_hash_lang_modifiers_regex.'\s\+\)\?\([^][)(}{[:space:]]\+\)')
let g:racket_hash_lang_dict =
\ extend(get(g:, 'racket_hash_lang_dict', #{}), {
\ 'racket/base': 'racket',
\ 'racket/gui': 'racket',
\ 'typed/racket': 'racket',
\ 'typed/racket/base': 'racket',
\ 'br': 'racket',
\ 'br/quicklang': 'racket',
\ 'scribble/base': 'scribble',
\ 'scribble/manual': 'scribble',
\ })
\ 'info': 'racket-info',
\ 'setup/infotab': 'racket-info',
\ 'syntax/module-reader': 'racket',
\ }, 'keep') " keep prefers user dict to the default
" Tries to detect filetype from #lang line; defaults to ft=racket.
function! RacketDetectHashLang()

22
etc/soft/nvim/+plugins/vim-racket/ftplugin/jsond.vim

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
" Language: jsond
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
" Enable auto begin new comment line when continuing from an old comment line
setl comments=:;;;;,:;;;,:;;,:;
setl formatoptions+=r
"setl commentstring=;;%s
setl commentstring=#\|\ %s\ \|#
let b:ale_linter_aliases = ['racket']
" Undo our settings when the filetype changes away from jsond
" (this should be amended if settings/mappings are added above!)
let b:undo_ftplugin =
\ "setl comments< formatoptions<"
\. "| setl commentstring<"
\. "| unlet b:ale_linter_aliases"

60
etc/soft/nvim/+plugins/vim-racket/ftplugin/racket-info.vim

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
" Language: info
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
" quick hack to allow adding values
setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94
" Enable auto begin new comment line when continuing from an old comment line
setl comments=:;;;;,:;;;,:;;,:;
setl formatoptions+=r
" Simply setting keywordprg like this works:
" setl keywordprg=raco\ docs
" but then vim says:
" "press ENTER or type a command to continue"
" We avoid the annoyance of having to hit enter by remapping K directly.
function s:RacketDoc(word) abort
execute 'silent !raco docs --' shellescape(a:word)
redraw!
endfunction
nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR>
if maparg("K", "n") == ""
nmap <buffer> K <Plug>RacketDoc
endif
" For the visual mode K mapping, it's slightly more convoluted to get the
" selected text:
function! s:Racket_visual_doc()
try
let l:old_a = @a
normal! gv"ay
call system("raco docs '". @a . "'")
redraw!
return @a
finally
let @a = l:old_a
endtry
endfunction
vnoremap <buffer> <Plug>RacketDoc :call <SID>Racket_visual_doc()<cr>
if maparg("K", "v") == ""
vmap <buffer> K <Plug>RacketDoc
endif
"setl commentstring=;;%s
setl commentstring=#\|\ %s\ \|#
let b:ale_linter_aliases = ['racket']
" Undo our settings when the filetype changes away from Racket
" (this should be amended if settings/mappings are added above!)
let b:undo_ftplugin =
\ "setl iskeyword< lispwords< lisp< comments< formatoptions<"
\. "| setl commentstring<"
\. "| nunmap <buffer> K"
\. "| vunmap <buffer> K"
\. "| unlet b:ale_linter_aliases"

50
etc/soft/nvim/+plugins/vim-racket/ftplugin/racket.vim

@ -7,40 +7,23 @@ if exists("b:did_ftplugin") @@ -7,40 +7,23 @@ if exists("b:did_ftplugin")
endif
let b:did_ftplugin = 1
setl iskeyword+=#,%,^
setl lispwords+=module,module*,module+,parameterize,let-values,let*-values,letrec-values,local
setl lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case,syntax-parse
setl lispwords+=define-signature,unit,unit/sig,compund-unit/sig,define-values/invoke-unit/sig
setl lispwords+=define-opt/c,define-syntax-rule
setl lispwords+=struct
" Racket OOP
setl lispwords+=class,define/public,define/private
" kanren
setl lispwords+=fresh,run,run*,project,conde,condu
" loops
setl lispwords+=for,for/list,for/fold,for*,for*/list,for*/fold,for/or,for/and
setl lispwords+=for/hash,for/sum,for/flvector,for*/flvector,for/vector
setl lispwords+=match,match*,match/values,define/match,match-lambda,match-lambda*,match-lambda**
setl lispwords+=match-let,match-let*,match-let-values,match-let*-values
setl lispwords+=match-letrec,match-define,match-define-values
setl lisp
" quick hack to allow adding values
setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94
" Enable auto begin new comment line when continuing from an old comment line
setl comments=:;;;;,:;;;,:;;,:;
setl formatoptions+=r
setl makeprg=raco\ make\ --\ %
" Simply setting keywordprg like this works:
" setl keywordprg=raco\ docs
" but then vim says:
" "press ENTER or type a command to continue"
" We avoid the annoyance of having to hit enter by remapping K directly.
nnoremap <buffer> <Plug>RacketDoc :silent !raco docs <cword><cr>:redraw!<cr>
function s:RacketDoc(word) abort
execute 'silent !raco docs --' shellescape(a:word)
redraw!
endfunction
nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR>
if maparg("K", "n") == ""
nmap <buffer> K <Plug>RacketDoc
endif
@ -64,13 +47,24 @@ if maparg("K", "v") == "" @@ -64,13 +47,24 @@ if maparg("K", "v") == ""
vmap <buffer> K <Plug>RacketDoc
endif
setl commentstring=;;\ %s
" setl commentstring=#\|\ %s\ \|#
"setl commentstring=;;%s
setl commentstring=#\|\ %s\ \|#
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter = "Racket Source Files (*.rkt *.rktl)\t*.rkt;*.rktl\n" .
\ "All Files (*.*)\t*.*\n"
endif
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_words = '#|:|#'
endif
" Undo our settings when the filetype changes away from Racket
" (this should be amended if settings/mappings are added above!)
let b:undo_ftplugin =
\ "setl iskeyword< lispwords< lisp< comments< formatoptions<"
\. "| setl makeprg< commentstring<"
\. "| setl commentstring<"
\. "| nunmap <buffer> K"
\. "| vunmap <buffer> K"
" \. "| nunmap <buffer> K"
\. "| unlet! b:browsefilter"
\. "| unlet! b:match_words"

9
etc/soft/nvim/+plugins/vim-racket/indent/racket-info.vim

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal lisp autoindent nosmartindent
setlocal lispwords=define
let b:undo_indent = "setlocal lisp< ai< si< lw<"

38
etc/soft/nvim/+plugins/vim-racket/indent/racket.vim

@ -7,6 +7,40 @@ if exists("b:did_indent") @@ -7,6 +7,40 @@ if exists("b:did_indent")
endif
let b:did_indent = 1
setlocal ai nosi
setlocal lisp autoindent nosmartindent
let b:undo_indent = "setl ai< si<"
setlocal lispwords+=module,module*,module+,parameterize,let-values,let*-values,letrec-values,local
setlocal lispwords+=define/contract
setlocal lispwords+=λ
setlocal lispwords+=with-handlers
setlocal lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case,syntax-parse
setlocal lispwords+=define-for-syntax,define-syntax-parser,define-syntax-parse-rule,define-syntax-class,define-splicing-syntax-class
setlocal lispwords+=define-signature,unit,unit/sig,compund-unit/sig,define-values/invoke-unit/sig
setlocal lispwords+=define-opt/c,define-syntax-rule
setlocal lispwords+=define-test-suite
setlocal lispwords+=struct
setlocal lispwords+=with-input-from-file,with-output-to-file
" Racket OOP
setlocal lispwords+=class,define/public,define/private,define/override
" kanren
setlocal lispwords+=fresh,run,run*,project,conde,condu
" loops
setlocal lispwords+=for,for/list,for/fold,for*,for*/list,for*/fold,for/or,for/and,for*/or,for*/and
setlocal lispwords+=for/hash,for/sum,for/flvector,for*/flvector,for/vector,for*/vector,for*/sum,for*/hash
setlocal lispwords+=for/async
setlocal lispwords+=for/set,for*/set
setlocal lispwords+=for/first,for*/first
setlocal lispwords+=match,match*,match/values,define/match,match-lambda,match-lambda*,match-lambda**
setlocal lispwords+=match-let,match-let*,match-let-values,match-let*-values
setlocal lispwords+=match-letrec,match-define,match-define-values
setlocal lispwords+=let/cc,let/ec
" qi
setlocal lispwords+=define-flow,define-switch,flow-lambda,switch-lambda,on,switch,π,λ01
let b:undo_indent = "setlocal lisp< ai< si< lw<"

70
etc/soft/nvim/+plugins/vim-racket/syntax/jsond.vim

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
" Vim syntax file
" Language: #lang jsond
if exists("b:current_syntax")
finish
endif
" Hack: the syntax/json.vim file only permits numbers followed by blanks
" followed by some kind of object or array delimiter
" JSON the spec says a JSON is an element is a whitespace-delimited value, which
" can be any of an object, an array, a string, a number, or the keywords
" true/false/null
" Ref: https://www.json.org/json-en.html
syntax match jsonNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>"
syntax keyword jsonBoolean true false
syntax keyword jsonNull null
syntax cluster json contains=jsonObject,jsonArray,jsonNumber,jsonStringMatch,jsonBoolean,jsonNull
syntax region jsonArray matchgroup=jsonBraces start=/\[/ end=/]/ contains=@json fold
syntax region jsonObject matchgroup=jsonBraces start=/{/ end=/}/ contains=jsonKeyMatch fold
syntax match jsonKeyMatch /"\([^"]\|\\\"\)\+"[[:blank:]\r\n]*:/ contains=jsonKey nextgroup=@json skipwhite
syntax region jsonKey start=/"/ end=/"\ze[[:blank:]\r\n]*:/ contained
syntax match jsonStringMatch /"\([^"]\|\\\"\)\+"/ contains=jsonString
syntax region jsonString oneline start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=jsonEscape contained
syntax match jsonEscape ,\\["\\/bfnrt], contained
syntax match jsonEscape /\\u\x\{4\}/ contained
" syntax iskeyword 33,35-39,42-58,60-90,94,95,97-122,126,_
" converted from decimal to char
" :s/\d\+/\=submatch(0)->str2nr()->nr2char()/g
" but corrected to remove duplicate _, move ^ to end
" also exclude comma, for JSON
syntax iskeyword @,!,#-',*-:,<-Z,a-z,~,_,^,,^
" expanded
" syntax iskeyword !,#,$,%,&,',*,+,,,-,.,/,0-9,:,<,=,>,?,@,A-Z,_,a-z,~,^,,^
syntax match jsondSyntax "#lang " nextgroup=jsondLang
syntax keyword jsondLang jsond
syntax keyword jsondName #:name nextgroup=jsondVarName skipwhite skipempty
syntax match jsondVarName ,\<\k\+\>, contained nextgroup=@json skipwhite skipempty
" Comments
syntax match jsondComment /;.*$/ contains=jsondTodo,jsondNote,@Spell
syntax region jsondMultilineComment start=/#|/ end=/|#/ contains=jsondMultilineComment,jsondTodo,jsondNote,@Spell
syntax keyword jsondTodo FIXME TODO XXX contained
syntax match jsondNote /\CNOTE\ze:\?/ contained
highlight default link jsondSyntax Statement
highlight default link jsondName Type
highlight default link jsondComment Comment
highlight default link jsondMultilineComment Comment
highlight default link jsondTodo Todo
highlight default link jsondNote SpecialComment
highlight default link jsonNumber Number
highlight default link jsonBoolean Boolean
highlight default link jsonNull Constant
highlight default link jsonString String
highlight default link jsonEscape Special
highlight default link jsonKey Label
let b:current_syntax = "jsond"

206
etc/soft/nvim/+plugins/vim-racket/syntax/racket-info.vim

@ -0,0 +1,206 @@ @@ -0,0 +1,206 @@
" Vim syntax file
" Language: #lang info
" Initializing:
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" Highlight unmatched parens
syntax match infoError ,[]})],
" syntax match fallbackError /./
if version < 600
set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
else
" syntax iskeyword 33,35-39,42-58,60-90,94,95,97-122,126,_
" converted from decimal to char
" :s/\d\+/\=submatch(0)->str2nr()->nr2char()/g
" but corrected to remove duplicate _, move ^ to end
syntax iskeyword @,!,#-',*-:,<-Z,a-z,~,_,^
" expanded
" syntax iskeyword !,#,$,%,&,',*,+,,,-,.,/,0-9,:,<,=,>,?,@,A-Z,_,a-z,~,^
endif
" https://docs.racket-lang.org/raco/info_rkt.html?q=info
syntax keyword infoSyntax define quote quasiquote if
syntax keyword infoPrimitive cons car cdr list list* reverse append equal?
syntax keyword infoPrimitive string-append make-immutable-hash hash hash-set
syntax keyword infoPrimitive hash-set* hash-remove hash-clear hash-update
syntax keyword infoPrimitive path->string build-path collection-path
syntax keyword infoPrimitive system-library-subpath getenv
syntax match datumDelimiter !\<\.\>!
syntax cluster infoTop contains=infoSyntax,infoPrimitive,datumDelimiter
syntax match infoConstant ,\<\*\k\+\*\>,
syntax match infoConstant ,\<<\k\+>\>,
" Non-quoted lists, and strings
syntax region infoStruc matchgroup=infoParen start="("rs=s+1 end=")"re=e-1 contains=@infoTop
syntax region infoStruc matchgroup=infoParen start="#("rs=s+2 end=")"re=e-1 contains=@infoTop
syntax region infoStruc matchgroup=infoParen start="{"rs=s+1 end="}"re=e-1 contains=@infoTop
syntax region infoStruc matchgroup=infoParen start="#{"rs=s+2 end="}"re=e-1 contains=@infoTop
syntax region infoStruc matchgroup=infoParen start="\["rs=s+1 end="\]"re=e-1 contains=@infoTop
syntax region infoStruc matchgroup=infoParen start="#\["rs=s+2 end="\]"re=e-1 contains=@infoTop
for lit in ['hash', 'hasheq', 'hasheqv']
execute printf('syntax match infoLit "\<%s\>" nextgroup=@infoParen containedin=ALLBUT,.*String,.*Comment', '#'.lit)
endfor
for lit in ['rx', 'rx#', 'px', 'px#']
execute printf('syntax match infoRe "\<%s\>" nextgroup=@infoString containedin=ALLBUT,.*String,.*Comment,', '#'.lit)
endfor
unlet lit
" Simple literals
syntax region infoString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/
syntax region infoString start=/#<<\z(.*\)$/ end=/^\z1$/
syntax cluster infoTop add=infoError,infoConstant,infoStruc,infoString
" Numbers
" anything which doesn't match the below rules, but starts with a #d, #b, #o,
" #x, #i, or #e, is an error
syntax match infoNumberError "\<#[xdobie]\k*"
syntax match infoContainedNumberError "\<#o\k*[^-+0-7delfinas#./@]\>"
syntax match infoContainedNumberError "\<#b\k*[^-+01delfinas#./@]\>"
syntax match infoContainedNumberError "\<#[ei]#[ei]"
syntax match infoContainedNumberError "\<#[xdob]#[xdob]"
" start with the simpler sorts
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+[-+]\d\+\(/\d\+\)\?i\>" contains=infoContainedNumberError
" different possible ways of expressing complex values
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f][-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>" contains=infoContainedNumberError
" hex versions of the above (separate because of the different possible exponent markers)
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+[-+]\x\+\(/\x\+\)\?i\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f][-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match infoNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>"
" these work for any radix
syntax match infoNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]i\?\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f][-+]\(inf\|nan\)\.[0f]i\>" contains=infoContainedNumberError
syntax match infoNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]@[-+]\(inf\|nan\)\.[0f]\>" contains=infoContainedNumberError
syntax keyword infoBoolean #t #f #true #false #T #F
syntax match infoError "\<#\\\k*\>"
syntax match infoChar "\<#\\.\w\@!"
syntax match infoChar "\<#\\space\>"
syntax match infoChar "\<#\\newline\>"
syntax match infoChar "\<#\\return\>"
syntax match infoChar "\<#\\null\?\>"
syntax match infoChar "\<#\\backspace\>"
syntax match infoChar "\<#\\tab\>"
syntax match infoChar "\<#\\linefeed\>"
syntax match infoChar "\<#\\vtab\>"
syntax match infoChar "\<#\\page\>"
syntax match infoChar "\<#\\rubout\>"
syntax match infoChar "\<#\\\o\{1,3}\>"
syntax match infoChar "\<#\\x\x\{1,2}\>"
syntax match infoChar "\<#\\u\x\{1,6}\>"
syntax cluster infoTop add=infoNumber,infoBoolean,infoChar
syntax match infoSyntax "#lang " nextgroup=infoLang
syntax keyword infoLang info setup/infotab
syntax match infoExtSyntax "#:\k\+"
syntax cluster infoTop add=infoExtFunc,infoExtSyntax
" syntax quoting, unquoting and quasiquotation
syntax match infoQuote "#\?['`]"
syntax match infoUnquote "#,"
syntax match infoUnquote "#,@"
syntax match infoUnquote ","
syntax match infoUnquote ",@"
" Comments
syntax match infoComment /;.*$/ contains=infoTodo,infoNote,@Spell
syntax region infoMultilineComment start=/#|/ end=/|#/ contains=infoMultilineComment,infoTodo,infoNote,@Spell
syntax match infoFormComment "#;" nextgroup=@infoTop
syntax keyword infoTodo FIXME TODO XXX contained
syntax match infoNote /\CNOTE\ze:\?/ contained
syntax cluster infoTop add=infoQuote,infoUnquote,infoComment,infoMultilineComment,infoFormComment
" Synchronization and the wrapping up...
syntax sync match matchPlace grouphere NONE "^[^ \t]"
" ... i.e. synchronize on a line that starts at the left margin
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_info_syntax_inits")
if version < 508
let did_info_syntax_inits = 1
command -nargs=+ HiLink highlight link <args>
else
command -nargs=+ HiLink highlight def link <args>
endif
HiLink infoSyntax Statement
HiLink infoPrimitive Function
HiLink infoString String
HiLink infoChar Character
HiLink infoBoolean Boolean
HiLink infoNumber Number
HiLink infoNumberError Error
HiLink infoContainedNumberError Error
HiLink infoQuote SpecialChar
HiLink infoUnquote SpecialChar
HiLink datumDelimiter Delimiter
HiLink infoParen Delimiter
HiLink infoConstant Constant
HiLink infoLit Type
HiLink infoRe Type
HiLink infoComment Comment
HiLink infoMultilineComment Comment
HiLink infoFormComment SpecialChar
HiLink infoTodo Todo
HiLink infoNote SpecialComment
HiLink infoError Error
HiLink fallbackError Error
HiLink infoExtSyntax Type
HiLink infoExtFunc PreProc
delcommand HiLink
endif
let b:current_syntax = "racket-info"

137
etc/soft/nvim/+plugins/vim-racket/syntax/racket.vim

@ -11,15 +11,19 @@ elseif exists("b:current_syntax") @@ -11,15 +11,19 @@ elseif exists("b:current_syntax")
finish
endif
syn case ignore
" Highlight unmatched parens
syn match racketError ,[]})],
if version < 600
set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
else
setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
" syntax iskeyword 33,35-39,42-58,60-90,94,95,97-122,126,_
" converted from decimal to char
" :s/\d\+/\=submatch(0)->str2nr()->nr2char()/g
" but corrected to remove duplicate _, move ^ to end
syntax iskeyword @,!,#-',*-:,<-Z,a-z,~,_,^
" expanded
" syntax iskeyword !,#,$,%,&,',*,+,,,-,.,/,0-9,:,<,=,>,?,@,A-Z,_,a-z,~,^
endif
" Forms in order of appearance at
@ -213,7 +217,7 @@ syn keyword racketFunc locale-string-encoding @@ -213,7 +217,7 @@ syn keyword racketFunc locale-string-encoding
syn keyword racketFunc char? char->integer integer->char
syn keyword racketFunc char=? char<? char<=? char>? char>=?
syn keyword racketFunc char-ci=? char-ci<? char-ci<=? char-ci>? char-ci>=?
syn keyword racketFunc char-alphabetic? char-lowercase? char-uppercase? char-title-case?
syn keyword racketFunc char-alphabetic? char-lower-case? char-upper-case? char-title-case?
syn keyword racketFunc char-numeric? char-symbolic? char-punctuation? char-graphic?
syn keyword racketFunc char-whitespace? char-blank?
syn keyword racketFunc char-iso-control? char-general-category
@ -470,38 +474,53 @@ syn keyword racketFunc seconds->date current-milliseconds @@ -470,38 +474,53 @@ syn keyword racketFunc seconds->date current-milliseconds
syn match racketDelimiter !\<\.\>!
syn match racketSymbol ,\k+, contained
syn cluster racketNormal contains=racketSyntax,racketFunc,racketDelimiter
syn cluster racketQuotedStuff contains=racketSymbol
syn cluster racketQuotedOrNormal contains=racketDelimiter
syn cluster racketTop contains=racketSyntax,racketFunc,racketDelimiter
syn match racketConstant ,\<\*\k\+\*\>,
syn match racketConstant ,\<<\k\+>\>,
syn region racketQuotedStruc start="("rs=s+1 end=")"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
syn region racketQuotedStruc start="#("rs=s+2 end=")"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
syn region racketQuotedStruc start="{"rs=s+1 end="}"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
syn region racketQuotedStruc start="#{"rs=s+2 end="}"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
syn region racketQuotedStruc start="\["rs=s+1 end="\]"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
syn region racketQuotedStruc start="#\["rs=s+2 end="\]"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal contained
" Non-quoted lists, and strings
syn region racketStruc matchgroup=racketParen start="("rs=s+1 end=")"re=e-1 contains=@racketTop
syn region racketStruc matchgroup=racketParen start="#("rs=s+2 end=")"re=e-1 contains=@racketTop
syn region racketStruc matchgroup=racketParen start="{"rs=s+1 end="}"re=e-1 contains=@racketTop
syn region racketStruc matchgroup=racketParen start="#{"rs=s+2 end="}"re=e-1 contains=@racketTop
syn region racketStruc matchgroup=racketParen start="\["rs=s+1 end="\]"re=e-1 contains=@racketTop
syn region racketStruc matchgroup=racketParen start="#\["rs=s+2 end="\]"re=e-1 contains=@racketTop
syn cluster racketQuotedStuff add=racketQuotedStruc
for lit in ['hash', 'hasheq', 'hasheqv']
execute printf('syntax match racketLit "\<%s\>" nextgroup=@racketParen containedin=ALLBUT,.*String,.*Comment', '#'.lit)
endfor
" Non-quoted lists, and strings
syn region racketStruc matchgroup=Delimiter start="("rs=s+1 matchgroup=Delimiter end=")"re=e-1 contains=@racketNormal
syn region racketStruc matchgroup=Delimiter start="#("rs=s+2 matchgroup=Delimiter end=")"re=e-1 contains=@racketNormal
syn region racketStruc matchgroup=Delimiter start="{"rs=s+1 matchgroup=Delimiter end="}"re=e-1 contains=@racketNormal
syn region racketStruc matchgroup=Delimiter start="#{"rs=s+2 matchgroup=Delimiter end="}"re=e-1 contains=@racketNormal
syn region racketStruc matchgroup=Delimiter start="\["rs=s+1 matchgroup=Delimiter end="\]"re=e-1 contains=@racketNormal
syn region racketStruc matchgroup=Delimiter start="#\["rs=s+2 matchgroup=Delimiter end="\]"re=e-1 contains=@racketNormal
for lit in ['rx', 'rx#', 'px', 'px#']
execute printf('syntax match racketRe "\<%s\>" nextgroup=@racketString containedin=ALLBUT,.*String,.*Comment,', '#'.lit)
endfor
unlet lit
" Simple literals
syn region racketString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/
syn region racketString start=/#<<\z(.*\)$/ end=/^\z1$/
syn cluster racketNormal add=racketError,racketConstant,racketStruc,racketString
syn cluster racketQuotedOrNormal add=racketString
" Strings
syn match racketStringEscapeError "\\." contained display
syn match racketStringEscape "\\[abtnvfre'"\\]" contained display
syn match racketStringEscape "\\$" contained display
syn match racketStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display
syn match racketUStringEscape "\\u\x\{1,4}\|\\U\x\{1,8}" contained display
syn match racketUStringEscape "\\u\x\{4}\\u\x\{4}" contained display
syn region racketString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/ contains=racketStringEscapeError,racketStringEscape,racketUStringEscape
syn region racketString start=/#"/ skip=/\\[\\"]/ end=/"/ contains=racketStringEscapeError,racketStringEscape
if exists("racket_no_string_fold")
syn region racketString start=/#<<\z(.*\)$/ end=/^\z1$/
else
syn region racketString start=/#<<\z(.*\)$/ end=/^\z1$/ fold
endif
syn cluster racketTop add=racketError,racketConstant,racketStruc,racketString
" Numbers
@ -561,12 +580,11 @@ syn match racketChar "\<#\\linefeed\>" @@ -561,12 +580,11 @@ syn match racketChar "\<#\\linefeed\>"
syn match racketChar "\<#\\vtab\>"
syn match racketChar "\<#\\page\>"
syn match racketChar "\<#\\rubout\>"
syn match racketChar "\<#\\[0-7]\{1,3}\>"
syn match racketChar "\<#\\x[0-9a-f]\{1,2}\>"
syn match racketChar "\<#\\u[0-9a-f]\{1,6}\>"
syn match racketChar "\<#\\\o\{1,3}\>"
syn match racketChar "\<#\\x\x\{1,2}\>"
syn match racketChar "\<#\\u\x\{1,6}\>"
syn cluster racketNormal add=racketNumber,racketBoolean,racketChar
syn cluster racketQuotedOrNormal add=racketNumber,racketBoolean
syn cluster racketTop add=racketNumber,racketBoolean,racketChar
" Command-line parsing
syn keyword racketExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
@ -574,45 +592,26 @@ syn keyword racketExtFunc command-line current-command-line-arguments once-any h @@ -574,45 +592,26 @@ syn keyword racketExtFunc command-line current-command-line-arguments once-any h
syn match racketSyntax "#lang "
syn match racketExtSyntax "#:\k\+"
syn cluster racketNormal add=racketExtFunc,racketExtSyntax
syn cluster racketTop add=racketExtFunc,racketExtSyntax
" syntax quoting, unquoting and quasiquotation
syn region racketQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal
syn region racketQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=@racketQuotedStuff,@racketQuotedOrNormal
syn region racketQuoted matchgroup=Delimiter start="['`]\?#(" matchgroup=Delimiter end=")" contains=@racketQuotedStuff,@racketQuotedOrNormal
syn region racketUnquote matchgroup=Delimiter start="#,"rs=s+2 end=![ \t\[\]()";]!re=e-1,me=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start="#,@"rs=s+3 end=![ \t\[\]()";]!re=e-1,me=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start="#,("rs=s+3 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start="#,@("rs=s+4 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start="#,\["rs=s+3 end="\]"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start="#,@\["rs=s+4 end="\]"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=","rs=s+1 end=![ \t\[\]()";]!re=e-1,me=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",@"rs=s+2 end=![ \t\[\]()";]!re=e-1,me=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",("rs=s+2 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",@("rs=s+3 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",#("rs=s+3 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",@#("rs=s+4 end=")"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",\["rs=s+2 end="\]"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",@\["rs=s+3 end="\]"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",#\["rs=s+3 end="\]"re=e-1 contained contains=@racketNormal
syn region racketUnquote matchgroup=Delimiter start=",@#\["rs=s+4 end="\]"re=e-1 contained contains=@racketNormal
syn cluster racketQuotedStuff add=racketUnquote
syn region racketQuoted matchgroup=Delimiter start="#['`]"rs=s+2 end=![ \t()\[\]";]!re=e-1,me=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal
syn region racketQuoted matchgroup=Delimiter start="#['`]("rs=s+3 matchgroup=Delimiter end=")"re=e-1 contains=@racketQuotedStuff,@racketQuotedOrNormal
syn match racketQuote "#\?['`]"
syn match racketUnquote "#,"
syn match racketUnquote "#,@"
syn match racketUnquote ","
syn match racketUnquote ",@"
" Comments
syn match racketSharpBang "\%^#![ /].*" display
syn match racketComment /;.*$/ contains=racketTodo,racketNote,@Spell
syn region racketMultilineComment start=/#|/ end=/|#/ contains=racketMultilineComment,racketTodo,racketNote,@Spell
syn match racketFormComment "#;" nextgroup=@racketTop
syn keyword racketTodo FIXME TODO XXX contained
syn match racketTodo /\C\<\(FIXME\|TODO\|XXX\)\ze:\?\>/ contained
syntax match racketNote /\CNOTE\ze:\?/ contained
syn cluster racketNormal add=racketQuoted,racketComment,racketMultilineComment
syn cluster racketQuotedOrNormal add=racketComment,racketMultilineComment
syn cluster racketTop add=racketQuote,racketUnquote,racketComment,racketMultilineComment,racketFormComment
" Synchronization and the wrapping up...
syn sync match matchPlace grouphere NONE "^[^ \t]"
@ -633,6 +632,9 @@ if version >= 508 || !exists("did_racket_syntax_inits") @@ -633,6 +632,9 @@ if version >= 508 || !exists("did_racket_syntax_inits")
HiLink racketFunc Function
HiLink racketString String
HiLink racketStringEscape Special
HiLink racketUStringEscape Special
HiLink racketStringEscapeError Error
HiLink racketChar Character
HiLink racketBoolean Boolean
@ -640,15 +642,20 @@ if version >= 508 || !exists("did_racket_syntax_inits") @@ -640,15 +642,20 @@ if version >= 508 || !exists("did_racket_syntax_inits")
HiLink racketNumberError Error
HiLink racketContainedNumberError Error
HiLink racketQuoted Structure
HiLink racketQuotedStruc Structure
HiLink racketSymbol Structure
HiLink racketQuote SpecialChar
HiLink racketUnquote SpecialChar
HiLink racketDelimiter Delimiter
HiLink racketParen Delimiter
HiLink racketConstant Constant
HiLink racketLit Type
HiLink racketRe Type
HiLink racketComment Comment
HiLink racketMultilineComment Comment
HiLink racketFormComment SpecialChar
HiLink racketSharpBang Comment
HiLink racketTodo Todo
HiLink racketNote SpecialComment
HiLink racketError Error

9
etc/soft/nvim/+plugins/vim-racket/test/at-exp.rkt

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
#lang at-exp racket
(define (bar)
"BAR")
(define (foo)
(displayln @~a{Foo is a @(bar)}))
(foo)

9
etc/soft/nvim/+plugins/vim-racket/test/pollen-mode.rkt

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
#lang pollen/mode racket
(define (bar)
"BAR")
(define (foo)
(displayln ◊~a{Foo is a (bar)}))
(foo)
Loading…
Cancel
Save