Initial vim syntax for just
including: - operators - quotes/strings - raw quotes/strings - backtick sub-shells - curly substitutions - "set shell" handling
This commit is contained in:
parent
7275f13738
commit
6600e7b295
55
vim-just/example/justfile
Normal file
55
vim-just/example/justfile
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env oh-no
|
||||||
|
# vim:filetype=just
|
||||||
|
|
||||||
|
set shell := ["python", "-c"]
|
||||||
|
set something
|
||||||
|
|
||||||
|
alias d := dogs
|
||||||
|
|
||||||
|
export HOTDOGPARTY := hats
|
||||||
|
|
||||||
|
now_ish := `print("oh gee")` + `print(sum([1, 2, 5]))`
|
||||||
|
|
||||||
|
an_string := "sit ready \"for reals\" 'uh huh' {{an_raw_string + '{{what' }}"
|
||||||
|
|
||||||
|
an_raw_string := 'sit ready "wow" {{not_gonna}}'
|
||||||
|
|
||||||
|
hats := '''
|
||||||
|
very serious hat's
|
||||||
|
'''
|
||||||
|
|
||||||
|
wats := """
|
||||||
|
{{an_string}} \"yay\" 'ok'
|
||||||
|
|
||||||
|
{{ 'dog' + just_executable()}}
|
||||||
|
|
||||||
|
{{justfile()}}
|
||||||
|
|
||||||
|
{{justfile_directory()}}
|
||||||
|
|
||||||
|
{{arch()}} {{os()}}
|
||||||
|
"""
|
||||||
|
|
||||||
|
serious_business := ```
|
||||||
|
from __future__ import print_function
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
print(f"home: {os.environ.get("HOME", "?")}")
|
||||||
|
print(f"now-ish: {datetime.datetime.now()}")
|
||||||
|
```
|
||||||
|
|
||||||
|
dogs: aminal manimal _secret
|
||||||
|
|
||||||
|
# show the aminal by kind
|
||||||
|
aminal kind='dog':
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
print('\n'.join(os.environ.keys()), file=sys.stderr)
|
||||||
|
|
||||||
|
_secret +WHATEVER='OK':
|
||||||
|
@echo "don't tell anyone {{WHATEVER}}"
|
||||||
|
|
||||||
|
manimal:
|
||||||
|
@echo wow
|
1
vim-just/ftdetect/just.vim
Normal file
1
vim-just/ftdetect/just.vim
Normal file
@ -0,0 +1 @@
|
|||||||
|
autocmd BufReadPost justfile,*.justfile setfiletype just
|
118
vim-just/syntax/just.vim
Normal file
118
vim-just/syntax/just.vim
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Just Command Runner
|
||||||
|
" Maintainer: Dan Buch
|
||||||
|
" Latest Revision: 22 May 2021
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:shell_name = "sh"
|
||||||
|
let b:load_time_cursor = getpos('.')
|
||||||
|
let b:debug = $JUST_VIM_DEBUG == 'enabled'
|
||||||
|
|
||||||
|
function JustGetShellName()
|
||||||
|
let lineno = 0
|
||||||
|
|
||||||
|
while lineno < line("$")
|
||||||
|
let lineno += 1
|
||||||
|
let line = getline(lineno)
|
||||||
|
|
||||||
|
let set_shell_match = "^ *set *shell *:"
|
||||||
|
if matchstr(line, set_shell_match) == ""
|
||||||
|
if b:debug
|
||||||
|
echom "line number " . lineno . " does not match '" . set_shell_match . "': '" . line . "'"
|
||||||
|
endif
|
||||||
|
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if b:debug
|
||||||
|
echom "found matching line number " . lineno . ": " . line
|
||||||
|
endif
|
||||||
|
|
||||||
|
:normal /"<CR>lv/"<CR>hy:nohl
|
||||||
|
let shell_name = @"
|
||||||
|
|
||||||
|
if shell_name != ""
|
||||||
|
return shell_name
|
||||||
|
fi
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return "sh"
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
try
|
||||||
|
let shell_name = JustGetShellName()
|
||||||
|
|
||||||
|
if b:debug
|
||||||
|
echom "found shell name: '" . shell_name . "'"
|
||||||
|
endif
|
||||||
|
|
||||||
|
exe "syn include @setshellsyntax syntax/" . shell_name . ".vim"
|
||||||
|
|
||||||
|
let b:shell_name = shell_name
|
||||||
|
catch
|
||||||
|
if b:debug
|
||||||
|
echom "oh no: " v:exception
|
||||||
|
echom "just.vim: falling back to sh syntax"
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn include @setshellsyntax syntax/sh.vim
|
||||||
|
endtry
|
||||||
|
|
||||||
|
syn keyword justKeyword alias export if else set
|
||||||
|
|
||||||
|
syn keyword justFunction arch os os_family
|
||||||
|
syn keyword justFunction env_var env_var_or_default invocation_directory
|
||||||
|
syn keyword justFunction justfile justfile_directory just_executable
|
||||||
|
|
||||||
|
syn keyword justSetting shell export dotenv-load positional-arguments
|
||||||
|
|
||||||
|
syn match justOperator /\v:/
|
||||||
|
syn match justOperator /\v\)/
|
||||||
|
syn match justOperator /\v\(/
|
||||||
|
syn match justOperator /\v\=/
|
||||||
|
syn match justOperator /\v:\=/
|
||||||
|
|
||||||
|
syn match justQuote /\v"/
|
||||||
|
syn match justQuote /\v'/
|
||||||
|
syn match justQuote /\v"""/
|
||||||
|
syn match justQuote /\v'''/
|
||||||
|
|
||||||
|
syn match justBacktick /\v\`/
|
||||||
|
syn match justBacktick /\v\`\`\`/
|
||||||
|
|
||||||
|
syn match justCurlyBrace /\v\{\{/
|
||||||
|
syn match justCurlyBrace /\v\}\}/
|
||||||
|
|
||||||
|
syn region justCurlyBraced matchgroup=justCurlyBrace start=/\v\{\{/ skip=/\v\\\{/ end=/\v\}\}/ contains=justKeyword,justFunction,justOperator,justQuote,justString,justRawString
|
||||||
|
|
||||||
|
syn region justString matchgroup=justQuote start=/\v"/ skip=/\v\\"/ end=/\v"/ contains=justCurlyBraced
|
||||||
|
syn region justString matchgroup=justQuote start=/\v"""/ skip=/\v\\"/ end=/\v"""/ contains=justCurlyBraced
|
||||||
|
|
||||||
|
syn region justRawString matchgroup=justQuote start=/\v'/ end=/\v'/
|
||||||
|
syn region justRawString matchgroup=justQuote start=/\v'''/ end=/\v'''/
|
||||||
|
|
||||||
|
syn region justSubshell matchgroup=justBacktick start=/\v\`/ skip=/\v\\\`/ end=/\v\`/ contains=@setshellsyntax
|
||||||
|
syn region justSubshell matchgroup=justBacktick start=/\v\`\`\`/ skip=/\v\\\`/ end=/\v\`\`\`/ contains=@setshellsyntax
|
||||||
|
|
||||||
|
syn match justComment /\v#.*$/
|
||||||
|
|
||||||
|
syn match justShebang /\v^ *#!.*$/
|
||||||
|
|
||||||
|
hi def link justKeyword Keyword
|
||||||
|
hi def link justSetting Keyword
|
||||||
|
hi def link justOperator Operator
|
||||||
|
hi def link justComment Comment
|
||||||
|
hi def link justShebang PreProc
|
||||||
|
hi def link justFunction Function
|
||||||
|
hi def link justQuote String
|
||||||
|
hi def link justString String
|
||||||
|
hi def link justRawString String
|
||||||
|
hi def link justCurlyBrace Keyword
|
||||||
|
hi def link justBacktick Special
|
||||||
|
|
||||||
|
let b:current_syntax = "just"
|
||||||
|
|
||||||
|
" vim:expandtab:ts=2:sts=2
|
Loading…
x
Reference in New Issue
Block a user