1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406
|
" Vim syntax file
" Language: Justfile
" Maintainer: Peter Benjamin <@pbnj>
" Last Change: 2025 Jan 25
" Credits: The original author, Noah Bogart <https://github.com/NoahTheDuke/vim-just/>
if exists('b:current_syntax')
finish
endif
let s:cpo_save = &cpo
set cpo&vim
let b:current_syntax = 'just'
" syncing fromstart prevents mismatched highlighting when jumping around in a justfile
" linebreaks= keeps multi-line constructs highlighted correctly while typing
syn sync fromstart linebreaks=10
" a-zA-Z0-9_-
syn iskeyword @,48-57,_,-
syn match justComment "#.*$" contains=@Spell,justCommentTodo
syn match justCommentInBody '#.*$' contained contains=justCommentTodo,justInterpolation,@justOtherCurlyBraces
syn keyword justCommentTodo TODO FIXME XXX contained
syn match justShebang "^\s*#!.*$" contains=justInterpolation,@justOtherCurlyBraces
syn match justName "\h\k*" contained
syn match justFunction "\h\k*" contained
syn match justPreBodyComment "\v%(\s|\\\n)*%([^\\]\n)@3<!#%([^!].*)?\n%(\t+| +)@=" transparent contained contains=justComment
\ nextgroup=@justBodies skipnl
syn region justBacktick start=/`/ end=/`/
syn region justBacktick start=/```/ end=/```/
syn region justRawString start=/'/ end=/'/
syn region justRawString start=/'''/ end=/'''/
syn region justString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError
syn region justString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError
syn region justShellExpandRawString start=/\v\k@1<!x'/ end=/'/
\ contains=justShellExpandVarRaw,justDollarEscape
syn region justShellExpandRawString start=/\v\k@1<!x'''/ end=/'''/
\ contains=justShellExpandVarRaw,justDollarEscape
syn region justShellExpandString
\ start=/\v\k@1<!x"/ skip=/\\\\\|\\"/ end=/"/
\ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justShellExpandVar,justDollarEscape,justDollarEscapeSplit
syn region justShellExpandString
\ start=/\v\k@1<!x"""/ skip=/\\\\\|\\"/ end=/"""/
\ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justShellExpandVar,justDollarEscape,justDollarEscapeSplit
syn cluster justStringLiterals
\ contains=justRawString,justString,justShellExpandRawString,justShellExpandString
syn cluster justAllStrings contains=justBacktick,@justStringLiterals
syn match justRegexReplacement
\ /\v,%(\_s|\\\n)*%('\_[^']*'|'''%(\_.%(''')@!)*\_.?''')%(\_s|\\\n)*%(,%(\_s|\\\n)*)?\)/me=e-1
\ transparent contained contains=@justExpr,@justStringsWithRegexCapture
syn match justRegexReplacement
\ /\v,%(\_s|\\\n)*%("%(\_[^"]|\\")*"|"""%(\_.%(""")@!)*\_.?""")%(\_s|\\\n)*%(,%(\_s|\\\n)*)?\)/me=e-1
\ transparent contained contains=@justExpr,@justStringsWithRegexCapture
syn region justRawStrRegexRepl start=/\v'/ end=/'/ contained contains=justRegexCapture,justDollarEscape
syn region justRawStrRegexRepl start=/\v'''/ end=/'''/ contained contains=justRegexCapture,justDollarEscape
syn region justStringRegexRepl start=/\v"/ skip=/\\\\\|\\"/ end=/"/ contained contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justRegexCapture,justDollarEscape,justDollarEscapeSplit
syn region justStringRegexRepl start=/\v"""/ skip=/\\\\\|\\"/ end=/"""/ contained contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError,justRegexCapture,justDollarEscape,justDollarEscapeSplit
syn match justRegexCapture '\v\$%(\w+|\{\w+\})' contained
syn cluster justStringsWithRegexCapture contains=justRawStrRegexRepl,justStringRegexRepl
syn cluster justRawStrings contains=justRawString,justRawStrRegexRepl
syn region justStringInsideBody start=/\v\\@1<!'/ end=/'/ contained contains=justInterpolation,@justOtherCurlyBraces,justIndentError
syn region justStringInsideBody start=/\v\\@1<!"/ skip=/\v\\@1<!\\"/ end=/"/ contained contains=justInterpolation,@justOtherCurlyBraces,justIndentError
syn region justStringInShebangBody start=/\v\\@1<!'/ end=/'/ contained contains=justInterpolation,@justOtherCurlyBraces,justShebangIndentError
syn region justStringInShebangBody start=/\v\\@1<!"/ skip=/\v\\@1<!\\"/ end=/"/ contained contains=justInterpolation,@justOtherCurlyBraces,justShebangIndentError
syn match justStringEscapeError '\\.' contained
syn match justStringEscapeSequence '\v\\[tnr"\\]' contained
syn match justStringUEscapeSequence '\v\\u\{[0-9A-Fa-f]{1,6}\}' contained
syn match justAssignmentOperator "\V:=" contained
syn region justExprParen start='\V(' end='\V)' transparent contains=@justExpr
syn region justExprParenInInterp start='\V(' end='\V)' transparent contained contains=@justExprInInterp
syn match justRecipeAt "^@" contained
syn match justRecipeColon ":" contained
syn region justRecipeAttributes
\ matchgroup=justRecipeAttr start='\v^%(\\\n)@3<!\[' end='\V]'
\ contains=justRecipeAttr,justRecipeAttrSep,justRecipeAttrArgs,justRecipeAttrArgError,justRecipeAttrValueShort
syn keyword justRecipeAttr
\ confirm doc extension group linux macos no-cd no-exit-message no-quiet openbsd positional-arguments private script unix windows working-directory
\ contained
syn match justRecipeAttrSep ',' contained
syn match justRecipeAttrValueShort '\v:%(\_s|\\\n)*' transparent contained
\ contains=justRecipeAttrValueColon nextgroup=@justStringLiterals,justInvalidAttrValue
syn match justRecipeAttrValueColon '\V:' contained
syn region justRecipeAttrArgs matchgroup=justRecipeAttr start='\V(' end='\V)' contained
\ contains=@justStringLiterals
syn match justRecipeAttrArgError '\v\(%(\s|\\?\n)*\)' contained
syn match justInvalidAttrValue '\v[^"',]["']@![^,\]]*' contained
syn match justRecipeDeclSimple "\v^\@?\h\k*%(%(\s|\\\n)*:\=@!)@="
\ transparent contains=justRecipeName
\ nextgroup=justRecipeNoDeps,justRecipeDeps
syn region justRecipeDeclComplex start="\v^\@?\h\k*%(\s|\\\n)+%([+*$]+%(\s|\\\n)*)*\h" end="\v%(:\=@!)@=|$"
\ transparent
\ contains=justRecipeName,justParameter
\ nextgroup=justRecipeNoDeps,justRecipeDeps
syn match justRecipeName "\v^\@?\h\k*" transparent contained contains=justRecipeAt,justFunction
syn match justParameter "\v%(\s|\\\n)@3<=%(%([*+]%(\s|\\\n)*)?%(\$%(\s|\\\n)*)?|\$%(\s|\\\n)*[*+]%(\s|\\\n)*)\h\k*"
\ transparent contained
\ contains=justName,justVariadicPrefix,justParamExport,justVariadicPrefixError
\ nextgroup=justPreParamValue
syn match justPreParamValue '\v%(\s|\\\n)*\=%(\s|\\\n)*'
\ contained transparent
\ contains=justParameterOperator
\ nextgroup=justParamValue
syn region justParamValue contained transparent
\ start="\v\S"
\ skip="\\\n"
\ end="\v%(\s|^)%([*+$:]|\h)@=|:@=|$"
\ contains=@justAllStrings,justRecipeParenDefault,@justExprFunc
\ nextgroup=justParameterError
syn match justParameterOperator "\V=" contained
syn match justVariadicPrefix "\v%(\s|\\\n)@3<=[*+]%(%(\s|\\\n)*\$?%(\s|\\\n)*\h)@=" contained
syn match justParamExport '\V$' contained
syn match justVariadicPrefixError "\v\$%(\s|\\\n)*[*+]" contained
syn match justParameterError "\v%(%([+*$]+%(\s|\\\n)*)*\h\k*)@>%(%(\s|\\\n)*\=)@!" contained
syn region justRecipeParenDefault
\ matchgroup=justRecipeDepParamsParen start='\v%(\=%(\s|\\\n)*)@<=\(' end='\V)'
\ contained
\ contains=@justExpr
syn match justRecipeSubsequentDeps '\V&&' contained
syn match justRecipeNoDeps '\v:%(\s|\\\n)*\n|:#@=|:%(\s|\\\n)+#@='
\ transparent contained
\ contains=justRecipeColon
\ nextgroup=justPreBodyComment,@justBodies
syn region justRecipeDeps start="\v:%(\s|\\\n)*%([a-zA-Z_(]|\&\&)" skip='\\\n' end="\v#@=|\\@1<!\n"
\ transparent contained
\ contains=justFunction,justRecipeColon,justRecipeSubsequentDeps,justRecipeParamDep
\ nextgroup=justPreBodyComment,@justBodies
syn region justRecipeParamDep contained transparent
\ matchgroup=justRecipeDepParamsParen
\ start="\V("
\ end="\V)"
\ contains=justRecipeDepParenName,@justExpr
syn keyword justBoolean true false contained
syn match justAssignment "\v^\h\k*%(\s|\\\n)*:\=" transparent contains=justAssignmentOperator
syn match justSet '\v^set' contained
syn keyword justSetKeywords
\ allow-duplicate-recipes allow-duplicate-variables dotenv-load dotenv-filename dotenv-path dotenv-required export fallback ignore-comments positional-arguments quiet script-interpreter shell tempdir unstable windows-shell working-directory
\ contained
syn keyword justSetDeprecatedKeywords windows-powershell contained
syn match justBooleanSet "\v^set%(\s|\\\n)+%(allow-duplicate-%(recip|variabl)es|dotenv-%(loa|require)d|export|fallback|ignore-comments|positional-arguments|quiet|unstable|windows-powershell)%(%(\s|\\\n)*:\=%(\s|\\\n)*%(true|false))?%(\s|\\\n)*%($|#@=)"
\ contains=justSet,justSetKeywords,justSetDeprecatedKeywords,justAssignmentOperator,justBoolean
\ transparent
syn match justStringSet '\v^set%(\s|\\\n)+\k+%(\s|\\\n)*:\=%(\s|\\\n)*%(x?['"])@=' transparent contains=justSet,justSetKeywords,justAssignmentOperator
syn match justShellSet
\ "\v^set%(\s|\\\n)+%(s%(hell|cript-interpreter)|windows-shell)%(\s|\\\n)*:\=%(\s|\\\n)*\[@="
\ contains=justSet,justSetKeywords,justAssignmentOperator
\ transparent skipwhite
\ nextgroup=justShellSetValue
syn region justShellSetValue
\ start='\V[' end='\V]'
\ contained
\ contains=@justStringLiterals,justShellSetError
syn match justShellSetError '\v\k+['"]@!' contained
syn match justAlias '\v^alias' contained
syn match justAliasDecl "\v^alias%(\s|\\\n)+\h\k*%(\s|\\\n)*:\=%(\s|\\\n)*"
\ transparent
\ contains=justAlias,justFunction,justAssignmentOperator
\ nextgroup=justAliasRes
syn match justAliasRes '\v\h\k*%(\s|\\\n)*%(#@=|$)' contained transparent contains=justFunction
syn match justExportedAssignment "\v^export%(\s|\\\n)+\h\k*%(\s|\\\n)*:\=" transparent
\ contains=justExport,justAssignmentOperator
syn match justExport '\v^export' contained
syn match justUnexportStatement '\v^unexport%(\s|\\\n)+\w+\s*$' contains=justUnexport
syn match justUnexport '\v^unexport' contained
syn keyword justConditional if else
syn region justConditionalBraces start="\v\{\{@!" end="\v\}@=" transparent contains=@justExpr
syn region justConditionalBracesInInterp start="\v\{\{@!" end="\v\}@=" transparent contained contains=@justExprInInterp
syn match justLineLeadingSymbol "\v^%(\\\n)@3<!\s+\zs%(\@-|-\@|\@|-)"
syn match justLineContinuation "\\$"
\ containedin=ALLBUT,justComment,justCommentInBody,justShebang,@justRawStrings,justRecipeAttrArgError,justShellExpandRawDefaultValue
syn region justBody
\ start=/\v^\z( +|\t+)%(#!)@!\S/
\ skip='\v\\\n|\n\s*$'
\ end="\v\n\z1@!|%(^\S)@2<=\_.@="
\ contains=justInterpolation,@justOtherCurlyBraces,justLineLeadingSymbol,justCommentInBody,justStringInsideBody,justIndentError
\ contained
syn region justShebangBody
\ start="\v^\z( +|\t+)#!"
\ skip='\v\\\n|\n\s*$'
\ end="\v\n\z1@!|%(^\S)@2<=\_.@="
\ contains=justInterpolation,@justOtherCurlyBraces,justCommentInBody,justShebang,justStringInShebangBody,justShebangIndentError
\ contained
syn cluster justBodies contains=justBody,justShebangBody
syn match justIndentError '\v^%(\\\n)@3<!%( +\zs\t|\t+\zs )\s*\S@='
syn match justShebangIndentError '\v^ +\zs\t\s*\S@='
syn region justInterpolation
\ matchgroup=justInterpolationDelim
\ start="\v\{\{\{@!" end="\v%(%(\\\n\s|\S)\s*)@<=\}\}|$"
\ matchgroup=justInterpError end='^\S'
\ contained
\ contains=@justExprInInterp
syn match justBadCurlyBraces '\v\{{3}\ze[^{]' contained
syn match justCurlyBraces '\v\{{4}' contained
syn match justBadCurlyBraces '\v\{{5}\ze[^{]' contained
syn cluster justOtherCurlyBraces contains=justCurlyBraces,justBadCurlyBraces
syn match justFunctionCall "\v\w+%(\s|\\\n)*\(@=" transparent contains=justBuiltInFunction
" error() is intentionally not included in this list
syn keyword justBuiltInFunction
\ absolute_path append arch blake3 blake3_file cache_dir cache_directory canonicalize capitalize choose clean config_dir config_directory config_local_dir config_local_directory data_dir data_directory data_local_dir data_local_directory datetime datetime_utc encode_uri_component env env_var env_var_or_default executable_dir executable_directory extension file_name file_stem home_dir home_directory invocation_dir invocation_dir_native invocation_directory invocation_directory_native is_dependency join just_executable just_pid justfile justfile_dir justfile_directory kebabcase lowercamelcase lowercase module_dir module_directory module_file num_cpus os os_family parent_dir parent_directory path_exists prepend quote replace replace_regex semver_matches sha256 sha256_file shell shoutykebabcase shoutysnakecase snakecase source_dir source_directory source_file style titlecase trim trim_end trim_end_match trim_end_matches trim_start trim_start_match trim_start_matches uppercamelcase uppercase uuid without_extension
\ contained
syn match justUserDefinedError "\v%(assert|error)%(%(\s|\\\n)*\()@="
syn match justReplaceRegex '\vreplace_regex%(\s|\\\n)*\(@=' transparent contains=justBuiltInFunction nextgroup=justReplaceRegexCall
syn match justReplaceRegexInInterp '\vreplace_regex%(\s|\\\n)*\(@=' transparent contained contains=justBuiltInFunction nextgroup=justReplaceRegexCallInInterp
syn region justReplaceRegexCall
\ matchgroup=justReplaceRegexCall
\ start='\V(' end='\V)'
\ transparent contained
\ contains=@justExpr,justRegexReplacement
syn region justReplaceRegexCallInInterp
\ matchgroup=justReplaceRegexCall
\ start='\V(' end='\V)'
\ transparent contained
\ contains=@justExprInInterp,justRegexReplacement
syn match justParameterLineContinuation '\v%(\s|\\\n)*' contained nextgroup=justParameterError
syn match justRecipeDepParenName '\v%(\(\n?)@3<=%(\_s|\\\n)*\h\k*'
\ transparent contained
\ contains=justFunction
syn cluster justBuiltInFunctions contains=justFunctionCall,justUserDefinedError
syn match justConditionalOperator "\V=="
syn match justConditionalOperator "\V!="
syn match justConditionalOperator "\V=~"
syn match justOperator "\V+"
syn match justOperator "\V/"
syn match justOperator "\V&&"
syn match justOperator "\V||"
syn keyword justConstant
\ HEX HEXLOWER HEXUPPER
\ CLEAR NORMAL BOLD ITALIC UNDERLINE INVERT HIDE STRIKETHROUGH
\ BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE
\ BG_BLACK BG_RED BG_GREEN BG_YELLOW BG_BLUE BG_MAGENTA BG_CYAN BG_WHITE
syn match justShellExpandVarRaw '\v\$%(\{\_[^}]*\}|\w+)' contained contains=justShellExpandRawDefaultDelimiter
syn match justShellExpandRawDefaultDelimiter '\V:-' contained nextgroup=justShellExpandRawDefaultValue
syn match justShellExpandRawDefaultValue '\v\_[^}]*' contained
syn match justShellExpandVar '\v\$%(\w|\\\n\s*)+' contained
syn region justShellExpandVar start='\v\$%(\\\n\s*)*\{' end='\V}' contains=justShellExpandDefaultDelimiter,justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError
syn match justShellExpandDefaultDelimiter '\v:%(\\\n\s*)*-@=' contained nextgroup=justShellExpandDefault
syn region justShellExpandDefault
\ matchgroup=justShellExpandDefaultDelimiter start='\V-' end='\v\}@='
\ contained
\ contains=justStringEscapeSequence,justStringUEscapeSequence,justStringEscapeError
syn match justDollarEscape '\V$$' contained
syn match justDollarEscapeSplit '\v\$%(\\\n\s*)*\$' contained
syn cluster justExprBase contains=@justAllStrings,@justBuiltInFunctions,justConditional,justConditionalOperator,justOperator,justConstant
syn cluster justExpr contains=@justExprBase,justExprParen,justConditionalBraces,justReplaceRegex
syn cluster justExprInInterp contains=@justExprBase,justName,justExprParenInInterp,justConditionalBracesInInterp,justReplaceRegexInInterp
syn cluster justExprFunc contains=@justBuiltInFunctions,justReplaceRegex,justExprParen
syn match justImport /\v^import%(%(\s|\\\n)*\?|%(\s|\\\n)+%(x?['"])@=)/ transparent
\ contains=justImportStatement,justOptionalFile
syn match justImportStatement '^import' contained
syn match justOldInclude "^!include"
syn match justModule /\v^mod%(%(\s|\\\n)*\?)?%(\s|\\\n)+\h\k*\s*%($|%(\s|\\\n)*%(x?['"]|#)@=)/
\ transparent contains=justModStatement,justName,justOptionalFile
syn match justModStatement '^mod' contained
syn match justOptionalFile '\V?' contained
" Most linked colorscheme colors are chosen based on semantics of the color name.
" Some are for parity with other syntax files (for example, Number for recipe body highlighting
" is to align with the make.vim distributed with Vim).
" Deprecated `just` syntaxes are highlighted as Underlined.
"
" Colors are linked 'def'(ault) so that users who prefer other colors
" can override them, e.g. in ~/.vim/after/syntax/just.vim
"
" Note that vim-just's highlight groups are an implementation detail and may be subject to change.
" The list of highlight links is sorted alphabetically.
hi def link justAlias Statement
hi def link justAssignmentOperator Operator
hi def link justBacktick Special
hi def link justBadCurlyBraces Error
hi def link justBody Number
hi def link justBoolean Boolean
hi def link justBuiltInFunction Function
hi def link justComment Comment
hi def link justCommentInBody Comment
hi def link justCommentTodo Todo
hi def link justConditional Conditional
hi def link justConditionalOperator Conditional
hi def link justConstant Constant
hi def link justCurlyBraces Special
hi def link justDollarEscape Special
hi def link justDollarEscapeSplit Special
hi def link justExport Statement
hi def link justFunction Function
hi def link justImportStatement Include
hi def link justIndentError Error
hi def link justInterpError Error
hi def link justInterpolation Normal
hi def link justInterpolationDelim Delimiter
hi def link justInvalidAttrValue Error
hi def link justLineContinuation Special
hi def link justLineLeadingSymbol Special
hi def link justModStatement Keyword
hi def link justName Identifier
hi def link justOldInclude Error
hi def link justOperator Operator
hi def link justOptionalFile Conditional
hi def link justParameterError Error
hi def link justParameterOperator Operator
hi def link justParamExport Statement
hi def link justRawString String
hi def link justRawStrRegexRepl String
hi def link justRecipeAt Special
hi def link justRecipeAttr Type
hi def link justRecipeAttrArgError Error
hi def link justRecipeAttrSep Operator
hi def link justRecipeAttrValueColon Operator
hi def link justRecipeColon Operator
hi def link justRecipeDepParamsParen Delimiter
hi def link justRecipeSubsequentDeps Delimiter
hi def link justRegexCapture Identifier
hi def link justSet Statement
hi def link justSetDeprecatedKeywords Underlined
hi def link justSetKeywords Keyword
hi def link justShebang SpecialComment
hi def link justShebangBody Number
hi def link justShebangIndentError Error
hi def link justShellExpandDefault Character
hi def link justShellExpandDefaultDelimiter Operator
hi def link justShellExpandRawDefaultDelimiter Operator
hi def link justShellExpandRawDefaultValue Character
hi def link justShellExpandRawString String
hi def link justShellExpandString String
hi def link justShellExpandVar PreProc
hi def link justShellExpandVarRaw PreProc
hi def link justShellSetError Error
hi def link justString String
hi def link justStringEscapeError Error
hi def link justStringEscapeSequence Special
hi def link justStringInShebangBody String
hi def link justStringInsideBody String
hi def link justStringRegexRepl String
hi def link justStringUEscapeSequence Special
hi def link justUnexport Statement
hi def link justUserDefinedError Exception
hi def link justVariadicPrefix Statement
hi def link justVariadicPrefixError Error
let &cpo = s:cpo_save
unlet s:cpo_save
|